Docker 容器连接学习笔记

1. Docker 容器的网络

Docker 容器与宿主机之间的网络是独立的,需要使用 Docker 的网络进行连接。Docker 默认提供了三种网络模式:

  • 桥接网络(bridge)
  • 主机网络(host)
  • 网络地址转换(NAT)网络

桥接网络是最常用的一种网络模式,它会在宿主机上创建一个虚拟网桥,然后将容器连接到这个虚拟网桥上,使得容器可以相互通信。

主机网络是将容器直接连接到宿主机的网络接口上,它可以提高容器的网络性能,但会导致容器与宿主机之间的网络隔离失效。

NAT 网络是将容器连接到一个 NAT 路由器上,从而与外部网络通信。这种网络模式适合在容器中运行不需要直接访问宿主机或其他容器的应用程序。

2. Docker 容器间的连接

Docker 容器可以通过网络连接,使用容器之间的 IP 地址进行通信。在同一主机上的容器可以直接通过 IP 地址相互连接,而在不同主机上的容器需要使用 Docker Swarm、Kubernetes 或类似的容器编排工具来进行连接。

可以使用 docker run 命令的 --link 选项来连接两个容器。例如,要将一个名为 db 的 MySQL 容器与一个名为 web 的 Nginx 容器连接起来,可以使用以下命令:

Copy Code
$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest $ docker run --name web --link db:mysql -p 80:80 -d nginx:latest

这里的 --link 选项会将 db 容器的 IP 地址注入到 web 容器中的 /etc/hosts 文件中,从而使 web 容器能够通过 mysql 主机名连接到 db 容器。

3. 实例:使用 Docker Compose 连接多个容器

Docker Compose 是一个方便管理多个容器的工具,它可以使用 YAML 文件定义多个容器之间的关系,并一次性启动它们。以下是一个使用 Docker Compose 连接多个容器的示例:

yamlCopy Code
version: '3' services: db: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: my-secret-pw networks: - back-tier web: image: nginx:latest restart: always ports: - "80:80" networks: - front-tier - back-tier networks: front-tier: back-tier:

这个 YAML 文件定义了两个服务:dbwebdb 服务使用了 MySQL 镜像,并定义了一个初始化密码。web 服务使用了 Nginx 镜像,并映射了容器的 80 端口到宿主机的 80 端口上。这个文件还定义了两个网络:front-tierback-tier,分别用于连接前端和后端服务。

通过运行以下命令启动这些服务:

Copy Code
$ docker-compose up -d

就可以创建并运行这些容器了。