docker-compose:网络和链接的区别
docker-compose: difference between networks and links
我正在学习 docker。我看到这两个术语让我感到困惑。例如这里有一个 docker-compose 定义了两个服务 redis
和 web-app
.
services:
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
links:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge
这个 docker-compose
文件定义了一个名为 lognet 的桥接网络,所有服务都将连接到这个网络。据我了解,此操作使那些服务可以看到其他服务。那么为什么应用服务仍然需要link到上面的redis服务。
谢谢
链接已被网络取代。 Docker 将它们描述为 legacy feature that you should avoid using. 您可以安全地删除 link,这两个容器将能够通过它们的服务名称(或 container_name)相互引用。
使用 compose,links 确实有创建隐含依赖项的副作用。您应该将其替换为更明确的 depends_on 部分,以便应用程序不会在 redis 启动之前或之前尝试 运行。
顺便说一句,我不喜欢硬编码 container_name 除非您确定这是主机上唯一以该名称存在的容器并且您需要从docker cli 名称。如果没有容器名称,docker-compose 会给它一个不太直观的名字,但它也会在网络上给它一个 redis 的别名,这正是容器到容器网络所需要的。所以这些建议的最终结果是:
version: '2'
# do not forget the version line, this file syntax is invalid without it
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
depends_on:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge
我正在学习 docker。我看到这两个术语让我感到困惑。例如这里有一个 docker-compose 定义了两个服务 redis
和 web-app
.
services:
redis:
container_name: redis
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
links:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge
这个 docker-compose
文件定义了一个名为 lognet 的桥接网络,所有服务都将连接到这个网络。据我了解,此操作使那些服务可以看到其他服务。那么为什么应用服务仍然需要link到上面的redis服务。
谢谢
链接已被网络取代。 Docker 将它们描述为 legacy feature that you should avoid using. 您可以安全地删除 link,这两个容器将能够通过它们的服务名称(或 container_name)相互引用。
使用 compose,links 确实有创建隐含依赖项的副作用。您应该将其替换为更明确的 depends_on 部分,以便应用程序不会在 redis 启动之前或之前尝试 运行。
顺便说一句,我不喜欢硬编码 container_name 除非您确定这是主机上唯一以该名称存在的容器并且您需要从docker cli 名称。如果没有容器名称,docker-compose 会给它一个不太直观的名字,但它也会在网络上给它一个 redis 的别名,这正是容器到容器网络所需要的。所以这些建议的最终结果是:
version: '2'
# do not forget the version line, this file syntax is invalid without it
services:
redis:
image: redis:latest
ports:
- "6379:6379"
networks:
- lognet
app:
container_name: web-app
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ".:/webapp"
depends_on:
- redis
networks:
- lognet
networks:
lognet:
driver: bridge