首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker在docker compose之后提交

docker在docker compose之后提交
EN

Stack Overflow用户
提问于 2021-09-09 14:17:20
回答 1查看 520关注 0票数 0

我运行docker compose,如下所示:

代码语言:javascript
复制
docker-compose -f docker-compose.dev.yml up --build -d

docker-compose.dev.yml的内容如下:

代码语言:javascript
复制
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的输出创建图像的正确方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 14:55:49

你基本上不应该使用docker commit。标准方法是描述如何build your images using a Dockerfile,并将该文件签入到源代码管理中。您可以将构建的镜像推送到Docker Hub之类的注册表中,并且可以签出原始源代码并重新构建镜像。

好消息是你基本上已经有了这个设置。您的每个组合服务都有一个build:块,其中包含有关如何构建映像的数据。所以这就足够了

代码语言:javascript
复制
docker-compose build

您将为每个组件获得一个单独的Docker镜像。

通常,如果您这样做,您还会希望将映像推送到某个Docker注册表。在Compose设置中,您还可以为每个服务指定一个image:。如果您同时拥有build:image:,则它指定用于构建的映像的映像名称(否则,Compose将根据项目名称进行选择)。

代码语言:javascript
复制
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

然后,您可以组合构建和推送映像

代码语言:javascript
复制
docker-compose build
docker-compose push

最后一种有用的技术是将合成设置拆分为两个文件。主docker-compose.yml文件具有在任何系统上运行容器集所需的设置,并且可以访问容器注册表。一个单独的docker-compose.override.yml file将支持开发人员使用,因为您也有源代码的副本。如果您使用Compose进行部署,则只需将主docker-compose.yml文件复制到目标系统。

代码语言:javascript
复制
# 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
代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69119874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档