如何将Docker Compose推送到Docker Hub

13

我有几个服务在我的docker-compose文件中,看起来像这样:

version: '3.7'

services:
  web:
    build: ./
    command: gunicorn --bind 0.0.0.0:5000 --workers 2 --worker-connections 5000 --timeout 6000 manage:app
    volumes:
      - ./:/usr/src/app/
      - static_volume:/usr/src/app/static_files
    expose:
      - 5000
    env_file:
      - ./.env.prod
    depends_on:
      - mongodb

  mongodb:
    image: mongo:4.4.1
    restart: unless-stopped
    command: mongod
    ports:
      - '27017:27017'
    environment:
      MONGODB_DATA_DIR: /data/db
      MONDODB_LOG_DIR: /dev/null
      MONGO_INITDB_ROOT_USERNAME: 
      MONGO_INITDB_ROOT_PASSWORD: 
    volumes:
      - mongodbdata:/data/db

  nginx:
    build: ./nginx
    volumes:
      - static_volume:/usr/src/app/static_files
    ports:
      - 5001:8000
    depends_on:
      - web


volumes:
  mongodbdata: 
  static_volume: 

我在Docker Hub账户上有一个公共仓库,我希望将我的应用程序中的所有镜像推送到该仓库中,有人可以帮忙吗?


docker-compose构建一个镜像时,它将会有一个名称。就像任何其他镜像一样,只需使用docker tagdocker push这些镜像即可。 - larsks
我的 MongoDB 和 Nginx 会被推送吗?@larsks - Mamen
@ Mamen 不是,只是你目前推送的那一个。 - Andrzej Sydor
所以,如果我想从Docker Hub仓库构建和运行我的项目,我必须拉取镜像并运行上面的Docker Compose文件,对吗?@AndrzejSydor - Mamen
1
@Mamen 是的,在构建和运行的情况下,只需运行Docker Compose即可。镜像将会自动拉取。 - Andrzej Sydor
1
请注意,您无法推送大量内容、本地文件或 docker-compose.yml 文件本身;您需要删除一些 volumes: 才能在另一个系统上使用它,并且它将不具有当前系统的 MongoDB 数据或您挂载到容器中的静态文件的备用版本。 - David Maze
1个回答

17

您应该将图像名称添加到您的服务中,包括您的 Docker Hub ID,例如:

services:
  web:
    build: ./
    image: docker-hub-id/web:latest
    ...
现在,你只需要调用docker-compose push命令即可。
请查看docker-compose push

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接