Docker: как установить и использовать на Centos 7
Ниже рассказано, как провести установку платформы Docker и использовать ее на виртуальном сервере с операционной системой Centos 7.
Описание платформы
Для того, чтобы системные администраторы и разработчики могли заниматься разработкой, развертыванием и запуском приложений в контейнерах, которые находятся в изоляции друг с другом, была создана платформа Docker.
Контейнеризация – процесс, при котором приложения Линукс развертываются в контейнерах. Идея об изолировании приложений возникла еще при создании первых моделей ПК, а применяться на практике начала только недавно. Популярности контейнеризации поспособствовали высокие темпы развития ПО.
Итак, в чем главные отличия образа от контейнера:
- Под образом подразумевается некий исполняемый пакет, в который включены библиотеки, программный код, конфигурационные файлы, среда выполнения и ее переменные – все, что требуется для открытия приложения.
- Под контейнером подразумевается экземпляр образа. То есть один образ может вмещать в себя сразу несколько контейнеров.
Открыть образы можно в режиме «для чтения». Образы платформы делятся на два вида: дистрибутивы Линукс и сконфигурированное корпоративное ПО, подготовленное к запуску. Вид можно прописать в специальном файле Dockerfile. Он представляет собой файл текстового формата, который может понять только демон Docker. Файл создается для того, чтобы можно было запустить новый образ.
Обратите внимание: демоном называется компонент Docker, которому поручено выполнять трудные задачи создания, распределения и запуска изображений сразу после поступления команды от Docker-клиентов.
Открыть приложение на платформе можно в несколько шагов:
- Выбрать нужное приложение.
- Описать его в Dockerfile, указать среду для выполнения приложения.
- Сформировать общий файл – образ, который будет включать в себя набор библиотек (без общей системной) и исполняемые файлы. Все элементы войдут в контейнер и станут неизменными при дальнейшей работе.
- Запустить платформу, в которой уже указан образ приложения, использующегося для решения прикладной задачи.
Как установить Docker
Первым шагом станет обновление локальной базы пакетов. Для этого используется команда:
sudo yum check-update
Чтобы установить последнюю вышедшую версию платформы, потребуется сформировать обращение к официальному репозиторию. Через команду, описанную ниже, можно добавить необходимые репозитории и установить актуальную версию Docker:
curl -fsSL https://get.docker.com/ | sh
Обратите внимание: администраторам, которые собираются запускать платформу не от имени стандартного пользователя root, нужно будет прописать нового юзера. Внесение пользователя проходит сразу после загрузки группы Docker:
sudo usermod -aG docker <имя пользователя>
Полная команда будет выглядеть таким образом:
sudo usermod -aG docker cloud
По окончанию загрузку платформы на сервер потребуется запустить демона Docker:
sudo systemctl start docker
Необходимо убедиться, что запуск демона прошел гладко и никаких предупреждений об ошибках не обнаружено:
sudo systemctl status docker
Если все хорошо, в окне появится такой текст:
docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2018-04-26 14:06:06 MSK; 1min 56s ago
Docs: https://docs.docker.com
Main PID: 1601 (dockerd)
Tasks: 16
Memory: 40.0M
CGroup: /system.slice/docker.service
├─1601 /usr/bin/dockerd
└─1605 docker-containerd --config /var/run/docker/containerd/conta...
Как работать с образами
Команды платформы обладают своим синтаксисом, в котором за названием следуют разные опции и аргументы:
docker <option> <command> <arguments>
Инструкцию по доступным командам и их описанию можно запустить через короткую команду:
docker
Все образы записаны в Docker Hub. Каждый пользователь сможет вносить свои образы в данный реестр. Многие дистрибутивы Линукс, системы управления базами данных и приложения создают собственные образы в Docker Hub.
Может ли пользователь доставать и вносить образы в реестр проверяется такой командой:
docker run hello-world
При положительном ответе на экране возникнет следующий текст:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Для выполнения поиска конкретного образа используется такой синтаксис команды:
docker search <имя>
К примеру, чтобы найти образ nginx, следует написать:
docker search nginx
В качестве результата на экран высветятся все доступные пользователю образы:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 8341 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1328 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 547 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… 364 [OK]
kong Open-source Microservice & API Management la… 184 [OK]
webdevops/php-nginx Nginx with PHP-FPM 102 [OK]
Произвести загрузку выбранного образа можно при помощи строчки:
docker pull <имя>
К примеру, для образа nginx синтаксис будет выглядеть:
docker pull nginx
Выполненная команда выведет на экран загрузку образа:
Using default tag: latest
latest: Pulling from library/nginx
f2aa67a397c4: Downloading [===============> ] 7.13MB/22.5MB
3c091c23e29d: Downloading [================> ] 7.091MB/22.11MB
4a99993b8636: Download complete
По окончанию процесса образ будет загружен на виртуальный сервер. Для его запуска следует воспользоваться опцией run:
docker run <имя>
Опция images продемонстрирует образы, которые загружены на сервер:
docker images
Результатом будет служить небольшая таблица со списком:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae513a47849c 8 days ago 109MB
hello-world latest e38bc07ac18e 3 weeks ago 1.85kB
Как работать с контейнерами
Нижеописанная команда поможет на базе образа image сделать новый контейнер example:
docker run --name <example> -d <image>
Обратите внимание: для получения интерактивного доступа к контейнерной оболочке shell используются ключи -i и -t.
Создать контейнер example на базе nginx можно следующей командой:
docker run --name example -d nginx
Опция ps продемонстрирует контейнеры, которые были запущены:
docker ps
Обратите внимание: для просмотра всех существующих контейнеров можно воспользоваться ключом -l.
В результате появится:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8f970efcc91 nginx "nginx -g 'daemon of…" 15 seconds ago Up 13 seconds 80/tcp example
Команда для запуска контейнера в фоновом режиме:
docker container start <имя_или_id>
К примеру:
docker container start example
Если контейнер функционирует фоново, зайти в него можно при помощи команды:
sudo docker exec -i -t <имя_или_id> /bin/bash
Как это выглядит на практике:
sudo docker exec -i -t b8f970efcc91 /bin/bash
root@b8f970efcc91:/data#
Команда exit позволит выйти из контейнера, а stop – остановит его работу:
docker container stop <имя_или_id>
Как выглядит полная команда остановки:
docker container stop example
Для удаления следует воспользоваться опцией rm:
docker rm -f <имя_или_id>
К примеру:
docker rm -f example
Обратите внимание: чтобы удалить открытые контейнеры без необходимости предварительно их останавливать, следует использовать ключ -f.
Для того, чтобы запустить nginx через определенный порт (для примера берем порт 80) и убедиться в его работоспособности, подойдет следующая команда:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save
Перед выполнением нужно проверить, что в настройках файрволла открыл доступ к порту 80.
Запуск контейнера example:
docker run --name example -d -p 80:80 nginx
Далее в адресную строку браузера нужно вписать адрес сервера, указав порт. В результате появится следующая страница: