-
- 关闭防火墙
|
- 关闭SELinux
|
- 查看yum支持的包
- 并安装docker引擎
|
- 启动docker
- 设置docker自启动
- 测试docker是否安装成功?
|
- 镜像命令
-
- 获取镜像名叫cento的镜像
|
- 查看主机已有的镜像
- 镜像搜索
|
- 删除镜像(3)
|
- 容器命令
-
- 创建一个容器
- 查看未开启的镜像
- 启动容器
|
- 创建并启动容器(docker不是容器,是管理容器的工具)
|
- 以守护态的形式在后台运行
|
- 获取容器信息
- 获取容器启动时输出的信息
- 终止容器
- 重开起容器
- 重启restart 换 start
|
- 进入容器里边
- 退出
|
- 删除容器
|
卡片2
- 其他命令
-
- docker 日志帮助
- 查看容器日志
|
- 从容器拷贝文件到主机上
|
- java环境
-
- 查看java镜像
- 下载jdk
- 运行jdk镜像
|
- docker实践_安装Tomcat
-
- 查看tomcat镜像
- 下载tomcat镜像
- 查看所有镜像
- 启动Tomcat容器
|
- 查看防火墙
- 关闭防火墙
- 开启防火墙
|
- docker 实践_安装Mysql
-
- 查看
- 下载
- 启动
|
卡片3
- docker数据管理_配置数据卷
-
- 先查看并关停已有的容器(先暂停再删除)
- 先创建一下Tomcat并进入再找到容器中webapps的路径
- 退回并删除刚刚创建的,重新创建并添加参数-v 将主机的本地绝对路经挂载到刚刚copy下来的容器的路经下面
- 并重启
- 在网站上输入本机的IP以及文件所在路径
|
- docker数据管理_数据卷容器
查看数据卷命令 查看数据卷信息(路径) 查看docker存放文件的地方里的内容 这就是docker存放文件的路径 进入volume后再进入里面存数据的地方 创建文件并在浏览器上运行 出现这个问题 原因分析: 写错了路径 |
- Mysql数据持久化(上)
第一次创建了这个dockerMysql容器,但始终没法运行 删了重弄 查看日志(不被允许,权限受限制) 删了重弄,这次加个 --privileged 然后就好了进容器里了 |
卡片4
- Mysql数据持久化(下)
问题1: 解决方式: vi /etc/sysctl.conf #新增一行 net.ipv4.ip_forward=1 #执行命令 systemctl restart network 注释呀,你写进去,注释掉,那不是相当于没写吗 问题2:找不到镜像 换个源 |
2.匿名挂载
|
2.数据卷挂载还可以指定权限
|
- 构建镜像
构建centos镜像
|
构建java镜像
run 命令创建的中间镜像会缓存,会在下次构建中使用,如果不想使用这些缓存镜像,可以指定 --no-cache参数 |
卡片5
- FROM/MAINTAINER/RUN/ADD/CMD/
tar -cvf info.tar a.info b.info
vim Dockerfile
【
# 基础镜像
FROM java:8
# 维护者
MAINTAINER baizhan<baizhan@163.com>
# 工作目录 切换目录
WORKDIR /opt
# 构建镜像的时候执行的命令
RUN mkdir abc
#将本地文件添加到容器内
ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压
#构建成功后执行的命令
CMD echo "This is a test." | wc - #wc的用法
】
docker build -t test:v3
docker run -it test:v3
卡片6
- ENV
FROM java:8
【
# 维护者
MAINTAINER baizhan<baizhan@163.com>
# 工作目录 切换目录
WORKDIR /opt
# 构建镜像的时候执行的命令
RUN mkdir abc
#将本地文件添加到容器内
ADD ./apache-tomcat-9.0.76.tar.gz /opt
#构建成功后执行的命令
#CMD echo "This is a test." | wc -
】
-
- (额外仿照jdk对Tomcat进行相关操作)
- linux 解压和压缩文件
- tar -zxvf jdk-8u201-linux-x64.tar.gz -c /usr/local #解压文件
- tar -zcvf jdk-8u201-linux-x64.tar.gz jdk-8u201-linux-x64 #压缩文件
docker build -t test2:v1 .
docker run -it test2:v1
ls
cd apache-tomcat-9.0.76
ls
cd bin
./startup.sh #在bin路径下确实可以运行tomcat
但如果返回到/opt 路径下就不行了(如果不配置环境变量的话)
所以操作如下:
【
# 基础镜像
FROM java:8
# 维护者
MAINTAINER baizhan<baizhan@163.com>
# 工作目录 切换目录
WORKDIR /opt
# 构建镜像的时候执行的命令
RUN mkdir abc
#将本地文件添加到容器内
ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压
#构建成功后执行的命令
CMD echo "This is a test." | wc - #wc的用法
#环境变量
ENV TOMCAT_HOME=/opt/apache-tomcat-9.0.76 #设置了一个Tomcat的home路径
ENV PATH=$PATH:$TOMCAT_HOME/bin #将该Tomcat路径加到Path路径里
】
(permission denied)
- EXPOSE
【
# 基础镜像
FROM java:8
# 维护者
MAINTAINER baizhan<baizhan@163.com>
# 工作目录 切换目录
WORKDIR /opt
# 构建镜像的时候执行的命令
RUN mkdir abc
#将本地文件添加到容器内
ADD ./info.tar /opt #如果是压缩文件的话,会自动为我们解压
#构建成功后执行的命令
CMD echo "This is a test." | wc - #wc的用法
#环境变量
ENV TOMCAT_HOME=/opt/apache-tomcat-9.0.76 #设置了一个Tomcat的home路径
ENV PATH=$PATH:$TOMCAT_HOME/bin #将该Tomcat路径加到Path路径里
#对外暴露端口
EXPOSE 8080
】
docker run -it -p 8080:8080 #绑定暴露的对外端口号
- VOLUMN
VOLUME /data #一个卷可以存在于一个或多个容器的指定目录
- ONBUILD
cd /opt
mkdir abc
cd abc
vim Dockerfile
【
FROM centos
WORKDIR /data
ONBUILD RUN mkdir test
docker build -t test3:v1 .
docker run -it test3:v1
】
ls #没有test 文件, 单纯一个镜像不作操作,只有别人继承它的时候才会作用
exit
mkdir d
cd d
vim Dockerfile
【
FROM test3:v1
】
docker build -t test3:v2 .
docker run -it test3:v2
ls #有test文件
- CMD和ENTRYPOINT的区别
vim Dockerfile
【
#基础镜像
#基础镜像
from centos
#启动容器运行命令
CMD ["ls" , "-a"]
】
docker build -t test4:v1 .
docker run -it test4:v1
docker run -it test4:v1 ls -l #对CMD的指令进行替换
vim Dockerfile
【
#基础镜像
#基础镜像
from centos
#启动容器运行命令
ENTRYPOINT ["ls" , "-a"]
】
docker build -t test4:v2
docker run -it test4:v2 -l #对ENTRYPOINT的指令进行追加
- 构建tomcat 的镜像
docker search tomcat |wc -l
tar -zxvf apache-tomcat-9.0.76.tar.gz
cd apache-tomcat-9.0.76
cd bin
ls #查看到有startup.sh文件
vim Dockerfile
【
#基础镜像
#基础镜像
FROM openjdk:11
#维护者
MAINTAINER baizhan
#将本地文件添加到容器内
ADD ./apache-tomcat-9.0.76.tar.gz /usr/local
#设置工作目录
WORKDIR /usr/local
#设置环境变量
ENV TOMCAT_HOME=/usr/local/apache-tomcat-9.0.76
ENV PATH=$PATH:$TOMCAT_HOME/bin
#保留端口
EXPOSE 8080
#启动容器运行命令
CMD startup.sh && tail -F /usr/local/ apache-tomcat-9.0.76/bin/catalina.bat
】
docker build -t tomcat:1.0 . # " . "代表Dockerfile文件和该命令在同一个目录
docker run --name tomcat -d -p 8080:8080 tomcat:1.0 #运行刚刚创建的镜像
卡片7
- docker0 详解
ifconfig
#看到:
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:58:9b:bc:66 brd ff:ff:ff:ff:ff:ff
inet172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:58ff:fe9b:bc66/64 scope link
valid_lft forever preferred_lft forever
57: vethc23b124@if56: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 12:64:29:59:42:ea brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::1064:29ff:fe59:42ea/64 scope link
valid_lft forever preferred_lft forever
docker run --name mytomcat -d -p 8080:8080 docker.io/tomcat
docker exec -it tomcat /bin/bash
ip addr
问题:没办法使用ifconfig 和ip addr 命令
问题解决:(阉割版的Tomcat,纯净的镜像)
在容器里使用:
apt-get update
apt install net-tools
ifconfig
root@0a5a85d262e4:/usr/local/tomcat# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 3277 bytes 10820785 (10.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3214 bytes 181688 (177.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#出现172.17.0.2
- evth-pair(容器通过这个技术分配IP)
docker run --name tomcat3 -d -p 9090:8080 docker.io/tomee
docker exec -it mytomcat ping tomcat3
[root@localhost opt]# docker exec -it mytomcat ping tomcat2
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:290: starting container process caused "exec: \"ping\": executable file not found in $PATH"
#报错
docker exec -it tomcat3 /bin/bash
ifconfig
root@80b82ebc2d88:/usr/local/tomee# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet172.17.0.4 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:4 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)
RX packets 4075 bytes 30095862 (30.0 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3506 bytes 194772 (194.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#出现172.17.0.4
61: veth9f3b85c@if60: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether be:aa:d7:25:26:70 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::bcaa:d7ff:fe25:2670/64 scope link
valid_lft forever preferred_lft forever
65: veth1224aaa@if64: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether da:73:51:80:e1:6a brd ff:ff:ff:ff:ff:ff link-netnsid 2
inet6 fe80::d873:51ff:fe80:e16a/64 scope link
valid_lft forever preferred_lft forever
虚拟接口,成对出现
docker使用linux的桥接,宿主机中一个docker 容器的网桥:即Docker0
docker stop $(docker ps -aq) #暂停所有的容器
docker rm $(docker ps -aq) #删掉容器
ifconfig #只有docker0,刚刚创建的网桥不在了
- 容器互联
Docker网络管理——容器互联
docker run --name tomcat3 -d -p 8080:8080 docker.io/tomee
docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql:5.7
docker exec -it mysql /bin/bash
ifconfig
#还是不行
#换了个tomee的镜像再重复刚刚操作就好了
#ip 是172.17.0.4
exit
-
- ping ip
docker exec -it mytomcat /bin/bash
ping 172.17.0.4 #可以ping通,因为两个容器都在同一个局域网下
问题:要下载语言包
apt -y install iputils-ping
-
- ping 名字
删除所有Tomcat容器
docker run --name my_tomcat3 -d -p 8080:8080 --link mysql1 tomcat
docker run --name mysql3 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker exec -it my_tomcat3 ping mysql3
问题:没ping通
原因分析:两个容器都要下载ping 命令
问题: mysql ping不了
解决:
apt-get update
apt-key adv --keyserver https://mirrors.tuna.tsinghua.edu.cn/ubuntu --recv-keys B7B3B788A8D3785C
apt -y install iputils-ping
#能通过名字进行Ping的原因分析:
映射关系
docker exec -it my_tomcat3 /bin/bash
cat /etc/hosts
[root@localhost opt]# docker exec -it my_tomcat1 /bin/bash
root@694940ed4da1:/usr/local/tomee# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 mysql1 b6f400762441
172.17.0.3 694940ed4da1
- docker4种网络模式
Host模式
容器和宿主机共同一个网卡,使用宿主机的IP和端口(同时可以访问你的容器,全开放,不安全)
Container模式
刚创建的容器和之前创建的容器共用一个IP ,而不是和宿主机共享(极少用)
None模式
创建的容器没办法联网,最安全
bridge模式(默认,最常用)
docker0 分配IP,在同一个局域网里
- 自定义网络
docker network --help
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# 模式 网段 网关 名字
#192.168.66.0/24 : 192.168.66.1-192.168.66.254
#192.168.0.0/16 : 192.168.0.1-192.168.255.254
docker run --name tomcat -d -p 8080:8080 tomee
docker ps
docker network connect mynet tomcat #方法1
docker network inspect mynet
"1604ea3b0b420507237b7d46fee2fc0633da421c5a539a436af4fe6130f5cf52": {
"Name": "tomcat",
"EndpointID": "d0f5e72ad1942ea5b7ac38c848f87675b2696776ecce3355b2f01307c84da688",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
docker network connect mynet tomcat
docker run -d -p 8090:8080 --name tomcat2 --net mynet tomee #方法2
docker network inspect mynet
"Containers": {
"1604ea3b0b420507237b7d46fee2fc0633da421c5a539a436af4fe6130f5cf52": {
"Name": "tomcat",
"EndpointID": "d0f5e72ad1942ea5b7ac38c848f87675b2696776ecce3355b2f01307c84da688",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
},
"363b1a8fe1003533b1c872709aa61d583664a54723c799621afefe94a784207f": {
"Name": "tomcat2",
"EndpointID": "b3cd0b6cefe3d2079d582e9c5f9c60fe11a206179194e21296377984516fea40",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
}
都在同一个网络下就能ping通
网关相同就能ping通
docker run -d -p 7070:8080 --name tomcat4 --net=host tomee #指定Docker的连接方式
- Docker公有云-DockerHub
- Docker C|S架构
sudo docker version
sudo docker -H tcp://127.0.0.1:1234 (docker run / docker pull )
- Docker的联合文件
【
FROM centos:6.9
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS
Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
&& \
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-6.repo
&& \
yum install nginx -y
WORKDIR /usr/share/nginx/html
ADD xiaoniao.tar.gz .
ADD init.sh /init.sh
EXPOSE 80
VOLUME /usr/share/nginx/html
CMD ["/bin/bash","/init.sh"]
】