🌍 外部访问容器
Docker 容器的美妙之处在于它们的隔离性,但有时我们需要从外部访问容器内的服务。这时,Docker 的端口映射功能就派上了用场。以下是如何配置和使用这个功能的详细步骤。
1️⃣ 自动映射端口:
使用 -P
标记,Docker 会自动为容器选择一个端口映射到容器内部的开放端口:
$ docker run -d -P nginx:alpine
$ docker container ls -l
这样,你可以看到容器的 80 端口被映射到了主机的某个随机端口(如 32768)。
2️⃣ 查看访问记录:
可以使用 docker logs
来查看容器的访问日志:
$ docker logs <CONTAINER_ID>
3️⃣ 手动映射端口:
使用 -p
标记,你可以手动选择要映射的端口:
- 映射所有接口地址:
$ docker run -d -p 80:80 nginx:alpine
- 映射到指定地址的指定端口:
$ docker run -d -p 127.0.0.1:80:80 nginx:alpine
- 映射到指定地址的任意端口:
$ docker run -d -p 127.0.0.1::80 nginx:alpine
- 映射 UDP 端口:
$ docker run -d -p 127.0.0.1:80:80/udp nginx:alpine
4️⃣ 查看映射的端口配置:
要查看容器的端口映射配置,可以使用 docker port
命令:
$ docker port <CONTAINER_ID> 80
🔔 注意事项:
-
容器有自己的内部网络和 IP 地址。可以使用
docker inspect
查看。 -
-p
标记可以多次使用来绑定多个端口。例如:
$ docker run -d \
-p 80:80 \
-p 443:443 \
nginx:alpine
🔗 容器互联
在 Docker 的世界中,容器之间的互联是非常重要的。它们可以轻松地共享数据、网络和其他资源。以下是容器互联的一些基本方法和指南。
1️⃣ 新建网络:
为了使容器能够互相通信,首先需要创建一个 Docker 网络。
$ docker network create -d bridge my-net
这里使用的是 bridge
网络类型,这是最常用的网络类型。
2️⃣ 连接容器:
首先运行一个容器并加入到新建的 my-net
网络。
$ docker run -it --rm --name busybox1 --network my-net busybox sh
再次运行另一个容器,也加入到这个网络中。
$ docker run -it --rm --name busybox2 --network my-net busybox sh
3️⃣ 验证容器互联:
在 busybox1
容器中,你可以使用 ping
命令来测试与 busybox2
容器的连接。
/ # ping busybox2
类似地,你也可以在 busybox2
容器中 ping
busybox1
容器,以验证它们之间的连接。
4️⃣ Docker Compose:
如果你有很多容器需要互相连接,最佳的选择是使用 Docker Compose
。它是一个工具,可以用来定义和运行多容器的 Docker 应用程序。通过简单的 YAML 文件,你可以配置你的应用的服务、网络和卷。
🌟 小贴士:
-
使用
Docker Compose
可以极大地简化容器间的互联过程。 -
使用
--link
参数现在已经被视为已弃用的方法,最好使用网络来连接容器。 -
通过正确配置 Docker 网络,你可以确保容器之间的通信既安全又高效。
总之,Docker 提供了多种方式来实现容器间的互联,从简单的 --link
参数到复杂的网络配置,确保你选择最适合你需求的方法。
🌐 配置 DNS
在 Docker 中, DNS 配置对于容器的网络通信至关重要。以下是如何自定义容器的 DNS 配置的步骤和详细解释。
1️⃣ 容器的挂载信息:
Docker 利用虚拟文件系统挂载容器的 DNS 配置。你可以在容器内部使用 mount
命令查看这些挂载信息。
$ mount
2️⃣ 全局 DNS 配置:
如果你想为所有容器设置统一的 DNS,可以在 Docker 的配置文件 /etc/docker/daemon.json
中设置。
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
之后,每次启动的容器会自动使用这些 DNS。
3️⃣ 验证 DNS 设置:
要验证容器是否使用了正确的 DNS 配置,可以运行以下命令:
$ docker run -it --rm ubuntu:18.04 cat /etc/resolv.conf
4️⃣ 手动指定容器的 DNS 配置:
使用 docker run
启动容器时,你可以指定一些参数来自定义容器的 DNS 设置:
-
-h HOSTNAME
或--hostname=HOSTNAME
: 设置容器的主机名。 -
--dns=IP_ADDRESS
: 添加 DNS 服务器地址。 -
--dns-search=DOMAIN
: 设置容器的搜索域。
🌟 小贴士:
-
如果在启动容器时没有特别指定 DNS 参数,Docker 会默认使用主机的
/etc/resolv.conf
配置。 -
要记住,手动指定的 DNS 设置会覆盖 Docker 的默认设置或
/etc/docker/daemon.json
中的设置。
总的来说,Docker 提供了灵活的方式来配置容器的 DNS,无论是全局设置还是为特定容器设置,都可以轻松实现。