Разработка под 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.

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

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

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

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

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.

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

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

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

Recreating lesson1_nginx_1 ... done

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

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

На этом пока все. Далее будет рассмотрен пример подключения php.
Источник: https://habr.com/ru/post/459972/


Интересные статьи

Интересные статьи

Мы наблюдаем общество, которое все больше зависит от машин, но при этом использует их все неэффективнее. — Douglas Rushkoff Эта фраза должна служить мотивацией для каждого программиста. Ведь и...
Разработчики приложений, работающие на Java, при использовании интерфейса JMS, часто предпочитают работать со Spring Framework. Spring может упростить написание кода новых приложений, предост...
Ссылка на часть 1 В этой части мы рассмотрим, как AGC организован с точки зрения программиста. Список литературы и источников приведён в конце первой части статьи. Материал этой части основан ...
Многие современные электронные книги работают под операционной системой Android, что позволяет, помимо использования штатного программного обеспечения электронных книг, устанавливать и дополнител...
Это вторая статья из цикла про то, как мы в Citymobil увеличивали стабильность сервиса (первую можете почитать здесь). В этой статье я углублюсь в конкретику разбора аварий. Но перед этим я о...