Як ви впорядковуєте Dockerfiles, що належить проекту, коли у вас є один Dockerfile для бази даних, один для сервера додатків тощо? Ви створюєте якусь ієрахію у джерелі? Великий корпоративний проект не може складатися лише з одного Dockerfile?
Як ви впорядковуєте Dockerfiles, що належить проекту, коли у вас є один Dockerfile для бази даних, один для сервера додатків тощо? Ви створюєте якусь ієрахію у джерелі? Великий корпоративний проект не може складатися лише з одного Dockerfile?
Відповіді:
Ця відповідь застаріла. Фіг вже не існує і був замінений композитором Докера . Прийняті відповіді не можна видалити ....
Docker Compose підтримує побудову ієрархії проектів. Тому зараз легко підтримувати Dockerfile у кожному підкаталозі.
├── docker-compose.yml
├── project1
│ └── Dockerfile
└── project2
└── Dockerfile
Я просто створюю каталог, що містить Dockerfile для кожного компонента. Приклад:
Під час створення контейнерів просто введіть ім'я каталогів і Docker вибере правильний Dockerfile.
У нових версіях (> = 1.8.0) докера ви можете це зробити
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
Велика економія.
EDIT: оновлення версій за коментарем raksja
EDIT: коментар від @vsevolod: можна виділити синтаксис у коді VS, надавши файли .Dockerfile розширення (замість імені), наприклад, Prod.Dockerfile, Test.Dockerfile тощо.
Dockerfile.web
конфігурацію запуску. Тож я створив випуск: youtrack.jetbrains.com/issue/WEB-28185
docker-compose.yml
файлі, наприклад?
docker-compose
та множинність Dockerfile
в окремих каталогахНе перейменовуйте свій
Dockerfile
наDockerfile.db
абоDockerfile.web
, він може не підтримуватися вашим IDE, і ви втратите підсвічування синтаксису.
Як сказав Кінгслі Учнор , у вас може бути кілька Dockerfile
, по одному на каталог, які представляють щось, що ви хочете створити.
Мені подобається мати docker
папку, яка містить всі програми та їх конфігурацію. Ось приклад ієрархії папок проекту для веб-програми, яка має базу даних.
docker-compose.yml
docker
├── web
│ └── Dockerfile
└── db
└── Dockerfile
docker-compose.yml
приклад:
version: '3'
services:
web:
# will build ./docker/web/Dockerfile
build: ./docker/web
ports:
- "5000:5000"
volumes:
- .:/code
db:
# will build ./docker/db/Dockerfile
build: ./docker/db
ports:
- "3306:3306"
redis:
# will use docker hub's redis prebuilt image from here:
# https://hub.docker.com/_/redis/
image: "redis:alpine"
docker-compose
Приклад використання командного рядка:
# The following command will create and start all containers in the background
# using docker-compose.yml from current directory
docker-compose up -d
# get help
docker-compose --help
Ви все ще можете скористатись вищезазначеним рішенням та розмістити свій Dockerfile
каталог у такому каталозі, як docker/web/Dockerfile
все, що вам потрібно, - це встановити збірку context
у вашому docker-compose.yml
подібному:
version: '3'
services:
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
Таким чином, ви зможете мати такі речі:
config-on-root.ini
docker-compose.yml
docker
└── web
├── Dockerfile
└── some-other-config.ini
і ./docker/web/Dockerfile
подібне:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
Ось кілька швидких команд від tldr docker-compose . Обов’язково зверніться до офіційної документації для отримання детальної інформації.
COPY ../package.json /app/package.json
)? Цей файл, як правило, знаходиться на рівні коренів, і докер забороняє доступ до батьків. Якого підходу ви будете дотримуватися?
web
проект з .
(в docker-compose.yml
: build: .
). Таким чином, web
має доступ до кореневих файлів під час створення. Я бачив це пов'язане питання: stackoverflow.com/questions/24537340/…, і ми можемо створити з батьківського каталогу замість цього, коли використовуємо docker
командний рядок, і ця відповідь показує, як це зробити з docker-compose: stackoverflow.com/a/45353241/ 1092815
-f
варіант хороший, але я вважаю за краще використовувати docker-compose
з вкладеними папками. Я думаю, обидві відповіді справедливі. Більшість людей можуть просто віддати перевагу збереженню за замовчуванням Dockerfile
імені, щоб підтримувати більшість IDE поза коробкою. Я не визнаю першою відповідь, я просто пропоную альтернативу. Мені просто не подобається, що мій IDE вважає, що мій Dockerfile - це php
файл, коли я його використовую Dockerfile.php
, але так, він працює. Я бачив кілька прикладів у документації докера; Dockerfile.build
, Dockerfile.debug
тощо.
example.Dockerfile
зберігає підсвічування синтаксису та піктограми на VSCode.
У Intellij я просто змінив назву докерних файлів на * .Dockerfile і пов’язав тип файлу * .Dockerfile з синтаксисом docker.
Додайте шар абстракції, наприклад, файл YAML, як у цьому проекті https://github.com/larytet/dockerfile-generator, який виглядає як
centos7:
base: centos:centos7
packager: rpm
install:
- $build_essential_centos
- rpm-build
run:
- $get_release
env:
- $environment_vars
Короткий сценарій / створення Python може генерувати всі Dockerfiles з конфігураційного файла.
Працюючи над проектом, який вимагає використання декількох докер-файлів, просто створіть кожен dockerfile в окремому каталозі. Наприклад,
додаток / db /
Кожен із вищезазначених каталогів міститиме свій докерфайл. Коли програма розробляється, докер здійснюватиме пошук у всіх каталогах та збиратиме всі докерфіли.