Введение
Docker — это приложение, которое позволяет легко и просто запускать процессы приложений в контейнере, которые подобны виртуальным машинам, только более портативны, более ресурсоемки и более зависимы от операционной системы хоста. Подробное представление о различных компонентах контейнера Docker можно найти в статье «Экосистема Docker: введение в общие компоненты».
В этом руководстве вы узнаете, как установить и использовать его в существующей установке Rocky Linux 9.
Предварительные условия
- Сервер Rocky Linux 9 с пользователем без полномочий root с привилегиями
sudo
, настроенным с помощью Руководства по первоначальной установке для Rocky Linux 9, объясняет, как это настроить.
Все команды в этом руководстве следует запускать от имени пользователя без полномочий root. Если для команды требуется root-доступ, ей будет предшествовать sudo
. Руководство по первоначальной установке Rocky Linux 9 объясняет, как добавлять пользователей и предоставлять им доступ sudo.
Шаг 1 — Установка Докера
Установочный пакет Docker, доступный в официальном репозитории Rocky Linux 9, может быть не последней версией. Чтобы получить последнюю и лучшую версию, установите Docker из официального репозитория Docker. В этом разделе показано, как это сделать.
Но сначала давайте обновим базу данных пакетов:
1 |
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf проверка обновления</li></ol> |
Затем добавьте официальный репозиторий Docker:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</li></ol>
Хотя в Docker нет специального репозитория Rocky Linux, Rocky Linux основан на CentOS и может использовать тот же репозиторий. После добавления репозитория установите Docker, который состоит из трех пакетов:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf <span class="token function">установить</span> docker-ce docker-ce-cliContainerd.io</li></ol>
После завершения установки запустите демон Docker:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> systemctl запустить <span class="token function">докер</span></li></ol>
Убедитесь, что он работает:
1
<ol><li data-prefix="$"> <span class="token function">Докер</span> состояния <span class="token function">sudo</span> systemctl</li></ol>
Вывод должен быть похож на следующий, показывая, что служба активна и работает:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ● docker.service — ядро контейнера приложений Docker Загружено: загружено (/lib/systemd/system/docker.service; включено; предустановка поставщика: включено) Активно:<mark> активный (работающий)</mark> с воскресенья 01.05.2016 06:53:52 CDT; 1 неделю 3 дня назад Документы: https://docs.docker.com Основной PID: 749 (докер)
Наконец, убедитесь, что он запускается при каждой перезагрузке сервера:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> systemctl <span class="token builtin class-name">включить</span> <span class="token function">докер</span></li></ol>
Установка Docker теперь дает вам не только службу Docker (демон), но и утилиту командной строки docker
или клиент Docker. Позже в этом руководстве мы рассмотрим, как использовать команду docker
.
Шаг 2. Выполнение команды Docker без Sudo (необязательно)
По умолчанию для запуска команды docker
требуются права root — то есть вам необходимо добавить к команде префикс sudo
. Его также может запустить пользователь из группы docker , которая автоматически создается во время установки Docker. Если вы попытаетесь запустить команду docker
без префикса sudo
или без участия в группе docker, вы получите такой вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> docker: невозможно подключиться к демону Docker. Работает ли на этом хосте демон докера? См. «docker run --help».
Если вы не хотите вводить sudo
при каждом запуске команды docker
, добавьте свое имя пользователя в группу docker:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> <span class="token function">usermod</span> <span class="token parameter variable">-aG</span> <span class="token function">docker</span> <span class="token variable"><span class="token variable">$(</span> <span class="token function">whoami</span> <span class="token variable">)</span></span></li></ol>
Чтобы включить это изменение, вам нужно будет выйти из Droplet и снова войти под тем же пользователем.
Если вам нужно добавить пользователя в группу docker
, под которым вы не вошли в систему, явно объявите это имя пользователя, используя:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> <span class="token function">usermod</span> <span class="token parameter variable">-aG</span> <span class="token function">докер</span><mark> имя пользователя</mark></li></ol>
В оставшейся части этой статьи предполагается, что вы запускаете команду docker
от имени пользователя в группе пользователей docker. Если вы решите не делать этого, добавьте к командам sudo
.
Шаг 3 — Использование команды Docker
Когда Docker установлен и работает, пришло время познакомиться с утилитой командной строки. Использование docker
заключается в передаче ему цепочки параметров и подкоманд, за которыми следуют аргументы. Синтаксис принимает следующую форму:
1
<ol><li data-prefix="$"> <span class="token function">docker</span> <span class="token punctuation">[</span> опция <span class="token punctuation">]</span> <span class="token punctuation">[</span> команда <span class="token punctuation">]</span> <span class="token punctuation">[</span> аргументы <span class="token punctuation">]</span></li></ol>
Чтобы просмотреть все доступные подкоманды, введите:
1
<ol><li data-prefix="$"> <span class="token function">докер</span></li></ol>
Начиная с Docker 1.11.1, полный список доступных подкоманд включает в себя:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Attach Прикрепить к работающей сборке контейнера. Создать образ из фиксации Dockerfile. Создать новый образ на основе изменений контейнера. cp Копировать файлы/папки между контейнером и локальной файловой системой. Create Создать новый контейнер. diff. Проверять изменения в событиях файловой системы контейнера. Получать информацию в реальном времени. события с сервера exec Запуск команды в работающем контейнере экспорт Экспорт файловой системы контейнера в виде истории tar-архива Показать историю изображений изображений Импорт изображений списка Импорт содержимого из архива для создания информации об образе файловой системы Отображение общесистемной информации. Проверка Возвратить низкоуровневую информацию об уничтожении контейнера или образа. Уничтожить запущенную загрузку контейнера. Загрузить образ из tar-архива или войти в систему STDIN. Войти в реестр Docker. Выход из журналов реестра Docker. Получить журналы сети контейнера. Управление сетями Docker. пауза Приостановить все процессы в порту контейнера. Список сопоставлений портов или конкретное сопоставление для КОНТЕЙНЕРА. ps. Список контейнеров. Pull. Извлечь образ или репозиторий из реестра. Push. Отправить образ или репозиторий в реестр. Переименование. Переименование контейнера. Перезапуск перезапуска контейнера rm. Удалить один или несколько контейнеров rmi Удалить один или несколько изображений. Запустить Запустить команду в новом контейнере. Сохранить. Сохранить одно или несколько изображений в tar-архиве. Поиск. Поиск изображений в Docker Hub. Запустить. Запустить статистику одного или нескольких остановленных контейнеров. Отобразить живой поток контейнера. (s) статистика использования ресурсов остановить Остановить запущенный тег контейнера Пометить изображение в репозитории вверху Отобразить запущенные процессы контейнера снять с паузы Снять с паузы все процессы в контейнере обновить обновить конфигурацию одной или нескольких версий контейнеров Показать том с информацией о версии Docker Управление Docker тома ждут Блокировать, пока контейнер не остановится, а затем распечатать его код выхода
Чтобы просмотреть переключатели, доступные для конкретной команды, введите:
1
<ol><li data-prefix="$"> <span class="token function">докер</span><mark> docker-подкоманда</mark> <span class="token parameter variable">--помощь</span></li></ol>
Для просмотра общесистемной информации используйте:
1
<ol><li data-prefix="$"> информация <span class="token function">докера</span></li></ol>
Шаг 4 — Работа с образами Docker
Контейнеры Docker запускаются из образов Docker. По умолчанию он извлекает эти образы из Docker Hub, реестра Docker, которым управляет Docker, компания, стоящая за проектом Docker. Любой может создавать и размещать свои образы Docker в Docker Hub, поэтому большинство приложений и дистрибутивов Linux, которые вам понадобятся для запуска контейнеров Docker, содержат образы, размещенные в Docker Hub.
Чтобы проверить, можете ли вы получить доступ к изображениям из Docker Hub и загрузить их, введите:
1
<ol><li data-prefix="$"> <span class="token function">Докер</span> запускает hello-world</li></ol>
Вывод, который должен включать следующее, должен указывать на то, что Docker работает правильно:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Привет от Докера. Это сообщение показывает, что ваша установка работает правильно. ...
Вы можете искать изображения, доступные в Docker Hub, с помощью команды docker
с подкомандой search
. Например, чтобы найти образ Rocky Linux, введите:
1
<ol><li data-prefix="$"> поиск <span class="token function">докера</span> в Rockylinux</li></ol>
Скрипт просканирует Docker Hub и вернет список всех изображений, имена которых соответствуют строке поиска. В этом случае вывод будет похож на этот:
1
<div class="secondary-code-label" title="Выход"> Выход</div> НАЗВАНИЕ ОПИСАНИЕ STARS OFFICIAL АВТОМАТИЧЕСКИЕ centos Официальная сборка CentOS. 2224 [ОК] jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22 [ОК] jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M ... 17 [ОК]million12/centos-supervisor Базовая CentOS-7 с программой запуска супервизора, ч... 11 [ОК] nimmis/java-centos Это образы докеров CentOS 7 с различным... 10 [ОК] torusware /speedus-centos Всегда обновляемый официальный образ докера CentOS... 8 [OK] nickistre/centos-lamp LAMP при настройке Centos 3 [OK] ...
В столбце OFFICIAL OK указывает на изображение, созданное и поддерживаемое компанией, стоящей за проектом. Определив изображение, которое хотите использовать, вы можете загрузить его на свой компьютер с помощью подкоманды pull
, например:
1
<ol><li data-prefix="$"> <span class="token function">Докер</span> вытащить RockyLinux</li></ol>
После загрузки образа вы можете запустить контейнер, используя загруженный образ, с помощью подкоманды run
. Если образ не был загружен при запуске docker
с помощью подкоманды run
, клиент Docker сначала загрузит образ, а затем запустит с его помощью контейнер:
1
<ol><li data-prefix="$"> <span class="token function">Докер</span> запускает Rockylinux</li></ol>
Чтобы просмотреть изображения, загруженные на ваш компьютер, введите:
1
<ol><li data-prefix="$"> изображения <span class="token function">докера</span></li></ol>
Вывод должен выглядеть примерно так:
1
[secondary_lable Output] REPOSITORY TAG IMAGE ID CREATED SIZE rockylinux latest 778a53015523 5 weeks ago 196.7 MB hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
Как вы увидите далее в этом руководстве, образы, которые вы используете для запуска контейнеров, можно модифицировать и использовать для создания новых образов, которые затем можно загрузить (технический термин — push) в Docker Hub или другие реестры Docker.
Шаг 5 — Запуск Docker-контейнера
Контейнер hello-world
который вы запустили на предыдущем шаге, является примером контейнера, который запускается и завершает работу после отправки тестового сообщения. Однако контейнеры могут быть гораздо более полезными, и они могут быть интерактивными. В конце концов, они похожи на виртуальные машины, только более ресурсоемкие.
В качестве примера давайте запустим контейнер, используя последний образ Rocky Linux. Комбинация ключей -i и -t дает вам интерактивный доступ к контейнеру через оболочку:
1
<ol><li data-prefix="$"> <span class="token function">docker</span> run <span class="token parameter variable">-it</span> rockylinux</li></ol>
Ваша командная строка должна измениться, чтобы отразить тот факт, что вы сейчас работаете внутри контейнера, и принять следующий вид:
1
<div class="secondary-code-label" title="Выход"> Выход</div> [root@59839a1b7de2 /]#
Important: обратите внимание на идентификатор контейнера в командной строке. В приведенном выше примере это 59839a1b7de2
.
Теперь вы можете запустить любую команду внутри контейнера. Например, давайте установим сервер MariaDB в работающий контейнер. Нет необходимости добавлять к какой-либо команде префикс sudo
, поскольку вы работаете внутри контейнера с привилегиями root:
1
<ol><li data-prefix="$"> dnf <span class="token function">установить</span> сервер MariaDB</li></ol>
Шаг 6. Внесение изменений в контейнере в образ Docker
При запуске образа Docker вы можете создавать, изменять и удалять файлы так же, как на виртуальной машине. Внесенные вами изменения будут применяться только к этому контейнеру. Вы можете запустить и остановить его, но как только вы уничтожите его с помощью команды docker rm
, изменения будут потеряны навсегда.
В этом разделе показано, как сохранить состояние контейнера в виде нового образа Docker.
После установки сервера MariaDB внутри контейнера Rocky Linux у вас теперь есть контейнер, работающий на основе образа, но этот контейнер отличается от образа, который вы использовали для его создания.
Чтобы сохранить состояние контейнера в виде нового образа, сначала выйдите из него:
1
<ol><li data-prefix="$"> <span class="token builtin class-name">Выход</span></li></ol>
Затем зафиксируйте изменения в новом экземпляре образа Docker, используя следующую команду. Ключ -m предназначен для сообщения о фиксации, которое поможет вам и другим узнать, какие изменения вы внесли, а -a используется для указания автора. Идентификатор контейнера — это тот, который вы указали ранее в руководстве при запуске интерактивного сеанса Docker. Если вы не создали дополнительные репозитории в Docker Hub, обычно это ваше имя пользователя Docker Hub:
1
<ol><li data-prefix="$"> <span class="token function">docker</span> commit <span class="token parameter variable">-m</span> <span class="token string">"Что вы сделали с изображением"</span> <span class="token parameter variable">-a</span> <span class="token string">"Имя автора"</span><mark> идентификатор контейнера</mark><mark> репозиторий</mark> /<mark> новое_имя_изображения</mark></li></ol>
Например:
1
<ol><li data-prefix="$"> <span class="token function">docker</span> commit <span class="token parameter variable">-m</span> <span class="token string">"добавленный сервер mariadb"</span> <span class="token parameter variable">-a</span> <span class="token string">"Sunday Ogwu-Chinuwa"</span> 59839a1b7de2 Sammy/rockylinux-mariadb</li></ol>
Note: При фиксации изображения новое изображение сохраняется локально, то есть на вашем компьютере. Далее в этом руководстве вы узнаете, как отправить образ в реестр Docker, например Docker Hub, чтобы его могли оценить и использовать вы и другие пользователи.
После завершения этой операции в списке образов Docker, находящихся сейчас на вашем компьютере, должен отображаться новый образ, а также старый, на основе которого он был получен:
1
<ol><li data-prefix="$"> изображения <span class="token function">докера</span></li></ol>
Вывод должен быть такого рода:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ТЕГ РЕПОЗИТОРИЯ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАННЫЙ РАЗМЕР Sammy/rockylinux-mariadb последнее 23390430ec73 6 секунд назад 424,6 МБ rockylinux последнее 778a53015523 5 недель назад 196,7 МБ hello-world последнее 94df4f0ce8a4 2 недели назад 967 B
В приведенном выше примере rockylinux-mariadb — это новый образ, полученный из существующего образа Rocky Linux из Docker Hub. Разница в размерах отражает внесенные изменения. В этом примере изменение заключалось в том, что был установлен сервер MariaDB. Поэтому в следующий раз, когда вам понадобится запустить контейнер с использованием Rocky Linux с предустановленным сервером MariaDB, вы можете просто использовать новый образ. Образы также могут быть созданы из так называемого Dockerfile. Но это очень сложный процесс, который выходит далеко за рамки данной статьи. Мы рассмотрим это в следующей статье.
Шаг 7 — Листинг Docker-контейнеров
После некоторого использования Docker на вашем компьютере появится множество активных (работающих) и неактивных контейнеров. Для просмотра активных используйте:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> <span class="token function">, пс</span></li></ol>
Вы увидите вывод, аналогичный следующему:
1
<div class="secondary-code-label" title="Выход"> Выход</div> ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СТАТУС ИМЕНА ПОРТОВ f7c79cc556dd rockylinux "/bin/bash" 3 часа назад Работает 3 часа silly_spence
Чтобы просмотреть все контейнеры — активные и неактивные, передайте ему ключ -a
:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> <span class="token function">пс</span> <span class="token parameter variable">-а</span></li></ol>
Чтобы просмотреть последний созданный вами контейнер, передайте ему ключ -l
:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> <span class="token function">пс</span> <span class="token parameter variable">-л</span></li></ol>
Остановить работающий или активный контейнер так же просто, как набрать:
1
<ol><li data-prefix="$"> остановка <span class="token function">докера</span><mark> идентификатор контейнера</mark></li></ol>
container-id
можно найти в выводе команды docker ps
.
Шаг 8 — Отправка образов Docker в репозиторий Docker
Следующий логический шаг после создания нового образа из существующего — поделиться им с несколькими избранными друзьями, со всем миром в Docker Hub или в другом реестре Docker, к которому у вас есть доступ. Чтобы отправить образ в Docker Hub или любой другой реестр Docker, у вас должна быть там учетная запись.
В этом разделе показано, как отправить образ Docker в Docker Hub.
Чтобы создать учетную запись в Docker Hub, зарегистрируйтесь в Docker Hub. После этого, чтобы отправить образ, сначала войдите в Docker Hub. Вам будет предложено пройти аутентификацию:
1
<ol><li data-prefix="$"> вход <span class="token function">в докер</span> <span class="token parameter variable">-u</span><mark> имя пользователя-реестра-докера</mark></li></ol>
Если вы указали правильный пароль, аутентификация должна пройти успешно. Затем вы можете отправить свое собственное изображение, используя:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> push<mark> имя пользователя-реестра-докера</mark> /<mark> имя-образа-докера</mark></li></ol>
Это займет некоторое время, и по завершении вывод будет такого рода:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Push относится к репозиторию [docker.io/sammy/rockylinux-mariadb] 670194edfaf5: отправлено 5f70bf18a086: смонтировано из библиотеки/rockylinux 6a6c96337be1: смонтировано из библиотеки/rockylinux...
После отправки образа в реестр он должен появиться на панели управления вашей учетной записи, как показано на изображении ниже.
Если попытка push-уведомления приводит к ошибке такого типа, то, скорее всего, вы не вошли в систему:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Отправка относится к репозиторию [docker.io/sammy/rockylinux-mariadb] e3fbbfb44187: подготовка 5f70bf18a086: подготовка a3b5c80a4eba: подготовка 7f18b442972b: подготовка 3ce512daaf78: подготовка 7aae4540b42d: ожидание несанкционированного доступа: требуется аутентификация
Войдите в систему, затем повторите попытку отправки.
Заключение
Docker — это намного больше, чем было описано в этой статье, но этого должно быть достаточно, чтобы вы начали работать с ним в Rocky Linux 9. Как и большинство проектов с открытым исходным кодом, Docker построен на быстро развивающейся кодовой базе, поэтому создайте привычка посещать страницу блога проекта для получения самой свежей информации.
Также ознакомьтесь с другими учебниками по Docker в сообществе DO.