Настройка локальной разработки с помощью Docker и докеризация репозиториев? - PullRequest
0 голосов
/ 12 мая 2018

Я совсем недавно начал изучать Docker, и я хотел бы докеризировать все мои существующие проекты и все новые. Поэтому в основном установите мою локальную среду разработки на Docker, но держите каждый проект / репозиторий изолированным, если это имеет смысл, так как одно php-приложение может быть на php5, а другое на php7 и т. Д.

Обычно я делал раньше, чтобы поместить все мои проекты / репозитории в папку home/Repositories, поэтому я хочу следовать тому же шаблону, хотя каждая папка проекта будет работать в каждой отдельной среде.

Я уже установил Docker в моей ОС (я на Ubuntu Linux полностью новая установка, поэтому PHP или что-то еще не установлено), однако я хотел бы задать несколько вопросов, поскольку у меня нет предыдущих опыт работы с Docker

Насколько я понимаю, каждый проект / репозиторий должен содержать файл docker-compose.yml в корневом каталоге и папку docker, куда я помещаю все Dockerfiles, верно?

- home
-- Repositories
--- a-laravel-project
---- docker // folder that has all required containers, like PHP, Mysql, Nginx conf etc etc
---- docker-compose.yml
---- index.php

--- another-oop-php-project
---- docker // folder that has all required containers, like PHP, Mysql, etc etc
---- docker-compose.yml
---- index.php

Нужно ли мне также устанавливать Git? Я предполагаю, что для того, чтобы докеризировать все мои существующие репозитории, мне нужно сначала их клонировать, так что в этом случае git (pre) требуется, правильно?

Заранее спасибо, любые отзывы будут оценены.

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете точно сохранить каталог своих репозиториев. Вам вообще не нужен специальный макет для Docker.

Допустим, что в вашем пред-докерском взгляде на мир ваша среда была:

  • хранилища
    • project1
      • index.php
    • project2
      • index.php

Затем вы добавляете Dockerfile (и, если хотите, docker-compose.yml) в каждый проект:

  • хранилища
    • project1
      • index.php
      • Dockerfile
    • project2
      • index.php
      • Dockerfile

Вы упоминаете "папку, в которой есть все необходимые контейнеры". Это не совсем верно. Все ваши Docker-контейнеры будут находиться в собственной структуре каталогов Docker (с которой вы не хотите связываться вручную). Что вам нужно беспокоиться, так это как встраивать ваши зависимости в ваш докер контейнер для каждого проекта.

Допустим, ваш проект1 будет использовать только php, поэтому вы можете использовать официальный контейнер php docker (https://hub.docker.com/_/php/).

Тогда ваш Dockerfile может быть чем-то вроде

FROM php:7.0-cli
COPY index.php /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]

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

FROM ubuntu
RUN apt-get install php # Or whatever is appropriate, I don't use php
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]

Затем, когда вы находитесь в директории project1 и хотите собрать свой контейнер Docker. Затем запустите его.

docker build -t project1:latest .
docker run project1:latest

Примечание к исходным файлам:

Довольно часто хочется, чтобы ваши исходные файлы находились вне вашего док-контейнера, но запускали тестовый сервер внутри док-контейнера. В этом случае вы захотите сделать что-то вроде:

docker run \
  -v /home/repositories/project1:/project1 \
  php:7.0-cli \
  php /project1/index.php

Это связывание монтирует ваш каталог исходного кода с вашего компьютера в контейнер, в котором вы запускаете сервер php. Также не забывайте, что если вы запускаете сервер разработки внутри док-контейнера, вам нужно связать порты, чтобы вы могли подключиться к порту на локальном хосте и перенаправить его в контейнер.

Существует много полезной информации, которую вам может быть интересно прочитать на https://hub.docker.com/_/php/, если вы используете php.

Git, я все равно установил бы на вашем хосте, особенно если монтировал ваш исходный код в контейнер, как я описал

...