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 集线器注册表而无需重复的正确方法是什么?
正确的做法是
docker build -f {path-to-dockerfile} -t {desired-docker-image-name}.
docker tag {desired-docker-image-name}:latest {desired-remote-image-name}:latest
或不是 latest
但你想要什么,比如 int 格式的日期时间
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 网络等...
我有一个 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 集线器注册表而无需重复的正确方法是什么?
正确的做法是
docker build -f {path-to-dockerfile} -t {desired-docker-image-name}.
docker tag {desired-docker-image-name}:latest {desired-remote-image-name}:latest
或不是latest
但你想要什么,比如 int 格式的日期时间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 网络等...