一、概述
Docker 容器在我们的系统中作为独立进程运行。然而,我们通常希望他们相互交流和传递信息。
在本教程中,我们将通过一些使用Docker Compose 的实际示例来了解Dockerlinks
和depends_on
之间的区别。
2. Docker Composedepends_on
depends_on
是一个Docker Compose 关键字,用于设置服务必须启动和停止的顺序。
例如,假设我们希望我们将构建为web-app
映像的Web 应用程序在Postgres 容器之后启动。让我们看一下docker-compose.yml
文件:
services:
db:
image: postgres:latest
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
web-app:
image: web-app:latest
ports:
- 8080:8080
depends_on:
- db
Docker 将根据给定的依赖关系拉取图像并运行容器。因此,在这种情况下,Postgres 容器是队列中第一个运行的容器。
但是,有一些限制,因为depends_on
没有明确地等待依赖项准备好。
假设我们的Web 应用程序需要在启动时运行一些迁移脚本。如果数据库不接受连接,尽管Postgres 服务已正确启动,但我们无法执行任何脚本。
但是,如果我们使用特定工具或我们自己的托管脚本来控制启动或关闭顺序,我们可以避免这种情况。
3. Docker Composelinks
links
指示Docker 通过网络链接容器。当我们链接容器时,Docker 会创建环境变量并将容器添加到已知主机列表中,以便它们可以发现彼此。
我们将查看一个运行Postgres 容器的简单Docker 示例并将其链接到我们的Web 应用程序。
首先,让我们运行我们的Postgres 容器:
docker run -d --name db -p 5342:5342 postgres:latest
然后,我们将其链接到我们的Web 应用程序:
docker run -d -p 8080:8080 --name web-app --link db
让我们将示例转换为Docker Compose:
services:
db:
image: postgres:latest
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
web-app:
images: web-app:latest
ports:
- 8080:8080
links:
- db
4. Docker Composenetwork
我们可以找到仍在使用的Docker links
。但是,由于引入了[network](https://docs.docker.com/network/)
,Docker Compose 从第2 版开始就弃用了它。
通过这种方式,我们可以将应用程序与复杂的网络连接起来,例如覆盖网络。
但是,在独立应用程序中,当我们不指定网络时,我们通常可以默认使用网桥。
让我们删除links
并将其替换为network
,同时为数据库添加卷和环境变量:
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
web-app:
image:web-app:latest
depends_on:
- db
networks:
- mynet
ports:
- 8080:8080
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
5. Dockerlinks
和depends_on
虽然它们涉及表达依赖关系,但Dockerlinks
和depends_on
具有不同的含义。
depends_on
表示服务必须启动和停止的顺序,而links
关键字处理容器在网络上的通信。
此外,depends_on
是Docker Compose 关键字,而我们可以类似地使用links
作为Docker 的遗留功能。
六,结论
在本文中,我们通过Docker Compose 示例了解了Dockerlinks
和depends_on
之间的区别.
depends_on
告诉Docker 运行容器的顺序,而links,
或较新版本的Docker Compose 中的network
通过网络为容器设置连接。
0 评论