docker-compose 构建中的重复图像。如何将 docker-compose.yml 的两个服务正确推送到 Docker hub registry?

Duplicate images on docker-compose build. How to properly push two services of docker-compose.yml to Docker hub registry?

我有一个 docker-compose.yml 定义如下,有两个服务(数据库和应用程序):

version: '3'

services:
  db:
    build: .
    image: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=(adminname)
      - POSTGRES_PASSWORD=(adminpassword)
      - CLOUDINARY_URL=(cloudinarykey)
  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db

我在这两个服务中都有 build: . 的原因是你不能 docker-compose push 除非你在所有服务中都有 build。但是,这意味着这两个服务都引用同一个 Docker 文件,该文件构建了整个应用程序。所以在我 运行 docker-compose build 并查看可用的图像后,我看到了这个:

$ docker images   
    
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mellon_app              latest              XXXXXXXXXXXX        27 seconds ago      1.14GB
postgres                latest              XXXXXXXXXXXX        27 seconds ago      1.14GB

两个图像的IMAGE_ID完全相同,两个图像的大小完全相同。这让我觉得我肯定做了一些不必要的重复,因为它们都只是 运行 宁同一个 Docker 文件。我不想占用任何不必要的东西space,我该如何正确处理?

这是我的Docker文件:

FROM (MY FRIENDS ACCOUNT)/django-npm:latest

RUN mkdir usr/src/mprova

WORKDIR /usr/src/mprova

COPY frontend ./frontend
COPY backend ./backend

WORKDIR /usr/src/mprova/frontend

RUN npm install
RUN npm run build

WORKDIR /usr/src/mprova/backend

ENV DJANGO_PRODUCTION=True
RUN pip3 install -r requirements.txt

EXPOSE 8000

CMD python3 manage.py collectstatic && \
    python3 manage.py makemigrations && \
    python3 manage.py migrate && \
    gunicorn mellon.wsgi --bind 0.0.0.0:8000

将图像推送到我的 Docker 集线器注册表而无需重复的正确方法是什么?

正确的做法是

  1. docker build -f {path-to-dockerfile} -t {desired-docker-image-name}.

  2. docker tag {desired-docker-image-name}:latest {desired-remote-image-name}:latest 或不是 latest 但你想要什么,比如 int 格式的日期时间

  3. docker push {desired-remote-image-name}:latest

和清理: 4.docker rmi {desired-docker-image-name}:latest {desired-remote-image-name}:latest

docker-compose 的全部目的是帮助您的本地开发,因此更容易启动多个 pods 并将它们组合在本地 docker-compose 网络等...