Я искал ответы на следующий список вопросов. Я начал исследовать и PO C на docker на прошлой неделе, поэтому я не знаю ни одной из лучших практик или рабочих процессов. Но здесь идут мои варианты использования и кое-что, над чем я работал.
Я добавлю свои запросы в blockquote, чтобы было легче ориентироваться.
У меня и моей команды в настоящее время есть настройка (без Docker) для Development
Фаза, UAT
Фаза и Production
Фаза.
Я использовал docker-compose
, чтобы настроить окружение так, как мне нужно.
У меня есть структура папок, подобная этой:
deploy
|-----.env
|-----docker-compose-dev.yaml
|-----docker-compose-prod.yaml
|-----docker-compose-uat.yaml
src
|-----Dockerfile
Полагаю, это правильный путь к go. наличие docker-compose
файлов для каждой фазы / среды. Я прав?
Следует ли игнорировать Dockerfile
в .gitignore и .dockerignore?
Вот мой шаблон для docker-compose-dev.yaml
#filename - docker-compose-dev.yaml
version: "3"
services:
dev:
container_name: ${DEV_DOCKER_CONTAINER_NAME}
restart: ${DEV_DOCKER_RESTART_SERVER}
build:
context: ${DEV_DOCKER_BUILD_FOLDER}
args:
PORT: ${DEV_DOCKER_PORT}
ports:
- "${DEV_DOCKER_PORT}:${DEV_NODE_SERVER_PORT}"
environment:
- MYSQL_HOST=${DEV_MYSQL_HOST}
- MYSQL_USERNAME=${DEV_MYSQL_USERNAME}
- MYSQL_PASSWORD=${DEV_MYSQL_PASSWORD}
- MYSQL_DBNAME=${DEV_MYSQL_DBNAME}
- MYSQL_PORT=${DEV_MYSQL_PORT}
- PORT=${DEV_NODE_SERVER_PORT}
#filename - docker-compose-prod.yaml
version: "3"
services:
prod:
container_name: ${PROD_DOCKER_CONTAINER_NAME}
restart: ${PROD_DOCKER_RESTART_SERVER}
build:
context: ${PROD_DOCKER_BUILD_FOLDER}
args:
PORT: ${PROD_DOCKER_PORT}
ports:
- "${PROD_DOCKER_PORT}:${PROD_NODE_SERVER_PORT}"
environment:
- MYSQL_HOST=${PROD_MYSQL_HOST}
- MYSQL_USERNAME=${PROD_MYSQL_USERNAME}
- MYSQL_PASSWORD=${PROD_MYSQL_PASSWORD}
- MYSQL_DBNAME=${PROD_MYSQL_DBNAME}
- MYSQL_PORT=${PROD_MYSQL_PORT}
- PORT=${PROD_NODE_SERVER_PORT}
Я пытался сделать все настраиваемым, чтобы все контролировалось файлом .env
.
Моя первая мысль была создать .env.prod
, .env.uat
, .env.dev
. но я не уверен, как заставить docker-compose
использовать пользовательский файл среды. Я cannot use
, что TAG env_file
, так как у меня есть переменные для самого файла docker-compose
.
Как заставить пользовательский .env.<>
использоваться в docker -compose?
Сначала я подумал, что если код одинаков для фаз I должно иметь 1 изображение и несколько контейнеров container1-uat
, container2-dev
. Но тогда, я думаю, не имеет смысла иметь одно изображение для 3 фаз. Смущенный ...
Я пытался использовать docker-compose -f docker-compose-dev.yaml -f docker-compose-prod.yaml up
для создания 2 контейнеров с 1 изображением Same Dockerfile
. Но все равно создано 2 изображения. Можно ли это сделать в docker-compose
? Например, image-1
создает container-app-dev
container-app-prod
как 2 контейнера.
Если код один и тот же, я должен просто создать 1 изображение для всех 3 фаз или 3 изображения для 3 фаз ?
В целом, правильно ли я иду для своей установки для фазы производства и фазы разработки?