一、Docker网络设置
默认情况下,docker
会创建一个桥接网卡[docker 0]
,docker有2种映射方式,一种是随机映射,一种是指定映射
提示:生产场景一般不使用随机映射
,但是随机映射的好处就是由docker分配
,端口不会冲突
使用docker启动nginx随机映射配置
[root@localhost ~]# docker run -d -P nginx a696eb447cf09331c4dcb0ac13b9211a21e0248bd7326e2520c3313613de033a [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a696eb447cf0 nginx "nginx -g 'daemon ..." 5 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp festive_brown 8c323a172a33 nginx "nginx -g 'daemon ..." 12 minutes ago Up 12 minutes 80/tcp elegant_babbage 573227eb789b centos "/bin/bash" About an hour ago Up 36 minutes abcdocker [root@localhost ~]# #物理机的32769被映射到80端口 #-P代表随机映射
查看日志
我们可以使用docker logs [ID/Name]来查看日志
docker logs a696eb447cf0
使用docker启动一个nginx,指定81
端口
docker run -d -p 127.0.0.1:81:80 --name mynginx nginx
通过端口映射,我们就可以非常方便的去访问到容器内部的服务
二、Docker数据管理
Docker数据分为两种:
数据卷: -v /data -v src:dst 数据卷容器: --volumes-from
可以将数据卷理解为挂载,可以将数据mount到docker镜像中,让我在docker镜像里写数据时,实际写入的是物理主机里面。如果容器多了,不方便管理
数据卷设置
案例:我们创建一个容器,起名叫nginx-volume-test
挂载到容器中的/data
目录下
docker run -d --name nginx-volume-time -v /data nginx
我们可以通过docker inspect
来查看mount
的情况
[root@localhost ~]# docker inspect -f {{.Mounts}} nginx-volume-time [{volume 01ad5c5cfe63d415e0bf6ff98e2f866f85979769830f9066326a43b3b888ba49 /var/lib/docker/volumes/01ad5c5cfe63d415e0bf6ff98e2f866f85979769830f9066326a43b3b888ba49/_data /data local true }] [root@localhost ~]#
mount挂载就是我们下面路径下的内容
[root@localhost ~]# cd /var/lib/docker/volumes/01ad5c5cfe63d415e0bf6ff98e2f866f85979769830f9066326a43b3b888ba49/_data [root@localhost _data]# pwd /var/lib/docker/volumes/01ad5c5cfe63d415e0bf6ff98e2f866f85979769830f9066326a43b3b888ba49/_data [root@localhost _data]#
我们可以在这个文件下创建一个文件,然后在进容器中进行查看
[root@localhost _data]# touch abcdocker.txt [root@localhost _data]# ls abcdocker.txt #进入容器 [root@localhost ~]# ./docker_in.sh nginx-volume-time mesg: ttyname failed: No such file or directory root@b2ca998c2c4d:/# ls /data abcdocker.txt root@b2ca998c2c4d:/#
我们还可以使用-v
指定一个卷用来作为存储
我们可以创建一个目录,用来指定
docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx #提示:-v /data/docker-volume-nginx 存储文件的目录 # data 容器中的目录
查看
[root@localhost ~]# echo "123" >>/data/docker-volume-nginx/1.txt [root@localhost ~]# ./docker_in.sh nginx-volume-test2 mesg: ttyname failed: No such file or directory root@eb730c001591:/# cat /data/1.txt 123 root@eb730c001591:/#
提示:这种方法生产上会比较实用一些,但是这种方式dockerfile
里不支持.因为这种方法不可移植
我们可以添加几个参数
[root@localhost ~]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data:ro nginx # 添加ro代表只读,可以使用只读的方式来挂载
容器还可以挂载文件
容器数据之间同步
案例:
[root@localhost ~]# docker run -d --name nfs -v /root/nfs-data:/data nginx 16faeea7b5e36b74fa69fa1942290463eff7122e509fb565886a9b12957d2e34 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 16faeea7b5e3 nginx "nginx -g 'daemon ..." 3 seconds ago Up 2 seconds 80/tcp nfs eb730c001591 nginx "nginx -g 'daemon ..." 10 minutes ago Up 10 minutes 80/tcp nginx-volume-test2 b2ca998c2c4d nginx "nginx -g 'daemon ..." 24 minutes ago Up 24 minutes 80/tcp nginx-volume-time 0f1a2d0d447f nginx "nginx -g 'daemon ..." About an hour ago Up About an hour 127.0.0.1:81->80/tcp mynginx a696eb447cf0 nginx "nginx -g 'daemon ..." 11 hours ago Up 11 hours 0.0.0.0:32768->80/tcp festive_brown 573227eb789b centos "/bin/bash" 12 hours ago Up 10 hours abcdocker [root@localhost ~]# docker run --rm -it --volumes-from nfs centos /bin/bash [root@908800f2b22e /]# cd /data/ [root@908800f2b22e data]# touch 123 [root@908800f2b22e data]# ls 123 [root@908800f2b22e /]# exit [root@localhost ~]# ls nfs-data/ 123
数据卷容器
数据卷容器就是可以让一个容器访问另一个容器的卷,不管这个容器是否运行都可以访问到。
数据卷容器简单解释就是:它可以让这个数据在多个容器中共享
docker run -it --rm --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash --volumes-from 另一个容器的名称
此时我们可以看到根目录下有data目录,因为默认是没有的
[root@a7ee4c273cb0 /]# ls /data/1.txt /data/1.txt
现在我们可以访问到nginx-volume-test2
下面挂载的目录,这就实现类似nfs的功能
提示:我们现在如果停掉test2
一样可以访问,数据卷容器还有一个好处是不管这个容器是否运行都会起作用,只要有容器在使用数据卷容器就无法删除