Docker容器学习 --- 网络管理+容器端口映射+容器间的互连

Docker容器的安装参考:https://blog.csdn.net/aaaaaab_/article/details/81835171
Docker容器的使用参考:https://blog.csdn.net/aaaaaab_/article/details/81835171
docker容器的网络管理

Docker 在启动时会创建一个虚拟网桥 docker0, 容器启动后都会被桥接到 docker0 上,并自动分配到一个 IP 地址。

容器的四种网络模式:

bridge 桥接模式、host 模式、container 模式和 none 模式
启动容器时可以使用 --net 参数指定,默认是桥接模式。

网络的基本管理:

[root@foundation38 backup]# docker network ls   查看docker网络的模式
NETWORK ID          NAME                DRIVER              SCOPE
21ca12d3508c        bridge              bridge              local
f4ff71176a19        host                host                local
b12b1dd0542e        none                null                local
[root@foundation38 backup]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation38 backup]# docker start vm1  开启vm1容器
vm1
[root@foundation38 backup]# docker inspect vm1 | grep Pid  可以看到vm1容器的PID
            "Pid": 16137,
            "PidMode": "",
            "PidsLimit": 0,
[root@foundation38 backup]# pwd
/tmp/backup
[root@foundation38 backup]# ls
etc.tar
[root@foundation38 backup]# cd
[root@foundation38 ~]# cd /proc/

这里写图片描述

[root@foundation38 proc]# cd 16137
[root@foundation38 16137]# ls
attr             cpuset   limits      net            projid_map  stat
autogroup        cwd      loginuid    ns             root        statm
auxv             environ  map_files   numa_maps      sched       status
cgroup           exe      maps        oom_adj        schedstat   syscall
clear_refs       fd       mem         oom_score      sessionid   task
cmdline          fdinfo   mountinfo   oom_score_adj  setgroups   timers
comm             gid_map  mounts      pagemap        smaps       uid_map
coredump_filter  io       mountstats  personality    stack       wchan
[root@foundation38 16137]# cd ns/
[root@foundation38 ns]# ls
ipc  mnt  net  pid  user  uts
[root@foundation38 ns]# ll
total 0
lrwxrwxrwx 1 root root 0 Aug 19 15:26 ipc -> ipc:[4026532402]
lrwxrwxrwx 1 root root 0 Aug 19 15:26 mnt -> mnt:[4026532400]
lrwxrwxrwx 1 root root 0 Aug 19 15:23 net -> net:[4026532405]
lrwxrwxrwx 1 root root 0 Aug 19 15:26 pid -> pid:[4026532403]
lrwxrwxrwx 1 root root 0 Aug 19 15:26 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Aug 19 15:26 uts -> uts:[4026532401]

这里写图片描述

[root@foundation38 ns]# ip addr   可以查看到docker0的IP
9: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:30:3c:02:cb brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:30ff:fe3c:2cb/64 scope link 
       valid_lft forever preferred_lft forever

这里写图片描述
Bridge 桥接模式:

Bridge 桥接模式的实现步骤主要如下:
(1) Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为
veth0 和 veth1。而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将
报文传输给另一方。
(2) Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0;
(3) Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。
如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到
Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网
络环境的隔离性。
bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明显的是,
该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致
的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间处理实现了
这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器
内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层
网络上的实现手段,故肯定会影响网络的传输效率。

这里写图片描述

[root@foundation38 docker]# docker ps   查看docker的进程
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5d00f0fc2ef9        rhel7               "bash"              20 minutes ago      Up 5 minutes                            vm1
[root@foundation38 docker]# brctl show  查看桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth85b1571
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic
[root@foundation38 docker]# docker stop vm1   停止vm1容器
vm1
[root@foundation38 docker]# brctl show  桥接会相应的消失
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic

这里写图片描述

[root@foundation38 docker]# docker start vm2   开启vm2容器
vm2
[root@foundation38 docker]# docker start vm1   开启vm1容器
vm1
[root@foundation38 docker]# brctl show   查看桥接可以看到docker0有两个桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic
[root@foundation38 docker]# docker run -it --name vm3 ubuntu  创建并运行vm3容器
root@e214c2d1736f:/# 
root@e214c2d1736f:/# [root@foundation38 docker]# 
[root@foundation38 docker]# brctl show    查看桥接可以看到docker0有三个桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth0aaed7b
                            veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic

这里写图片描述

[root@foundation38 docker]# docker rm -f vm3   直接删除容器
[root@foundation38 docker]# brctl show   查看桥接可以看到docker0有两个桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic

Host 网络模式:

host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用
宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公
有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。当然,
有这样的方便,肯定会损失部分其他的特性,最明显的是 Docker Container 网络环境隔离性
的弱化,即容器不再拥有隔离、独立的网络栈。另外,使用 host 模式的 Docker Container 虽
然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱
化,该容器会与宿主机共享竞争网络栈的使用;另外,容器内部将不再拥有所有的端口资
源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网
络模式容器的端口映射。

这里写图片描述

[root@foundation38 docker]# docker run -it --name vm3 --net host ubuntu   --net指定网络模式为host主机模式
root@foundation38:/# ip addr
9: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:30:3c:02:cb brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:30ff:fe3c:2cb/64 scope link 
       valid_lft forever preferred_lft forever
49: veth22f9ef3@if48: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 3e:e8:c0:4f:74:97 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::3ce8:c0ff:fe4f:7497/64 scope link 
       valid_lft forever preferred_lft forever
51: veth9ea121c@if50: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 7a:d3:b5:73:4b:41 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::78d3:b5ff:fe73:4b41/64 scope link 
       valid_lft forever preferred_lft forever

这里写图片描述
Container 网络模式:

(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;
(2) 将新创建的 Docker Container(也是需要共享其他网络的容器)的 namespace,使用
other containernamespace。
Docker Container 的 other container 网络模式,可以用来更好的服务于容器间的通信。
在这种模式下的 Docker Container 可以通过 localhost 来访问 namespace 下的其他容器,传输
效率较高。虽然多个容器共享网络环境,但是多个容器形成的整体依然与宿主机以及其他
容器形成网络隔离。另外,这种模式还节约了一定数量的网络资源。但是需要注意的是,
它并没有改善容器与宿主机以外世界通信的情况。

这里写图片描述

[root@foundation38 docker]# brctl show  查看桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic
[root@foundation38 docker]# docker run -it --name vm4 --net container:vm2 ubuntu   指定以容器模式运行
root@cf1c28db08b3:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
48: eth0@if49: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever

这里写图片描述
None 网络模式:

网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了
none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
可以说 none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“少即是多”
在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。
这也恰巧体现了 Docker 设计理念的开放。在 none 网络模式下分配固定 ip:
netns 是在 linux 中提供网络虚拟化的一个项目,使用 netns 网络空间虚拟化可以在本地虚拟
化出多个网络环境,目前 netns 在 lxc 容器中被用来为容器提供网络。
使用 netns 创建的网络空间独立于当前系统的网络空间,其中的网络设备以及 iptables 规则
等都是独立的,就好像进入了另外一个网络一样。

None 网络模式的配置:

[root@foundation38 docker]# brctl show   查看桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic
[root@foundation38 docker]# docker run -it --name vm5 --net none ubuntu  指定none网络模式创建并运行容器
root@b9614c521c45:/# ip addr  查看IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
root@b9614c521c45:/# id
uid=0(root) gid=0(root) groups=0(root)

这里写图片描述
使用ctrl+p+q退出:

[root@foundation38 docker]# docker inspect vm5 | grep Pid  过滤vm5容器的PID
            "Pid": 17521,
            "PidMode": "",
            "PidsLimit": 0,
[root@foundation38 docker]# cd /proc/17521/
[root@foundation38 17521]# ls
attr             cpuset   limits      net            projid_map  stat
autogroup        cwd      loginuid    ns             root        statm
auxv             environ  map_files   numa_maps      sched       status
cgroup           exe      maps        oom_adj        schedstat   syscall
clear_refs       fd       mem         oom_score      sessionid   task
cmdline          fdinfo   mountinfo   oom_score_adj  setgroups   timers
comm             gid_map  mounts      pagemap        smaps       uid_map
coredump_filter  io       mountstats  personality    stack       wchan
[root@foundation38 17521]# pwd
/proc/17521
[root@foundation38 17521]# cd ns/
[root@foundation38 ns]# ls
ipc  mnt  net  pid  user  uts
[root@foundation38 ns]# ll
total 0
lrwxrwxrwx 1 root root 0 Aug 19 15:52 ipc -> ipc:[4026532631]
lrwxrwxrwx 1 root root 0 Aug 19 15:52 mnt -> mnt:[4026532629]
lrwxrwxrwx 1 root root 0 Aug 19 15:51 net -> net:[4026532634]
lrwxrwxrwx 1 root root 0 Aug 19 15:52 pid -> pid:[4026532632]
lrwxrwxrwx 1 root root 0 Aug 19 15:52 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Aug 19 15:52 uts -> uts:[4026532630]

这里写图片描述

netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,
目前netns在lxc容器中被用来为容器提供网络。
使用netns创建的网络空间独立于当前系统的网络空间,其中的网络设备以及iptables规则等都是独立的,
就好像进入了另外一个网络一样。
[root@foundation38 ns]# ip netns add test   创建虚拟网络空间test
[root@foundation38 ns]# ip netns list   列出虚拟网络空间
test
[root@foundation38 ns]# cd /var/run/
[root@foundation38 run]# ls
abrt                 gdm            named            setroubleshoot
alsactl.pid          gssproxy.pid   netns            sm-client.pid
atd.pid              gssproxy.sock  netreport        sm-notify.pid
auditd.pid           httpd          NetworkManager   spice-vdagentd
avahi-daemon         initramfs      opendnssec       sshd.pid
certmonger           krb5kdc        openlmi-storage  sysconfig
console              ksmtune.pid    plymouth         syslogd.pid
crond.pid            libvirt        ppp              systemd
cron.reboot          libvirtd.pid   radvd            tmpfiles.d
cups                 lock           rhnsd.pid        tog-pegasus
dbus                 log            rhsm             tuned
dhclient-wlp3s0.pid  lsm            rpcbind          udev
dmeventd-client      lvm            rpcbind.sock     udisks2
dmeventd-server      lvmetad.pid    runc             user
docker               mariadb        samba            utmp
docker.pid           mdadm          sendmail.pid     xtables.lock
docker.sock          media          sepermit
faillock             mount          setrans

这里写图片描述

[root@foundation38 run]# cd netns/
[root@foundation38 netns]# ls
test
[root@foundation38 netns]# ip netns del test
[root@foundation38 netns]# ls
[root@foundation38 netns]# pwd
/var/run/netns
[root@foundation38 netns]# ln -s /proc/17521/ns/net /var/run/netns/17521  制作软链接
[root@foundation38 netns]# ip netns list   可以直接列出容器的PID
17521

这里写图片描述

[root@foundation38 netns]# docker ps   查看docker进程
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
528723a9616b        ubuntu              "/bin/bash"         29 minutes ago      Up 29 minutes                           vm5
d24c5188d69a        ubuntu              "/bin/bash"         40 minutes ago      Up 40 minutes                           vm4
ef2191e51d61        ubuntu              "/bin/bash"         44 minutes ago      Up 44 minutes                           vm3
cf1c28db08b3        rhel7               "bash"              About an hour ago   Up 51 minutes                           vm2
5d00f0fc2ef9        rhel7               "bash"              About an hour ago   Up 51 minutes                           vm1
[root@foundation38 netns]# ip link add name veth0 type veth peer name veth1  
这里我们添加了一对veth设备,veth设备是成对出现的,两个设备之间的数据是相互贯通的,我们把veth1加入到test网络空间中:
[root@foundation38 netns]# ip addr  可以查看到成对的设备
54: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 82:8c:9f:a3:c4:92 brd ff:ff:ff:ff:ff:ff
55: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether ba:39:af:93:00:d2 brd ff:ff:ff:ff:ff:ff

这里写图片描述

[root@foundation38 netns]# brctl show  查看桥接
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic
[root@foundation38 netns]# brctl addif docker0 veth0  添加桥接
[root@foundation38 netns]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.0021cc67fe88   no      enp0s25
docker0     8000.0242303c02cb   no      veth0
                            veth22f9ef3
                            veth9ea121c
virbr0      8000.525400b006fe   yes     virbr0-nic
virbr1      8000.525400000eb9   yes     virbr1-nic

这里写图片描述

[root@foundation38 netns]# ip addr   查看设备是DOWN状态
54: veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 82:8c:9f:a3:c4:92 brd ff:ff:ff:ff:ff:ff
55: veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop master docker0 state DOWN qlen 1000
    link/ether ba:39:af:93:00:d2 brd ff:ff:ff:ff:ff:ff

这里写图片描述

[root@foundation38 netns]# ip link set up veth0  激活设备veth0
[root@foundation38 netns]# ip link set up veth1  激活设备veth1
[root@foundation38 netns]# ip addr  再次查看已经被激活
54: veth1@veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 82:8c:9f:a3:c4:92 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::808c:9fff:fea3:c492/64 scope link tentative 
       valid_lft forever preferred_lft forever
55: veth0@veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP qlen 1000
    link/ether ba:39:af:93:00:d2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b839:afff:fe93:d2/64 scope link 
       valid_lft forever preferred_lft forever

这里写图片描述

[root@foundation38 netns]# ip link set veth1 netns 17521 添加到容器里面,在本地网络中已经无法查看到
[root@foundation38 netns]# ip netns exec 17521 ip link set veth1 name 设置容器新的网卡 eth0
[root@foundation38 netns]# ip netns exec 17521 ip link set up dev eth0  开启eth0

这里写图片描述

[root@foundation38 tmp]# docker container  attach  vm5  必须进去容器才可以看到
root@528723a9616b:/# ip addr   可以查看到eth0
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
54: eth0@if55: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 82:8c:9f:a3:c4:92 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::808c:9fff:fea3:c492/64 scope link 
       valid_lft forever preferred_lft forever

这里写图片描述

[root@foundation38 netns]# ip netns exec 17521 ip addr add 172.17.0.100/24 dev eth0  添加一个虚拟IP
[root@foundation38 netns]# ip netns exec 17521 ip route add default via 172.17.0.1   添加一个网关可以连接网络

这里写图片描述
端口映射:

[root@foundation38 netns]# docker ps -aq
528723a9616b
d24c5188d69a
ef2191e51d61
cf1c28db08b3
5d00f0fc2ef9
6803a4d26b5b
[root@foundation38 netns]# docker rm -f `docker ps -aq`  删除所有的容器
528723a9616b
d24c5188d69a
ef2191e51d61
cf1c28db08b3
5d00f0fc2ef9
6803a4d26b5b
[root@foundation38 netns]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation38 netns]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation38 netns]# docker run -d --name vm1 -p 8080:80 nginx  添加端口映射
c39eafa7a2af4d6dd902def28758620f939d114d2c81dc3b08a8edf484562837

这里写图片描述
Docker 的端口映射是由 iptables 来实现的:

[root@foundation38 netns]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
RETURN     all  --  192.168.122.0/24     224.0.0.0/24        
RETURN     all  --  192.168.122.0/24     255.255.255.255     
MASQUERADE  tcp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  udp  --  192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
MASQUERADE  all  --  192.168.122.0/24    !192.168.122.0/24    
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80

这里写图片描述
在网页测试用向外部开放的端口8080测试可以看到nginx测试页:
这里写图片描述
容器间互联:

--link 参数可以在不映射端口的前提下为两个容器间建立安全连接, --link 参数可以连接一个
或多个容器到将要创建的容器。
--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连
接的别名。
[root@foundation38 netns]# docker run -it --name vm2 --link vm1:nginx ubuntu  做一个容器间的互联
root@5be819f68b2e:/# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  nginx c39eafa7a2af vm1
172.17.0.3  5be819f68b2e
root@5be819f68b2e:/# ping nginx  可以直接ping通nginx
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.102 ms
^C
--- nginx ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.087/0.094/0.102/0.012 ms

这里写图片描述

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/81838273
今日推荐