0
点赞
收藏
分享

微信扫一扫

Docker的网络模式及数据管理

大南瓜鸭 2022-01-16 阅读 105

目录

Docker四种网络模式

        docker自定义网络

                查看网络模式列表

                查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)

                指定分配容器IP地址

                自定义网络固定IP

                端口映射

                在宿主机环境执行容器内命令

Docker的数据管理

        数据卷

        数据卷容器

总结


Docker四种网络模式

                HOST模式

        与宿主机供共享网络名称空间/网络协议栈、IP共享、端口范围共享host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

        如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

        使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是dockerhost上已经使用的端口就不能再用了。网终的隔离性不好

                container模式 

        创建的容器不会创建自己的网卡、设置IP等,而是和一个指定地容器共享IP、端口范围
这个模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IlP,而是和一个指定地容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离的。(两个容器的进程可以通过loo 网卡设备通信)

        None 

该模式关闭了容器的网络功能

        这种网络模式下容器只有lo回环网口,没有其他的网卡。none模式可以在容器创建时通过-network=none参数指定

        这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性

        Bridge:

        此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过dockero 网桥及iptables.的nat表配置与宿主机通信

        当Docker进程启动时,会在主机上创建一个名为dockero的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

        从dockerO子网中分配一个IP给容器使用,并设置docker0的地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker将veth pair 设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过 brctl show命令查看。

        bridge模式是docker的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables 做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

        docker自定义网络

                查看网络模式列表

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
ae257e2de599   bridge    bridge    local
7139a3eda38f   host      host      local
2df381358ab3   none      null      local

                查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)

                指定分配容器IP地址

[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
e7ac622660ffdd8c0da45e1c147abc5d5360546dc7438a952cf8d2bda6c8e81d
docker: Error response from daemon: user specified IP address is supported on user defined networks only.

                自定义网络固定IP

docker network create [--network bridge] --subnet=172.18.0.0/16 mynetwork
docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:latest /bin/bash

[root@localhost ~]# docker network create --subnet=172.18.0.0/16 mynetwork
73927b376e17d92af084b5d009434595bc85ccc10fd968a767a1cbd21fb7e114
[root@localhost ~]# docker run -itd --name test2 --net mynetwork --ip 172.18.0.100 centos:latest /bin/bash
14e3fe4f8984173f2f7ac8d8e7d2b651271cab092db4c95b87662a253a5a2e34

查看docker容器,此时不报错

 

                端口映射

在启动容器的时候,如果不指定对应的端口,在容器外将无法通过网络来访问容器内的服务。Docker提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器上,使得外部网络访问宿主机的端口便可以访问容器内的服务。

        实现端口映射,需运行docker run 命令使用-p(小写)选项指定要映射的端口

        使用-P(大写)选项实现随机映射,Docker会随机映射一个端口范围在49000-49900的端口到容器内不开放的网络端口。

docker run -itd -p 333:80 nginx /bin/bash (docker 0)

 docker run -itd -P nginx / bin/ bash

 

                在宿主机环境执行容器内命令

Docker的数据管理

        在Docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操作

        管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volunes Containers)。

        数据卷

        数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

                创建数据卷

        在docker run 命令使用-v 选项可以在容器内创建数据卷。多次使用 -v 选项可创建多个数据卷。使用--name 选项可以给容器创建一个友好的自定义名称。

宿主机目录/var/ www挂载容器中的/data1

[root@localhost /data]# docker run -itd -v /var/www:/data1/ --name web1 centos /bin/bash
7ef37e79816ae729b22b7e5aa5920a10643346efa2518955b42e1fbdedbafccc

进入web1容器

[root@localhost /data]# docker exec -it web1 /bin/bash
[root@7ef37e79816a /]# ls
bin  data1  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7ef37e79816a /]# cd /var/
[root@7ef37e79816a var]# ls
adm  cache  crash  db  empty  ftp  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp
[root@7ef37e79816a var]# cd /data1/
[root@7ef37e79816a data1]# ls
[root@7ef37e79816a data1]# touch test111
[root@7ef37e79816a data1]# touch index.html
[root@7ef37e79816a data1]# ls
index.html  test111
[root@7ef37e79816a data1]# exit
exit

 回到宿主机查看,可以看到创建的文件在宿主机上存在。

[root@localhost /data]# cd /var/
[root@localhost /var]# ls
account  adm  cache  crash  db  empty  games  gopher  kerberos  lib  local  lock  log  mail  nis  opt  preserve  run  spool  target  tmp  www  yp
[root@localhost /var]# cd www/
[root@localhost /var/www]# ls
index.html  test111


        数据卷容器

        如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。它其实就是一个简单的容器,专门提供数据卷给其他容器挂载使用。使用方法就是,首先要创建一个容器作为数据卷容器,之后在其他容器创建时用--volume-from 挂载数据卷容器中的数据卷使用。

首先创建两个数据卷

[root@localhost /var/www]# docker run --name web100 -v /data3 -v /data4 -itd centos /bin/bash
ebe7ac343ee9b6f0af47f25922d317ee22cf968254163a06edb697b2339d6339

数据卷容器

[root@localhost /var/www]# docker run -itd --volumes-from web100 --name db1 centos /bin/bash
a27c0c385031e37147f4a5db913042ce1ebe56db8ef246985365e869734015ba

 在db1容器中创建文件,在web100容器中查看

[root@localhost /var/www]# docker exec -it db1 /bin/bash
[root@a27c0c385031 /]# cd /data1
bash: cd: /data1: No such file or directory
[root@a27c0c385031 /]# cd /data3/
[root@a27c0c385031 data3]# ls
[root@a27c0c385031 data3]# touch file
[root@a27c0c385031 data3]# ls
file
[root@a27c0c385031 data3]# exit
exit
[root@localhost /var/www]# docker exec -it web100 /bin/bash
[root@ebe7ac343ee9 /]# ls
bin  data3  data4  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@ebe7ac343ee9 /]# cd data3/
[root@ebe7ac343ee9 data3]# ls
file


原理:让两个容器实现数据共享

总结

1、Docker的四种网络模式,以及它是怎么工作的

2、容器中管理数据有数据卷和数据卷容器两种方式。

3、Docker可以使用映射容器端口到宿主机来实现网络访问

举报

相关推荐

0 条评论