要构建一个网络服务器,我试图了解容器附加的方式,我真的需要一些快速的答案。
因此,如果我们将此docker-compose.yml
文件作为示例:
version: '2'
services:
# APP
nginx:
build: docker/nginx
volumes_from:
- php
links:
- php
depends_on:
- php
php:
build: docker/php
volumes:
- ${SYMFONY_APP_PATH}:/symfony
links:
- mysql
- faye
- rabbitmq
- elasticsearch
client:
image: node:8.9.4
volumes_from:
- php
working_dir: /symfony
user: 1000:1000
command: "npm run dev"
ports:
- "${LIVERELOAD_PORT}:35729"
environment:
LIVERELOAD_PORT: ${LIVERELOAD_PORT}
mysql:
build: docker/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ${SYMFONY_APP_PATH}:/symfony
- "mysql:/var/lib/mysql"
rabbitmq:
image: rabbitmq:3.4-management
volumes:
- "rabbitmq:/var/lib/rabbitmq"
volumes:
- "elasticsearch5:/usr/share/elasticsearch/data"
- ${SYMFONY_APP_PATH}:/symfony
volumes:
mysql: ~
elasticsearch5: ~
rabbitmq: ~
有什么区别between
volumes_from
,links
和depends_on
?
如果想要将每个容器与另一个容器相连,我们为什么不仅使用links
。 volumes_from
,links
和depends_on
之间有什么区别?
ngnix
依赖/链接到php
容器?为什么不相反? volumes:
mysql: ~ elasticsearch5: ~ rabbitmq: ~
,但我认为我们已经定义为每个容器的容量,所以主要是什么?配置的原因是什么?
答案 0 :(得分:1)
volumes_from,links和depends_on之间有什么区别?
links
和depends_on
都为容器提供了相互通信的方式。
links
是一项遗留功能,将来会被弃用,因此请尽量避免使用links
。
volumes_from
用于其他目的,与links
和depends_on
无关。
为什么在我的例子中ngnix依赖/链接到php容器?为什么不相反?
depends_on
定义了服务启动的顺序。在您的示例中,您使用Nginx作为PHP服务的代理服务器。所以你可能希望PHP服务在Nginx之前启动。
为什么我们不使用只有一个使用php,ngnix和mysqld的web容器来分隔它们呢?
Docker的一个最佳实践是保持每个容器足够简单,只能完成一项工作。就像Unix的“做一件事,做得好”哲学一样。
单一责任原则是一件好事,接受它。