Установка и использование Docker на Centos 7

В инструкции описан процесс установки и использования Docker на виртуальных серверах под управлением операционной системы Centos 7.

Что это такое?

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

Для работы с Docker необходимо понимать отличия между терминами образ и контейнер:

  • образ представляет собой исполняемый пакет, включающий все необходимое для запуска приложения - программный код, среду выполнения, библиотеки, переменные среды и файлы конфигурации;
  • контейнер запускается из образа и является его экземпляром, т.е. из одного образа может быть запущено несколько контейнеров.

О контейнерах подробно написано в нашем блоге: В чём суть контейнеров приложений?

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

Dockerfile - это текстовый файл с инструкциями, написанными в формате, понятном демону Docker. Чтобы создать собственный образ, необходимо создать свой Dockerfile. После того, как Dockerfile подготовлен, можно выполнить сборку для создания соответствующего образа.

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

В общем случае запуск приложения в Docker выглядит так:

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

Установка

Прежде всего следует обновить локальную базу пакетов:

sudo yum check-update

Для установки самой последней и стабильной версии Docker необходимо обратиться к официальному репозиторию Docker. Следующая команда добавит репозиторий, загрузит последнюю версию ПО и установит его:

curl -fsSL https://get.docker.com/ | sh

Примечание: если вы собираетесь использовать Docker не от имени пользователя 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

Команда docker имеет следующий синтаксис, где после названия команды могут быть перечислены различные опции, команды и аргументы:

docker <option> <command> <arguments>

Чтобы вывести на экран все доступные команды и краткую информацию о них, просто используйте команду docker:

docker

По умолчанию образы извлекаются из реестра Docker Hub, дочернего проекта Docker. Любой пользователь может создавать и размещать свои образы на Docker Hub, поэтому большинство приложений, СУБД и дистрибутивов Linux имеют свои образы на 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 <имя>

Например:

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

Работа с контейнерами в Docker

Чтобы создать контейнер с именем example на основе образа image, используйте следующую команду:

docker run --name <example> -d <image>

Примечание: комбинация ключей -i и -t дает интерактивный доступ к оболочке shell в контейнере.

Пример создания контейнера 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.

Чтобы остановить созданный контейнер, используйте следующую команду:

docker container stop <имя_или_id>

Например:

docker container stop example

Чтобы удалить контейнер используйте опцию rm:

docker rm -f <имя_или_id>

Например:

docker rm -f example

Примечание: ключ -f позволяет удалять запущенные контейнеры без их предварительной остановки.

Для более подробного примера запустим приложение nginx на конкретном порту, например 80, и убедимся, что все работает. Не забудьте настроить firewall и открыть данный порт на сервере:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save

Запускаем контейнер с именем example:

docker run --name example -d -p 80:80 nginx

В адресной строке браузера переходим по адресу вашего сервера с указанием порта, на изображении показан ожидаемый результат:

Welcome to Nginx


Средняя оценка: 5,0, всего оценок: 1