Установка и настройка Docker на OC Ubuntu
09:08, 09.02.2023
Современная инфраструктура не существует без микросервисов и контейнеров. Эти технологии отлично показывают себя, когда требуется запустить приложение в процессах, изолированных от ресурсов. Сервис Docker стал именем нарицательным, когда дело доходит до управления контейнеризации. Это приложение, которое упрощает управление процессами приложений в контейнерах.
Что представляет собой контейнер? Это структура, которая содержит внутри приложения со всеми необходимыми библиотеками и зависимости. Благодаря этому можно переносить нужные пакеты в другие дистрибутивы без необходимости создавать схожее окружение. В отличие от аппаратной виртуализации, контейнеры легкие для переноса, требуют меньше ресурсов. Но самое главное — в контейнерах полностью отсутствует зависимость от внешнего дистрибутива.
В статье мы разберемся в работе Docker Community Edition на примере дистрибутива Ubuntu 20.04. Мы опишем принцип взаимодействия с контейнерами и образами на конкретных примерах, разберем, что представляет собой Docker Compose.
Рекомендованные характеристики для железа
Что касается рекомендаций к «железу», то Docker не имеет хардверных требований. Учитывая, что это утилита для виртуализации, все зависит от масштаба приложений, что будут развернуты внутри контейнеров. Существует одно требование к «машинке» — поддержка виртуализации.
Прежде чем приступить к установке, предлагаем проверить, отвечает ли ваше окружение минимальным требованиям системы:
- 64-битная архитектура;
- ядро версии 3.10.
Настройка Docker в Ubuntu
Ранее было указано, что для настройки Docker мы воспользуемся сервером Ubuntu.
Установка Docker
Нам понадобится утилита последней версии. Можно не проверять репозиторий Ubuntu, так как там не всегда размещают самый свежий релиз программного обеспечения.
Предлагаем сразу обратиться к официальному реестру Docker. Для этого необходимо добавить новый пакетный источник. Чтобы убедиться, что будут загружены рабочие файлы, понадобится загрузка ключа GPG. После проделанных манипуляций можно установить пакет.
Сначала обновляем список пакетов на устройстве:
$ sudo apt update
Далее потребуется инсталлировать программное обеспечение, предназначенное для корректной работы apt по протоколу HTTPS:
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
Опционально могут понадобиться дополнительное ПО для ядра. Это необходимо, чтобы файловая система aufs получила возможность работать с контейнерами утилиты. Так вы сможете оперативно выявлять изменения и создавать Snapshot. Это образы, доступные только для чтения.
$ sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual
Добавляем ключ GPG для репозитория Docker:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Последующие три команды необходимы для добавления репозитория ПО непосредственно в Ubuntu и дальнейшей установки Docker в дистрибутив.
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" $ sudo apt update && apt-cache policy docker-ce $ sudo apt install -y docker-ce
В отдельных случаях при запуске Docker можно столкнуться с невозможностью подключения к сокету. Чтобы этого избежать, добавьте пользователя в группу Docker. Используем следующую команду:
$ sudo usermod -aG docker $(whoami)
После этих действий ПО будет установлено, запущено и добавлено в автозагрузку. Дополнительно проверить работоспособность можно следующей командой:
$ sudo systemctl status docker
Если daemon работает корректно, в строке появится похожее сообщение:
$Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup: /system.slice/docker.service
└─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
На этом этапе установка завершена, а утилита готова к работе. Для полноценного использоваться Docker, понадобится вспомогательный инструмент под названием Docker Compose.
Установка утилиты Docker Compose
Что представляет собой это программное обеспечение? Compose — это инструмент, который помогает запускать несколько разных контейнеров. Утилита использует определения служб, чтобы создавать полностью настраиваемые многоконтейнерные среды. Они могут совместно пользоваться сетью и пространством внешней памяти. Выполните следующую командную последовательность:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Эта команда устанавливает правильные разрешения, чтобы исполнять команды docker-compose:
$ sudo chmod +x /usr/local/bin/docker-compose
Проверяем актуальность ПО и подтверждаем успешную инсталляцию:
$ docker-compose --version
Если мы видим такой вывод:
Output
docker-compose version 1.29.2, build 5becea4c
Значит, процесс прошел успешно.
Особенности Docker
Команда docker используется с опциями и подкомандами с дополнительными аргументами. Рассмотрим схематический синтаксис:
docker [опции] [команда] [аргументы]
Просмотреть таблицу всех команд можно с помощью команды:
$ docker
Откроется таблица:
- attach Прикрепить локальные стандартные потоки ввода, вывода и ошибок к работающему контейнеру
- build Создать образ из Docker-файла
- commit Создать новый образ из изменений контейнера
- cp Копировать файлы/папки между контейнером и локальной файловой системой
- create Создать новый контейнер
- diff Проверять изменения файлов или каталогов в файловой системе контейнера
- events Получить события реального времени с сервера
- exec Выполнить команду в запущенном контейнере
- export Экспортировать файловую систему контейнера в виде tar-архива
- history Показать историю образа
- images Список образов
- import Импортировать содержимое из tar-архива для создания образа файловой системы
- info Отображение общесистемной информации
- inspect Вернуть низкоуровневую информацию об объектах
- docker kill Убить один или несколько запущенных контейнеров
- load Загрузить образ из tar-архива или STDIN
- login Вход в реестр
- docker logout Выход из реестра
- docker logs Получить логи контейнера
- pause Приостановить все процессы в одном или нескольких контейнерах
- port Список сопоставлений портов или конкретное сопоставление для контейнера
- ps Вывести список контейнеров
Работа с образами Docker
Невозможно использовать контейнер без скачанного Docker Image. Если не вносились изменения, утилита берет образ в официальном хабе. Он носит название Docker Hub. Здесь находятся все образы, которые поддерживаются разработчиками утилиты. Размещать образы в реестре Hub могут все желающие. Поэтому популярные приложения, дистрибутивы Linux и апплетов уже имеют подготовленные образы в репозитории.
Введем команду для проверки возможности загружать Docker Image во внутреннюю память машины:
$ docker run hello-world
Сначала утилита проверит, есть ли указанный образ в памяти. Так как Docker ничего не обнаружит, он скачает необходимый образ, после чего запустит его в контейнере:
$Output
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
…
Это сообщение свидетельствует, что процесс загрузки и запуска нужного образа работает без ошибок.
Чтобы найти требуемый Docker Image в Hub, используйте подкоманду search и название необходимого образа. Скрипт начнет поиск в содержимом Docker Hub, покажет все результаты, которые соответствуют заданным параметрам. Обратите внимание на столбец OFFICIAL. Если напротив образа в этом столбце находится строчка OK, значит, перед вами официальный образ от команды создателей, а не форк.
Для скачивания достаточно набрать подкоманду pull. Допустим, это образ Ubuntu. В таком случае мы вводим:
$ docker pull ubuntu
Этот вывод свидетельствует, что процесс прошел успешно:
$ Output
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
Таблицу с установленными образами можно просмотреть командой:
$ docker images
Запуск командной оболочки контейнера
Для запуска контейнера применяется команда RUN. Рассмотрим опции, которые можно применять вместе с RUN:
- -d — запускает контейнер в фоновом режиме;
- -t — связь tty с контейнером для ввода и вывода;
- -e — устанавливает переменные окружения для принятия лицензионного соглашения и изменения начальной конфигурации;
- --name — присвоение имени контейнеру;
- -p — публикация контейнерных портов на хосте, чтобы обеспечить удаленный доступ к DSE, OpsCenter и Studio;
- -i — интерактивный доступ к командному процессору контейнера
- -v — привязка каталога на локальном хосте к тому DSE для управления конфигурацией или сохранения данных;
- --link — связь контейнера DSE с OpsCenter, Studio с DSE.
Используем команду:
$ docker run -it ubuntu
Мы запустили образ Ubuntu с доступом к командному процессору в интерактивном режиме. После этого мы переходим в окружение контейнера, в консоли отобразится его идентификатор. Эта информация нам понадобится позже, когда нужно будет указать контейнер для удаления.
Внутри контейнера доступны все привычные команды. Учитывая, что образ не содержит большинство нужных файлов. Поэтому потребуется обновить репозиторий:
$ apt-get update
Обращаем внимание, что команда sudo не используется. Так как работа ведется от имени пользователя с правами суперпользователя, нет нужды вписывать команду sudo. Установим простую утилиту Dialog:
$ apt-get install -y dialog
Сохранение параметров
Внутри контейнера доступны любые действия, можно создавать файлы, устанавливать приложения или удалять данные — все действия будут актуальны для запущенного контейнера. Когда контейнер будет удален, все изменения также исчезнут. Если нужно сохранить параметры, используйте команду commit. Она создаст модифицированный контейнер. Для начала нам понадобится список работающих контейнеров:
$ docker ps
Здесь нам понадобится идентификатор, выполняем эту команду:
$ docker commit -m "какие изменения добавлены" -a "имя автора" container_id repository/название нового образа
По завершению процесса модифицированный контейнер сохранится в памяти. Чтобы его найти, запустим список образов:
$ docker commit -m "какие изменения добавлены" -a "имя автора" container_id repository/название нового образа
Команды запущенных контейнеров
Рассмотрим список команд для управления:
- start — запуск контейнера, который был остановлен;
- stop — противоположное значение, остановка контейнера, который запущен;
- rm — удаление контейнера.
Чтобы команда работала корректно, не обязательно указывать идентификатор. Можно использовать имя контейнера, оно доступно в отдельном столбце
Пример:
$ docker start d9b100f2f636 $ docker start sharp_volhard
Управление контейнерами Docker
Команда списка контейнеров позволяет запускать опции:
- -a. Отображает список всех контейнеров, доступных локально.
- -l. Выводит последний созданный контейнер.
Подведение итогов
Docker — главная утилита для запуска и управления контейнерами. Она достаточно легкая в освоении, начинающий пользователь может без труда разобраться во всех особенностях. Docker существенно ускоряет разработку, упрощает перенос системы с одного сервера на другой и позволяет работать в безопасной среде.