我有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 中心注册表的正确方法是什么?
正确的做法是
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
是帮助您的本地开发,因此更容易启动多个 pod 并将它们组合到本地 docker-compose 网络等中...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句