【问题标题】:docker hub do you create a repository for every imagedocker hub 你是否为每个图像创建一个存储库
【发布时间】:2021-03-21 08:25:41
【问题描述】:

我是 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"]

【问题讨论】:

  • 容器中没有多个图像。您在主机上有多个容器。
  • 啊,我在主机上连接了多个容器。容器正在运行单个图像正确吗?这是不恰当的吗?在主机上运行的单个容器中实现多个图像会更好吗?
  • 容器正在运行图像实例。你有什么很好

标签: python docker nginx docker-compose dockerhub


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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


    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-snapshot) )


    2- 使用 Docker 应用框架

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多