一、前言
Docker 允许通过外部访问容器或容器互联的方式来提供网络服务
二、外部访问容器
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P
或 -p
参数来指定端口映射
1、使用 -P
标记时,Docker 会随机映射一个端口到内部容器开放的网络端口
docker run -d -P nginx:latest
使用 docker ps
可以看到,本地主机的 49154
被映射到了容器的 80 端口。此时访问本机的 49154
端口即可访问容器内 NGINX 默认页面
2、使用 -p
映射所有接口地址
使用 hostPort:containerPort 格式本地的 80 端口映射到容器的 80 端口,可以执行
docker run -d -p 80:80 nginx:latest
3、映射到指定地址的指定端口
使用 ip::containerPort 绑定 localhost 的任意端口到容器的 80 端口,本地主机会自动分配一个端口。
docker run -d -p 127.0.0.1:8000:80 nginx:latest
4、使用 udp 标记来指定 udp 端口
docker run -d -p 0.0.0.1:8000:80/udp nginx:latest
5、-p 标记可以多次使用来绑定多个端口
docker run -d -p 8001:80 -p 8002:80 nginx:latest
6、docker logs
命令来查看访问记录
docker logs c25(容器id缩写)
7、查看映射端口配置
docker port c25(容器id缩写) 80
三、容器互联
1、新建网络
1、下面先创建一个新的 Docker 网络

docker network create -d bridge my-net
-d
参数指定 Docker 网络类型,有 bridge、overlay
2、运行一个容器并连接到新建的 my-net 网络
docker run -it --rm --name busybox1 --network my-net busybox sh
3、打开新的终端,再运行一个容器并加入到 my-net 网络
docker run -it --rm --name busybox2 --network my-net busybox sh
这样,busybox1 容器和 busybox2 容器建立了互联关系,我们知道这是通过 连接同一个网络进行互通。
四、配置 DNS
如何自定义配置容器的主机名和 DNS 呢?秘诀就是 Docker 利用虚拟文件来挂载容器的 3 个相关配置文件
1、在容器中使用 mount 命令可以看到挂载信息
这种机制可以让宿主主机 DNS 信息发生更新后,所有 Docker 容器的 DNS 配置通过 /etc/resolv.conf 文件立刻得到更新。
2、配置全部容器的 DNS ,也可以在 /etc/docker/daemon.json
文件中增加以下内容来设置
{
"registry-mirror": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
配置过后,一定要重启 docker systemctl restart docker
docker run -it ubuntu:18.04 cat /etc/resolv.conf
3、--hostname=HOSTNAME
设定容器的主机名
docker run -it --hostname=udocker ubuntu:18.04
它会被写到容器内的 /etc/hostname 和 /etc/hosts
4、-dns=IP_ADDRESS 添加 DNS 服务器到容器的 /etc/resolv.conf 中
1、我们看到如果我们单独配置,就会替代系统/etc/docker/daemon.json
配置的信息。
2、如果在容器启动时没有指定最后两个参数,Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
五、总结
一些简单的网络使用和配置