У меня есть 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. Я не хочу занимать лишнее место, как мне это сделать правильно?
Это мой файл 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
Как правильно sh образы в мой реестр хаба Docker без этого дублирования?