Хабрахабр

[Из песочницы] Разработка под Docker. Локальное окружение. Часть 1

Возможно, одна из самых основных причин почему мне нравится докер это то, что он позволяет избавиться от необходимости установки на компьютер различных сервисов. К их числу можно отнести и сам веб-сервер Apache или Nginx, базы данных и прочие компоненты инфраструктуры приложения. Вся инфраструктура прописана в конфигурационном файле docker-compose.yml и запускается одной командой вместе с вашим приложением. Все что нужно разработчику работающему с докером, это по сути сам докер и любимая среда разработки и ВСЕ!
Для полноты дальнейшего повествования все-таки придется бегло рассказать, что такое докер и его основные понятия.

Образ можно сравнить с файлом (может быть даже с исполняемым файлом программы), в котором содержится некоторая информация. Итак, докер следует рассматривать, как некоторую систему виртуализации и контейнеризации.
Одно из базовых понятий докера — это образ. Запущенный образ называется контейнером. Докер может выполнить запуск образа. Может быть запущено несколько контейнеров одного и того же образа.

Так что же содержится в образе?

К примеру, образ ubuntu. Может быть образ операционной системы. Для начала этих знаний нам будет достаточно. Может быть образ с базой данных, веб-сервером и php и практически с чем угодно.

Предполагается, что у читателя уже установлен сам docker и утилита docker-compose.

Начнем развертывание нашего окружения от простого к более сложному.

Урок №1. Установка Nginx

Попробуем для начала установить один лишь Nginx. Создадим docker-compose.yml следующего содержания:

version: '3.0' services: nginx: image: nginx ports: - 80:80

Далее выполняем команду docker-compose up -d в ответ должно появиться примерно следующее:

Creating network "lesson1_default" with the default driver
Creating lesson1_nginx_1 ... done

Вводим в адресной строке браузера http://localhost/ и нашему взору должно открыться приветствие «Welcome to nginx!». Если все так, вы на верном пути.

Что тут вообще происходит?

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

Разберем представленный файл:

  • version — В начале объявляется версия compose-файла. Вместо 3.0, можно было бы указать и 2.0. Меньше уже не поддерживается. От версии зависят опции в compose-файле, которые доступны для использования.
  • services — объявление сервисов
  • nginx — имя нашего сервиса, задается произвольно по своему усмотрению. В данном примере совпадает с названием образа.
  • image: nginx — имя используемого образа.
  • ports — директива объявляет «проброс» портов. 8080:80 — данная запись означает, что открытому порту 80 контейнера будет соответствовать порт 8080 на хостовой машине, на который запущен докер. В примере из файла, 80 порт в контейнере связан с 80 портом на вашем компьютере.

Более детально разберем объявление образа, директива image: nginx.

Объявленный образ nginx является одним из них. Главным хранилищем всех образов является Docker Hub там представлено множество различных готовых образов (Можно собирать и свои собственные, но об этом позже).

Если вы указываете соответствие 80:80, как и в указанном примере, то nginx будет доступен по адресу localhost:80 или просто localhost. Что касается «проброса» портов. Тогда сайт будет доступен по адресу localhost:8080. Если же 80 порт уже занят, то можно указать 8080:80. И соответственно, если вы вовсе забыли указать данную директиву ports, то порт будет доступен только внутри контейнера и nginx через браузер уже будет недоступен.

А как собственно с ним работать? Контейнер запущен.

Появляется вопрос. Установка Веб-сервера предполагает, что мы хотим с его помощью получать и просматривать html-страницы сайта. В этом нам помогут volumes Каким образом можно передать в контейнер какие-либо html-файлы?

volumes

Приведем наш docker-compose.yml к следующему виду:

version: '3.0' services: nginx: image: nginx ports: - 80:80 volumes: - ./html:/usr/share/nginx/html

Из нового тот появилась директива volumes, которая говорит, что происходит монтирование локальной папки ./html в контейнер по адресу /usr/share/nginx/html.

При монтирование папка по указанному адресу внутри контейнера заменяется папкой с локального компьютера.

Например, Hello from Docker! Чтобы все заработало, создадим папку html на одном уровне с файлом docker-compose.yml и добавим в нее файл index.html с произвольным текстом.

И выполняем пересоздание контейнера той же командой docker-compose up -d
Докер выполняет пересоздание контейнера.

Recreating lesson1_nginx_1 ... done

Проверяем в браузере получившийся результат. И видим: Hello from Docker! Все получилось.

Т.е. Важно заметить, что монтированная папка доступна для изменений в реальном времени. Эта важная функция и позволяет вести разработку через докер. если мы изменим текст в файле index.html или добавим новый файл в папку, то все эти изменения сразу же будут доступны внутри контейнера. Мы изменения вносим на своем компьютере в примонтированные файлы, папки и они сразу же отображаются и в контейнере докера.

Далее будет рассмотрен пример подключения php. На этом пока все.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть