Какие настройки docker-compose необходимо удалить для производства?
Я пытаюсь создать отдельный docker-compose для производства, в настоящее время у меня есть только один compose-файл, который я использую для локальной разработки, но чтобы сделать его для производства, я не знаю, какие атрибуты удалить в сторону volumes
а также ports
мой текущий составной файл dev выглядит так:
version: '3'
services:
db:
container_name: mariadb
build:
context: ./mariadb
volumes:
- ./mariadb/scripts:/docker-entrypoint-initdb.d
- ./.data/db:/var/lib/mysql
- ./logs/mariadb:/var/log/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- '${MYSQL_PORT:-3306}:3306'
command:
'mysqld --innodb-flush-method=fsync'
networks:
- default
restart: always
php-fpm:
container_name: php
build:
context: ./php7-fpm
args:
TIMEZONE: ${TIMEZONE}
volumes:
- ${APP_PATH}:/var/www/app
- ./php7-fpm/config/php.ini:/usr/local/etc/php/php.ini
environment:
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: ${MYSQL_DATABASE}
DB_USERNAME: ${MYSQL_USER}
DB_PASSWORD: ${MYSQL_PASSWORD}
depends_on:
- db
networks:
- default
restart: always
nginx:
container_name: nginx
build:
context: ./nginx
args:
- 'php-fpm'
- '9000'
volumes:
- ${APP_PATH}:/var/www/app
- ./logs/nginx/:/var/log/nginx
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
networks:
- default
restart: always
networks:
default:
driver: bridge
2 ответа
Точный список будет зависеть от требований вашей среды / рабочей группы, но это то, что кажется полезным помимо портов / существующих томов:
сети
Сеть по умолчанию может не работать в вашей среде. Например, ваша ops команда может решить разместить nginx / php-fpm / mariadb в разных сетях, как в следующем примере ( https://docs.docker.com/compose/networking/) или даже использовать уже существующую сеть
Mysql конфиги
Они обычно находятся в отдельном каталоге, т.е. /etc/my.cnf
а также /etc/my.cnf.d
, Эти конфиги могут быть разными в prod / dev. Не вижу его в ваших путях томов
Php-fpm7
Не работал с php-fpm7
, но в php-fpm5
у этого также была другая папка с файлами конфигурации (/etc/php-fpm.conf
а также /etc/php-fpm.d
), что отсутствует в ваших томах. Эти файлы также могут отличаться, как только вы справитесь даже с умеренной нагрузкой (вам нужно будет настроить количество рабочих / тайм-аутов и т. Д.)
Nginx
То же, что и для php-fpm
, настройки ssl / имена хостов / конфигурации доменов могут отличаться
логирование
Подумайте о том, какой драйвер регистрации может удовлетворить ваши потребности. Отсюда:
Docker включает несколько механизмов ведения журналов, которые помогут вам получать информацию от работающих контейнеров и сервисов. Эти механизмы называются драйверами регистрации.
Вы можете легко настроить его в docker-compose, вот пример fluentd
Контейнер для регистрации:
version: "3"
services:
randolog:
image: golang
command: go run /usr/src/randolog/main.go
volumes:
- ./randolog/:/usr/src/randolog/
logging:
driver: fluentd
options:
fluentd-address: "localhost:24224"
tag: "docker.{{.ID}}"
fluentd:
build:
context: ./fluentd/
ports:
- "24224:24224"
- "24224:24224/udp"
Вы должны следовать использованию Compose в производственной документации:
Вам, вероятно, нужно внести изменения в конфигурацию вашего приложения, чтобы подготовить его к работе. Эти изменения могут включать в себя:
- Удаление любых привязок тома для кода приложения, чтобы код оставался внутри контейнера и не мог быть изменен извне
- Привязка к разным портам на хосте
- Установка переменных среды по-разному, например, когда вам нужно уменьшить детализацию ведения журнала или включить отправку электронной почты)
Указание политики перезапуска, например
restart: always
чтобы избежать простоевДобавление дополнительных сервисов, таких как агрегатор журналов