Docker: как установить и использовать на Centos 7

Ниже рассказано, как провести установку платформы Docker и использовать ее на виртуальном сервере с операционной системой Centos 7.

Описание платформы

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

Контейнеризация – процесс, при котором приложения Линукс развертываются в контейнерах. Идея об изолировании приложений возникла еще при создании первых моделей ПК, а применяться на практике начала только недавно. Популярности контейнеризации поспособствовали высокие темпы развития ПО.

Итак, в чем главные отличия образа от контейнера:

  1. Под образом подразумевается некий исполняемый пакет, в который включены библиотеки, программный код, конфигурационные файлы, среда выполнения и ее переменные – все, что требуется для открытия приложения.
  2. Под контейнером подразумевается экземпляр образа. То есть один образ может вмещать в себя сразу несколько контейнеров.

Открыть образы можно в режиме «для чтения». Образы платформы делятся на два вида: дистрибутивы Линукс и сконфигурированное корпоративное ПО, подготовленное к запуску. Вид можно прописать в специальном файле Dockerfile. Он представляет собой файл текстового формата, который может понять только демон Docker. Файл создается для того, чтобы можно было запустить новый образ.

Обратите внимание: демоном называется компонент Docker, которому поручено выполнять трудные задачи создания, распределения и запуска изображений сразу после поступления команды от Docker-клиентов.

Открыть приложение на платформе можно в несколько шагов:

  1. Выбрать нужное приложение.
  2. Описать его в Dockerfile, указать среду для выполнения приложения.
  3. Сформировать общий файл – образ, который будет включать в себя набор библиотек (без общей системной) и исполняемые файлы. Все элементы войдут в контейнер и станут неизменными при дальнейшей работе.
  4. Запустить платформу, в которой уже указан образ приложения, использующегося для решения прикладной задачи.

Как установить 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

Далее в адресную строку браузера нужно вписать адрес сервера, указав порт. В результате появится следующая страница:

Welcome to Nginx