docker hub 你为每个图像创建一个存储库吗

docker hub do you create a repository for every image

我是 docker 和 docker 中心的新手。我正在尝试了解 docker 集线器上的存储库。我已经 docker 使用 nginx 和 gunicorn 开发了一个 django web 应用程序。 我的问题是: 由于容器中有多个图像:

  1. 每个图像都会是 docker 集线器上的不同存储库吗 或
  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:

Docker 文件

###########
# 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"]

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

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

Docker 中心以图像为中心。因此,如果您想构建、共享和 运行 一组微服务作为单个产品,您基本上有两种方法:


1- 在同一个命名空间下为每个图像创建一个存储库

要应用此解决方案,您应该独立推送图像,在同一命名空间下为每个图像创建一个存储库,向 产品 指示您希望作为单个实体共享。

例如,假设您的应用程序名为 DjangoApp。你可以在 Docker Hub 上创建一个名为 djangoapp 的新帐户(这将在 https://hub.docker.com/u/djangoapp 上可用)然后推送组成你的应用程序的各种图像上面的标签:

djangoapp/nginx:1.0
djangoapp/gunicorn:1.1

这样您仍然可以使用标签来识别组成您的应用程序的特定图像的特定版本,可以是稳定版本 ( 1.0 ) 或候选发布版本 ( 1.1-rc ) 甚至是开发版本 ( 1.2 -快照)


2- 使用 Docker 应用框架

Docker App fram 允许通过容器注册表(例如 Docker Hub)共享基于组合的多服务应用程序。 在以下位置查看文档以获取更多详细信息:https://github.com/docker/app