Образы Docker: как управлять ими между разработкой и производством - PullRequest
0 голосов
/ 19 октября 2018

Предполагая, что я создал DJANGO project с использованием docker-compose в соответствии с примером, приведенным в https://docs.docker.com/compose/django/

Ниже приведен простой docker-compose.yml файл для понимания сакэ

docker-compose.yml

version: '3'    
services:
  db:
    image: postgres
  web:
    image: python:3
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Здесь я использую два изображения python:3 (называемые "web") и postgres (называемые "db"), которые автоматически определяются из hub.docker.com и строятся соответственно.Мы также хотим, чтобы web container зависело от db container.Просто чтобы вспомнить, что в docker-compose.yml выше

Как только я установлю все, что я делаю docker-compose up, и мы увидим, что два containers запущены и django проект запущен на моей локальной машине.

После того, как я поработал со своим приложением django, теперь я хочу развернуть его на рабочем сервере.

Итак, как скопировать образы на сервер разработки, чтобы я снова работал над теми же образами докера?.

Поскольку я пытаюсь создать файл docker-compose.yml на производственном сервере, то есть вероятность, что образ БД и веб-изображение могут измениться.

Как:

Когда я создаю образ postgres на моем компьютере разработчика, скажите, что у меня postgres version 9.5

Но если я снова соберу образ postgres на производственном сервере, то у меня может быть установлен postgres version 10.1.

Так что я не буду работать в той же среде, может быть в той же операционной системе, но не в той же версии пакетов.

Так как это проверить, когда я перехожу на разработку

Частично решено:

Согласно ответу @ Yogesh_D,

Если я использую предварительно созданные изображения из концентратора Dokcer, мы можем легко получить то же самоесреда на производственном сервере, использующая номер версии, такой как postgres: 9.5.1 или python: 3.

Частично не решен:

Но если я создал изображение самостоятельно, используя свой собственный файл Docker, а затем отметил его при сборке.Теперь я хочу использовать то же изображение в производстве, как это сделать.Поскольку его нет в Docker Hub, а также, возможно, меня не заинтересует его установка в Docker Hub.

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

1 Ответ

0 голосов
/ 19 октября 2018

Это должно быть довольно просто, так как директива docker compose image позволяет вам даже указать теги для этого изображения.Так что в вашем случае это будет примерно так:

version: '3'    
services:
  db:
    image: postgres:9.5.14
  web:
    image: python:3.6.6
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Приведенный выше файл гарантирует, что вы получите версию 9.5.14 postgres и версию 3.6.6 python.И не важно, где вы развернете, это именно то, что вы получите.Посмотрите на https://hub.docker.com//python для всех тегов / версий, доступных на изображении python, и посмотрите на https://hub.docker.com//postgres, чтобы выяснить все версии / теги, доступные для изображений postgres.

Редактировать:Для решения проблемы пользовательских изображений у вас есть несколько способов:

a.в зависимости от того, где вы развертываете (ваш центр обработки данных или провайдеры общедоступного облака), вы можете создать собственный реестр образов Docker .И здесь есть много вариантов, таких как this

b.Если вы работаете в одном из популярных облачных провайдеров, таких как aws , gcp , azure , большинство из них предоставляют свои собственные реестры

c,Или вы можете использовать Docker Hub для настройки частных репозиториев .

И каждый из них поддерживает теги, поэтому по-прежнему используйте теги, чтобы обеспечить развертывание собственных пользовательских изображений точно так же, как общедоступных изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...