Совместное использование папки и файла Python между образами Docker с помощью Docker Compose - PullRequest
0 голосов
/ 07 октября 2018

Мне бы хотелось, чтобы разные проекты Docker для моих тесно связанных проектов server_1 и server_2 располагались в одной папке, которую я могу одновременно создавать / развертывать с помощью Docker Compose.

Пример каталога проекта:

.
├── common_files
│   ├── grpc_pb2_grpc.py
│   ├── grpc_pb2.py
│   └── grpc.proto
├── docker-compose.yml
├── flaskui
│   ├── Dockerfile
│   └── flaskui.py
├── server_1
│   ├── Dockerfile
│   └── server_1.py
├── server_2
│   ├── Dockerfile
│   └── server_2.py
└── server_base.py

У двух вопросов, которые, я надеюсь, есть одно общее решение:

  1. Как я могу сделать так, чтобы у меня была только общая зависимость common_files/ только в одном месте?
  2. Как я могу использовать общий код server_base.py в обоих серверных проектах?

Я пытался импортировать, используя относительные каталоги в скриптах Python моего проекта, например from ..common_files import grpc_pb2, но я получаю ValueError: попытка относительного импорта за пределы пакета верхнего уровня .

Я рассмотрел вопрос об использовании read_only монтирования тома в docker-compose.yml, но это не объясняет, как ссылаться на common_files изнутрифайл проекта, такой как flaskui/Dockerfile.

1 Ответ

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

Вам необходимо смонтировать локальный каталог, содержащий файлы grpc и server_base.py как том в ваших контейнерах server_1 и server_2.Таким образом, существует единственный источник правды (ваш локальный каталог), и вы можете использовать их из обоих ваших контейнеров.

Вы можете добавить определение volumes в ваш файл docker-compose.yml для ваших контейнеров.Вот простой файл создания, который я создал для вашего сценария использования:

version: "3"

services:
  server_1:
    image: tutum/hello-world
    ports:
      - "8080:8080"
    container_name: server_1
    volumes:
      - ./common_files:/common_files

  server_2:
    image: tutum/hello-world
    ports:
      - "8081:8081"
    container_name: server_2
    volumes:
      - ./common_files:/common_files

common_files - это папка в вашем локальном каталоге, содержащая server_base.py вместе с файлами grpc, которые вы хотите смонтироватькак объемы к вашим контейнерам, которые должны использовать их.Они называются томами хоста, поскольку вы монтируете локальные файлы со своего хоста как тома для своих контейнеров.

При этой настройке, когда вы exec в server_1, вы можете видеть, что есть common_filesпапка сидит в каталоге /.Аналогично для server_2.

Вы можете exec в server_1, используя docker-compose exec server_1 /bin/sh

. Вы также можете прочитать больше в документации для томов Docker.

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