栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker网络通讯

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker网络通讯

目录

一、Docker 网络模式

1.Host 模式

2.container 模式

3.None 模式

4.Brigde(默认模式) 

二、Docker 自定义网络

1.查看网络列表

2.查看容器信息

3.指定分配容器ip地址

4.自定义网络固定IP

5.暴露端口

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

三、Docker数据卷

1.数据卷

2.数据卷容器

3.容器互通(使用centos镜像)


一、Docker 网络模式

1.Host 模式

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

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

2.container 模式

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

3.None 模式

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

这种网络模式下容器只有lo回环网口,没有其他的网卡。none模式可以在容器创建时通过-network=none参数指定。这种类型的网络无法联网,但是封闭的网络能很娇的保证容器的安全性。

4.Brigde(默认模式) 

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

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

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

二、Docker 自定义网络

1.查看网络列表
root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
81ef2280b7dd   bridge    bridge    local
b969720ab71e   host      host      local
fa51239253eb   none      null      local

2.查看容器信息

包含配置、环境、网关、挂载、cmd等等信息

docker inspect 容器ID

3.指定分配容器ip地址
[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.10  centos:latest /bin/bash      --network:指定网络类型  --ip:指定ip地址
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
docker: Error response from daemon: Conflict. The container name "/test1" is already in use by container "7a0d7e7f151b75509412963992818e6e29e8340c357297bd09d811fdbb93acde". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

#发现这种方式会报错:只能遵守默认的分配地址方式:无法指定

4.自定义网络固定IP
[root@localhost ~]# docker network create --subnet=172.18.0.0/16 zch
b9284467411f535b08df372068f844549abd3d22b147f64fd382f973e68acdbf
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
81ef2280b7dd   bridge    bridge    local
b969720ab71e   host      host      local
fa51239253eb   none      null      local
b9284467411f   zch       bridge    local       #没有指定网络模式,默认bridge模式

5.暴露端口

-p:指定端口

-P:随机端口

[root@localhost ~]# docker pull nginx
[root@localhost ~]# docker run -itd nginx:latest /bin/bash
683d2fcc223666bebf49991432343b5c0de178783753af05cba3ba5e3d4c7ada
[root@localhost ~]# docker ps -a
ConTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS     NAMES
683d2fcc2236   nginx:latest   "/docker-entrypoint.…"   4 seconds ago       Up 2 seconds       80/tcp    frosty_goldwasser
[root@localhost ~]# docker run -itd -p 8081:80 nginx:latest /bin/bash   #把80端口映射到自定义的端口上
95bb133a5bd98b2f57fe4ce3ce8f6f74dd87265e323611c7e1fb2e8af98638ff
[root@localhost ~]# docker ps -a
ConTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                                   NAMES
95bb133a5bd9   nginx:latest   "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds       0.0.0.0:8081->80/tcp, :::8081->80/tcp   elastic_lovelace

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

docker exec -it 容器ID /bin/bash -c 'nginx'

docker exec 容器ID/容器 name 执行的命令

[root@localhost ~]# docker exec 95bb133a5bd9 nginx      #根据容器ID启动Nginx
2021/11/26 10:54:55 [notice] 7#7: using the "epoll" event method
2021/11/26 10:54:55 [notice] 7#7: nginx/1.21.4
2021/11/26 10:54:55 [notice] 7#7: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2021/11/26 10:54:55 [notice] 7#7: OS: Linux 3.10.0-957.el7.x86_64
2021/11/26 10:54:55 [notice] 7#7: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/11/26 10:54:55 [notice] 13#13: start worker processes
2021/11/26 10:54:55 [notice] 13#13: start worker process 14
2021/11/26 10:54:55 [notice] 13#13: start worker process 15
2021/11/26 10:54:55 [notice] 13#13: start worker process 16
2021/11/26 10:54:55 [notice] 13#13: start worker process 17
2021/11/26 10:54:55 [notice] 13#13: start worker process 18
2021/11/26 10:54:55 [notice] 13#13: start worker process 19
2021/11/26 10:54:55 [notice] 13#13: start worker process 20
2021/11/26 10:54:55 [notice] 13#13: start worker process 21

三、Docker数据卷

1.数据卷
#宿主机目录/var/www 挂载容器中的/test
[root@localhost ~]# docker run -it -v /var/www/html:/test --name web centos:7 /bin/bash
[root@1ef8aa5a988b /]# ls
anaconda-post.log  test                #会有一个test的目录
[root@localhost /]# cd /var/
[root@localhost var]# ls
www                                    #有一个www的目录
[root@localhost www]# ls
html

2.数据卷容器
#检查有没有挂载
#进入容器创建文件,查看容器和终端是否数据共享
[root@1ef8aa5a988b /]# cd test/
[root@1ef8aa5a988b test]# touch 1.txt
[root@1ef8aa5a988b test]# vi 1.txt 
this is a test

#在同一台机子操作,退出容器在宿主机查看
[root@localhost www]# cd html/
[root@localhost html]# cat 1.txt 
this is a test

3.容器互通(使用centos镜像)
[root@localhost ~]# docker run -itd -P --name web1 centos:7 /bin/bash   #创建容器web1并直接运行
aa7c4834d0a2347ce6f9654cc24ddd3bc29b470d6f087f0f6e589ca2dabf48c1
[root@localhost ~]# docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash   #创建web2容器并指定与web1容器相连
885e922c3206dd876e2d4accc8841defef695355f4b9135037becfcd0ddf089e
[root@localhost ~]# docker ps -a     #查看刚才创建的容器信息
ConTAINER ID   IMAGE      COMMAND       CREATED              STATUS              PORTS     NAMES
885e922c3206   centos:7   "/bin/bash"   12 seconds ago       Up 11 seconds                 web2
aa7c4834d0a2   centos:7   "/bin/bash"   about a minute ago   Up about a minute             web1

docker inspect 容器ID #使用工具命令:—查看两个容器的IP号
[root@localhost ~]# docker inspect aa7c4834d0a2
...
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
[root@localhost ~]# docker inspect 885e922c3206
...
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null

#进入web1容器进行验证,ping通web2的IP地址
[root@localhost ~]# docker exec -it web1 /bin/bash     #在宿主机环境执进入web1的容器
[root@aa7c4834d0a2 /]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.048 ms

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号