我运行docker compose,如下所示:
docker-compose -f docker-compose.dev.yml up --build -ddocker-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并拉动测试服务器来在测试服务器中使用它们,以避免重新创建dockers的时间。简单地使用docker commit是不起作用的。
从docker compose的输出创建图像的正确方法是什么?
谢谢
发布于 2021-09-09 14:55:49
你基本上不应该使用docker commit。标准方法是描述如何build your images using a Dockerfile,并将该文件签入到源代码管理中。您可以将构建的镜像推送到Docker Hub之类的注册表中,并且可以签出原始源代码并重新构建镜像。
好消息是你基本上已经有了这个设置。您的每个组合服务都有一个build:块,其中包含有关如何构建映像的数据。所以这就足够了
docker-compose build您将为每个组件获得一个单独的Docker镜像。
通常,如果您这样做,您还会希望将映像推送到某个Docker注册表。在Compose设置中,您还可以为每个服务指定一个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 file将支持开发人员使用,因为您也有源代码的副本。如果您使用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.ymlhttps://stackoverflow.com/questions/69119874
复制相似问题