docker network namespace

network基础

docker network是我们在使用docker容器时最早关心的问题,我们部署了一个docker的应用,外部如何访问是需要解决的第一个问题.

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
555fce32080c        bridge              bridge              local
aba9d2ba3e2a        host                host                local
330ab4af02e8        none                null                local

docker容器提供了三种网络连接方式,bridge, host,以及none,默认情况下docker中的网卡设置是bridge方式,可以通过docker inspect (Container Name)命令查看,默认情况下,执行命令后,可以发现在控制台上输出的JSON结构中有这样的节点:

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "555fce32080cae35886bdf246945156f298e7f0698a7ae221e384840d21795f7",
                    "EndpointID": "9fb4b9c25bea30064161d90c796d31e64902eb169cb58fc3d3156f095e661548",
                    "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
                }
            }

也可以执行docker network inspect bridge/host察看bridge或者host的网络状态。

在执行docker run命令或者docker create的时候,可以增加参数来修改docker中的网络地址,hosts文件以及resolv.conf文件的配置。

  • “–hostname HOSTNAME” 选项为容器指定主机名,例如:
docker run --name b1 -it --rm -h leveldc.com busybox:latest
  • “–dns DNS_SERVER_IP” 选项为容器指定所使用的dns服务器地址,例如:
docker run --name b1 -it --rm -h leveldc.com --dns 223.5.5.5 busybox:latest
  • “–add-host HOSTNAME:IP” 选项为容器指定本地主机名解析项,例如:
docker run --name b1 -it --rm -h leveldc.com --dns 223.5.5.5 --add-host "leveldc.com:172.17.00.101" busybox:latest
如何对外提供network服务

下来是这次试验的重点,如何把一个docker服务提供给外部网络访问?

bridge方式

-p port 动态端口影射

docker run --name b02 -it --network bridge -p 80 --rm levi/busybox_httpd:v0.2

这个参数会随即分配一个宿主机的端口,影射到docker服务的ip地址上。
执行 docker port b02 就可以显示出来影射到的随机端口:

docker port b02
80/tcp -> 0.0.0.0:32768

我的宿主机ip 地址为192.168.137.100,通过主机访问服务如下:
在这里插入图片描述
-p 宿主机ip:宿主机端口:docker服务端口 动态端口影射**
如果宿主机端口不指定,则随机影射,例如:

docker run --name b02 --rm -p 192.168.137.100:80:80 levi/busybox_httpd:v0.2

另外还有一个"-P"命令,开放所有端口,这个需要配合dockerfile来进行配置,后面再整理这部分内容。

host 方式

host方式可以直接把容器的端口影射到主机上来,并且使用相同的端口号,使用起来更简单.

docker run --name nginx --network host --rm nginx:1.14-alpine

在这里插入图片描述

如果不能访问,注意,host方式和bridge方式有一点区别,
host方式一定要关闭防火墙,或者允许端口访问
1.关闭防火墙
systemctl stop firewalld.service
2.运行以下命令添加80端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent

最后重启防火墙服务即可:
systemctl restart firewalld.service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值