#docker #docker-compose #amazon-ecr
Вопрос:
Я запускаю docker compose следующим образом:
docker-compose -f docker-compose.dev.yml up --build -d
содержимое docker-compose.dev.yml является:
version: '3'
services:
client:
container_name: client
build:
context: frontend
environment:
- CADDY_SUBDOMAIN=xxx
- PRIVATE_IP=xxx
restart: always
ports:
- "80:80"
- "443:443"
links:
- express
volumes:
- /home/ec2-user/.caddy:/root/.caddy
express:
container_name: express
build: express
environment:
- NODE_ENV=development
restart: always
Затем я хочу создать изображения из этих контейнеров, чтобы использовать их на тестовом сервере, отправив их в aws ECR и подключив тестовый сервер, чтобы избежать повторного создания докеров. Простое использование фиксации docker не сработало.
каков правильный подход к созданию изображений из выходных данных docker compose?
Спасибо
Комментарии:
1. В общем, правильный подход к созданию изображений заключается в использовании файла Dockerfile. Использование
docker commit
для сохранения «живых» изменений приводит к тому, что изображение трудно воспроизвести (нет записи о том, как оно было создано).2. «Простое использование фиксации docker не сработало». Что случилось, когда ты попытался? Были ли ошибки, или полученные изображения оказались не такими, как вы ожидали?
3. @larsks в основном не был в сети, не выглядел тогда диппером. динт хочет тратить время на попытки исправить маленькие дырочки, когда я не уверен, что нахожусь на верном пути.
Ответ №1:
Вы в принципе никогда не должны использовать docker commit
. Стандартный подход состоит в том, чтобы описать, как создавать изображения с помощью файла Dockerfile, и проверить этот файл в системе управления версиями. Вы можете поместить созданный образ в реестр, такой как Docker Hub, и вы можете проверить исходный исходный код и восстановить образ.
Хорошей новостью является то, что у вас в основном уже есть эта настройка. Каждая из ваших служб создания имеет build:
блок, содержащий данные о том, как создать изображение. Так что этого достаточно, чтобы
docker-compose build
и вы получите отдельный образ докера для каждого компонента.
Часто, если вы делаете это, вам также захочется перенести изображения в какой-нибудь реестр Docker. В настройке создания вы также можете указать значение image:
для каждой службы. Если у вас есть и build:
то , и image:
другое, это указывает имя изображения, которое будет использоваться для построенного изображения (в противном случае Compose выберет одно из них на основе имени проекта).
version: '3.8'
services:
client:
build:
context: frontend
image: registry.example.com/project/frontend
et: cetera
express:
build: express
image: registry.example.com/project/express
et: cetera
Затем вы можете создать как сборку, так и отправку изображений
docker-compose build
docker-compose push
Один из последних методов, который может быть полезен, состоит в том, чтобы разделить настройку создания на два файла. В главном docker-compose.yml
файле есть настройки, необходимые для запуска набора контейнеров в любой системе с доступом к реестру контейнеров. Отдельный docker-compose.override.yml
файл будет поддерживать использование разработчиком, если у вас также есть копия исходного кода. Если вы используете Compose для развертывания, вам нужно только скопировать основной docker-compose.yml
файл в целевую систему.
# docker-compose.yml
version: '3.8'
services:
client:
image: registry.example.com/project/frontend
ports: [...]
environment: [...]
restart: always
# volumes: [...]
express:
image: registry.example.com/project/express
ports: [...]
environment: [...]
restart: always
# docker-compose.override.yml
version: '3.8'
services:
client:
build: frontend
# all other settings come from main docker-compose.yml
express:
build: express
# all other settings come from main docker-compose.yml