一、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 一样可以访问,数据卷容器还有一个好处是不管这个容器是否运行都会起作用,只要有容器在使用数据卷容器就无法删除