Сегодня речь в статье пойдет о Docker. Все, кто хоть как-то касаются сферы IT слышали про Docker, но не все знают, что же это такое. Итак, сегодня мы простыми словами расскажем о том, что такое Docker, чем это отличается от виртуализации, покажем подробный процесс инсталляции на CentOS 7 и установим просто графический интерфейс Portainer, для управления контейнерами. Также немного коснемся команд для использования Docker.
Что такое Docker?
Docker - это платформа, которая может “упаковать” приложение, его зависимости, middleware и так далее в так называемый “контейнер”, после чего у вас появится возможность развернуть данный контейнер на любом сервере, на котором установлен Docker - причем буквально за доли секунды, одной командой.
Благодаря этим решается сразу несколько задач - в первую очередь, процесс запуска приложения на сервере многократно упрощается, во вторую - какие-либо баги в контейнеризированном приложении никак не повлияют на сам сервер, также как и специфические настройки сервера не повлияют на приложение.
И хоть кажется, что Docker выглядит и работает как виртуальная машина, на самом деле они очень разные: виртуальная машина эмулирует сервер целиком, включая все аппаратные ресурсы, а контейнер изолирует приложение, процессы, юзеров и файловую систему. При этом все контейнеры используют общее Linux ядро хоста и запускается в нативном режиме только на Linux машинах, но зато на одной машине можно запустить примерно в 5-6 раз больше контейнеров, чем виртуальных машинах. Ниже на схеме показаны различия:
Установка Docker
Как было упомянуто в начале статьи, устанавливать Докер мы будем на CentOS 7 - процесс установки крайне простой и быстрый.
Итак, сначала необходимо установить с помощью yum несколько пакетов:
yum install -y yum-utils device-mapper-persistent-data Lvm2
Далее необходимо установить stable репозиторий для Докера, который вам понадобится, даже если вы захотите устанавливать билды из edge и test репозиториев:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Затем устанавливаем сам Docker:
yum install docker-ceИ, наконец, запускаем Docker:
systemctl start docker
Проверяем, что Docker запустился и работает в два шага:
systemctl status docker
Вы должны увидеть следующий вывод:
После этого пробуем развернуть контейнер hello-world:
docker run hello-world
Если все шаги были выполнены корректно, то на экране должно появится следующее:
Установка Portainer
Portainer - это очень удобный графический интерфейс для управления Docker или Docker Swarm. Устанавливается он практически в одно действие - так как сам точно также является контейнером. Итак:
Создаем разметку для Portainer:
docker volume create portainer_data
И затем запускаем сам контейнер:
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
После чего заходите на сетевой адрес вашего сервера на порт 9000, и вы должны увидеть окно с предложением установить пароль администратора:
Далее выбираем где находится наш Докер - на этом же сервере, или на другом (в нашем случае - Local) и кликаем Connect.
После чего вас встретит красивый дэшборд:
Я предлагаю вам попробовать разобраться со всем многообразием дэшборда самим и задавать нам вопросы в комментариях - а мы пока продемонстрируем несколько фич.
Итак, сначала кликните на Containers - вы увидите все имеющиеся контейнеры с информацией о них:
Как вы можете видеть, у нас на данный момент запущен только один контейнер - Portainer, и доступ к нему открыт по порту 9000 (столбец Published Ports), и адрес во внутренней сети Docker - 172.17.0.2.
Далее кликните на App Templates в меню справа - и вы увидите весь список приложений, который можно запустить одним кликом:
Зайдем во вкладку Httpd:
Сперва, назовите данный контейнер как-нибудь - мы назвали test-merionet. Затем, можете кликнуть на Show advanced options и вы увидите возможность выбора какой порт, протокол и том будет использоваться данным контейнером. Затем просто нажмите на Deploy the container.
Пройдет буквально несколько секунд и вас должно перекинуть обратно на вкладку Containers, но, с уже вторым запущенным контейнером:
Отсюда вы увидите, что httpd сервер доступен на 32768 порту. Итак, пробуем зайти на данный сервер через браузер:
Вы должны будете увидеть надпись It works! так же как на скриншоте выше - дальнейшую настройку httpd мы пока оставляем за кадром.
Донастройка Docker и полезные команды
Итак, вы уже познакомились с Docker и получили представление о его возможностях. Ниже в тексте мы опишем действия, которые также необходимо сделать после установки и некоторые команды, без которых буквально трудно жить, если активно используешь Докер.
Первым делом, настройте автозапуск для сервиса Docker:
systemctl enable docker
Затем, вы можете проверить запущенные контейнеры в консоли (на случай если вам не нравится идея использования GUI) с помощью команды
docker ps
Теперь немного о командах и синтаксисе - будем показывать на примерах:
Допустим, нам нужно запустить CentOS и выполнить в нем команду echo:
docker run centos echo “Hello from Merion Networks”
Запустить CentOS и подключиться к его терминалу:
docker run -t-i centos /bin/bash
Можете сразу указать нужные порты с помощью ключа -p и запустить контейнер в бэкграунде с помощью ключа --d:
docker run -p 80:80 --d nodejs-app
Итак, совсем немного об опциях для команды docker run
- полный список можно найти по ссылке https://docs.docker.com/engine/reference/commandline/run/#description
- -p - открываем конкретные порты через пробел - порт доступа и порт на контейнере, к примеру
docker run -p 9876:80 %imagename%
- -P - открываем сразу все порты;
- -t - подключение к терминалу контейнера;
- -i - интерактивный режим, STDIN все время будет открыт;
Обязательно посетите Docker Hub, так как там можно найти кучу интересных контейнеров с примерами их установки и доступом к Docker-файлу, это что-то вроде GitHub только для контейнеров.
Заключение
На этом всё, спасибо за внимание! Пишите в комментариях, что еще вам интересно узнать про Докер - в следующих статьях мы покроем такие темы как: создание своего собственного Докер-файла и образа, как подключить папку файловой системы с вашего хоста, интересное на Docker Hub и так далее.