Dockervs.VMDocker的网络模式Docker通过使用Linux桥接来提供容器之间的通信。Docker的网络模式有四种,分别是以下四种模式host模式,使用--net=host指定。容器模式,使用--net=container:NAMEorID指定。无模式,用--net=none指定。bridge模式下,使用--net=bridge指定,默认配置host模式。如果容器使用宿主机模式,则容器不会获得独立的NetworkNamespace,而是与宿主机共享一个NetworkNamespace。容器不会虚拟出自己的网卡和配置IP,而是使用宿主机的IP和端口。就像直接在宿主机上运行一样。但是容器的文件系统、进程列表等仍然和宿主机是隔离的。容器模式该模式指定新创建的容器与现有容器共享网络命名空间,而不是与主机共享。新创建的容器不会创建自己的网卡和配置IP,而是与指定的容器共享IP、端口范围等。同样,这两个容器除了网络之外仍然是隔离的。none模式这种模式不同于前两种。Docker容器有自己的NetworkNamespace,但是Docker容器没有任何网络配置。而是需要我们手动给Docker容器添加网卡、配置IP等。桥接模式该模式是Docker的默认网络设置。该模式将为每个容器分配一个网络命名空间,并将主机上的Docker容器连接到虚拟网桥。运行容器[root@centos7~]#dockerrun-d-Pnginx#-d启动到后台运行6135db66a7d7c1237901a79974f88f1079b3d467c14ce83fc46bc6b4eb8b3240[root@centos7~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6135db66a7d7nginx"nginx-g'daemonoff"33secondsagoup31seconds0.0.0.0:32769->80/tcp,0.0.0.0:32768->443/tcpgigantic_meitner随机端口自动映射80参数说明docker-P随机端口映射docker-p指定端口映射-phostport:ContainerPort-PIP:Hostport:containerport实例[root@centos7?]#dockerrun-d-p81:80nginx3ca9f847bebec3684952b02b02c081d31f84b94b9489debennamerbeandebeandebandanderandyandyportsnyplentyportshterstsnotsin@daemonoff"8secondsagoUp6seconds443/tcp,0.0.0可以通过指定端口访问启动的容器服务Docker数据存储docker管理数据有两种方式:datavolumedatavolumecontainerdatavolumedatavolumeis一个或多个容器专门指定绕过联合文件系统的目录,为持久化或共享数据提供一些有用的特性:数据卷可以在容器之间共享和重用在容器中是持久化的,直到没有容器使用它们参数说明-v/data直接将数据目录挂载到容器/datadirectory-vsrc:dst挂载物理机目录到容器目录实例操作[root@centos7~]#dockerrun-it--nametest-001-v/datacentos[root@4578675314b9/]#ls-l/data/total0[root@centos7~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES4578675314b9centos"/bin/bash"2分钟前Up2分钟test-001[root@centos7~]#dockerinspect4578675314b9"Mounts":[{"Name":"ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115","Source":"/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data","Destination":"/data",##可以看出是将容器中的存储目录挂载到/data"Driver":"local","Mode":"","RW":true,"Propagation":""}],[root@centos7~]#cd/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data###这是物理机的目录[root@centos7_data]#lltotal0[root@centos7_data]#mkdirtest查看容器中的数据[root@4578675314b9/]#cd/data/###这是容器中的目录[root@4578675314b9data]#lltotal0drwxr-xr-x2rootroot6Apr1008:54test可见刚才在物理机上创建的test目录也存在于容器的data目录中。也可以使用如下方式挂载dockerrun-it-v/data1:/mntcentos前者为物理机目录(挂载成功自动在物理机上创建此目录)后者为容器目录[root@centos7~]#dockerrun-it-v/data1:/mntcentos[root@425569ce9eef/]#cd/mnt/[root@425569ce9eefmnt]#lltotal0[root@centos7~]#cd/data1/[root@centos7data1]#echo"hello">test.txt[root@centos7data1]#lltotal4-rw-r--r--1rootroot6Apr1017:09test.txt[root@centos7data1]#cattest.txthello查看容器目录下是否有文件和内容[root@425569ce9eefmnt]#lltotal4-rw-r--r--1rootroot6Apr1009:09test.txt[root@425569ce9eefmnt]#cattest.txthello[root@425569ce9eefmnt]#pwd/mnt[root@425569ce9eefmnt]#hostname425569ce9eef这种方式适合开发代码管理,代码目录直接挂载到容器中,修改WEB站点目录访问dockerrun-it-v/data2:/opt:rocentos#指定只读权限挂载dockerrun-it-v/data2:/opt:rwcentos#指定读写权限挂载docker运行-it-v/root/文件1:file1centos#挂载单个文件到容器目录的方式containervolume--volumes-from#使用其他容器的目录[root@centos7~]#dockerrun-d--namemydocker-v/datacentos4f243ada709ee87d8f1e50bf13ab225c8dfd6b38f7dad97fa84ab0cb3d7d517b[root@centos7~]#dockerrun-it--namemynfs--volumes-frommydockercentos[root@82a489adb07a/]#ll/data/total0现在进入mydocker测试容器/data目录写入数据root@centos7~]#cd/var/lib/docker/volumes/8421a48b58337a30ac4750c06748e01a3f328bdc2fa3b945d7f9737d9bc1b002/_data[root@centos7_data]#ls[root@centos7_data]#echo"欢迎来到这里">file_data[root@centos7#rll-wdata-r--r--1rootroot16Apr1017:34file查看刚才容器中是否有数据[root@82a489adb07a/]#hostname82a489adb07a[root@82a489adb07a/]#cd/data/[root@82a489adb07adata]#lltotal4-rw-r--r--1rootroot16Apr1009:34file[root@82a489adb07adata]#catfile欢迎来到这里
