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

用户745587

我有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在所有服务中都有一个否则您将无法做到但是,这意味着两个服务都引用同一个 Dockerfile,后者构建了整个应用程序。因此,在我运行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 完全相同,两个图像的大小完全相同。这让我觉得我肯定做了一些不必要的重复,因为它们都只是运行同一个 Dockerfile。我不想占用任何不必要的空间,我该如何正确地做到这一点?

这是我的 Dockerfile:

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 中心注册表的正确方法是什么?

用户2932688

正确的做法是

  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是帮助您的本地开发,因此更容易启动多个 pod 并将它们组合到本地 docker-compose 网络等中...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章