Docker hub вы создаете репозиторий для каждого образа

Я новичок в докере и докер-хабе. Я пытаюсь понять репозиторий на докер-хабе. Я докеризировал веб-приложение django, используя nginx и gunicorn. Мой вопрос: Поскольку в контейнере есть несколько изображений:

  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:

и

Докерфайл

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

У вас нет нескольких изображений в контейнере. У вас есть несколько контейнеров на хосте.

OneCricketeer 09.12.2020 23:12

Ах, у меня есть несколько подключенных контейнеров на хосте. Контейнер работает с одним изображением правильно? Это неправильно? Было бы лучше реализовать несколько образов в одном контейнере, работающем на хосте?

lord404 09.12.2020 23:17

Контейнеры запускают экземпляры образов. То, что у вас есть, в порядке

OneCricketeer 09.12.2020 23:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
457
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как правило, теги представляют разные версии одного и того же базового контейнера или приложения.

Поэтому рекомендуется иметь отдельные репозитории для статических ресурсов (nginx) и внутреннего API (вашего веб-изображения), однако это не жесткое правило. Вы могли бы так же легко сделать app:v1-nginx и app:v1-api, но API, скорее всего, будет помечен и отправлен чаще, чем другой, поэтому номера версий не обязательно будут выровнены.

Docker Hub ориентирован на образы. Итак, если вы хотите создавать, совместно использовать и запускать набор микросервисов как единый продукт, у вас есть два основных пути:


1- Создайте репозиторий для каждого изображения в одном и том же пространстве имен.

Чтобы применить это решение, вы должны отправить изображения независимо друг от друга, создав репозиторий для каждого изображения в том же пространстве имен, которое указывает на продукт, которым вы хотите поделиться, как на единое целое.

Например, предположим, что ваше приложение называется DjangoApp. вы можете создать новую учетную запись с именем djangoapp в Docker Hub (она будет доступна по адресу 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 позволяет совместно использовать мультисервисное приложение на основе компоновки через реестры контейнеров (например, Docker Hub). Подробнее см. в документации: https://github.com/docker/app

Другие вопросы по теме