首页 > 解决方案 > docker hub 你是否为每个图像创建一个存储库

问题描述

我是 docker 和 docker hub 的新手。我正在尝试了解 docker hub 上的存储库。我已经使用 nginx 和 gunicorn 对 django web 应用程序进行了 docker 化。 在此处输入图像描述 我的问题是:由于容器中有多个图像:

  1. 每个图像是 docker hub 上的不同存储库还是
  2. 它会在同一个存储库中,但具有不同的标签,例如:web 或:nginx?

这是我的 docker-compose.yml:

version: '3.7'

services:
web:
 build:
   context: ./app
   dockerfile: Dockerfile.prod
 command: gunicorn ether.wsgi:application --bind 0.0.0.0:8000
 volumes:
   - static_volume:/home/app/web/staticfiles
   - media_volume:/home/app/web/media
 expose:
   - 8000
 env_file:
   - ./.env.prod
 depends_on:
   - db
db:
 image: postgres:12.0-alpine
 volumes:
   - postgres_data:/var/lib/postgresql/data/
 env_file:
   - ./.env.prod.db
nginx:
 build: ./nginx
 volumes:
   - static_volume:/home/app/web/staticfiles
   - media_volume:/home/app/web/media
 ports:
   - 1337:80
 depends_on:
   - web

volumes:
postgres_data:
static_volume:
media_volume:

Dockerfile

###########
# BUILDER #
###########

# pull official base image
FROM python:3.8.3-alpine as builder

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

# lint
RUN pip install --upgrade pip
COPY . .

# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt


#########
# FINAL #
#########

# pull official base image
FROM python:3.8.3-alpine

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup -S app && adduser -S app -G app

# create the appropriate directories
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/staticfiles
RUN mkdir $APP_HOME/media
WORKDIR $APP_HOME

# install dependencies
RUN apk update && apk add libpq
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --no-cache /wheels/*

# copy entrypoint-prod.sh
COPY ./entrypoint.prod.sh $APP_HOME

# copy project
COPY . $APP_HOME

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app user
USER app

# run entrypoint.prod.sh
ENTRYPOINT ["/home/app/web/entrypoint.prod.sh"]

标签: pythondockernginxdocker-composedockerhub

解决方案


通常,标签代表相同基础容器或应用程序的不同版本。

因此,建议为静态资产 (nginx) 和后端 api(您的 Web 图像)建立单独的存储库,但这不是硬性规定。您可以轻松地执行app:v1-nginxand app:v1-api,但 API 可能会比另一个更频繁地被标记和推送,因此版本号不一定是对齐的


推荐阅读