Установка Docker в Rocky Linux 9

Docker — это приложение, которое упрощает процесс управления процессами других приложений в контейнерах. Контейнеры похожи на виртуальные машины, только они портативнее, эффективнее расходуют ресурсы и зависимы от операционной системы хоста. 

Читайте также: Экосистема Docker: базовые компоненты

В этой статье мы разберём, как установить и использовать Docker в Rocky Linux 9.

Требования

Нам понадобится сервер Rocky Linux 9 с пользователем non-root и привилегиями sudo.

Все команды должны выполняться от имени пользователя non-root. Если для команды требуется root-доступ, перед ней нужно писать sudo. Как добавить пользователей и предоставить им доступ sudo, мы разобрали в этой статье.

1: Установка Docker

Пакет установки Docker, доступный в официальном репозитории Rocky Linux 9, может быть не самым свежим. Мы рекомендуем устанавливать Docker из официального репозитория, чтобы использовать самую актуальную версию. Как это сделать, мы покажем в этом разделе.

Сначала обновите существующий список пакетов:

sudo dnf check-update

Затем добавьте официальный репозиторий Docker:

sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

У Docker нет специального репозитория Rocky Linux, потому что система Rocky Linux основана на CentOS и может использовать тот же репозиторий. После его добавления установите Docker, который состоит из трех пакетов:

sudo dnf install docker-ce docker-ce-cli containerd.io

После завершения установки запустите демон Docker.

sudo systemctl start docker

Убедитесь, что он запущен:

sudo systemctl status docker

Вывод должен быть примерно следующим (он должен обязательно показывать, что служба активна и работает).

docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)

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

sudo systemctl enable docker

После установки Docker у вас будет доступ не только к службе Docker (демон), но и к утилите командной строки docker (или клиенту). Как использовать команду docker, мы разберем позже.

2: Настройка команды Docker без Sudo (опционально)

По умолчанию команда docker может быть запущена только root пользователемили пользователем из группы docker, которая автоматически создается при установке программы. Если вы запустите команду docker без sudo или в сессии пользователя, который не состоит в группе docker, вы получите такой вывод:

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.

Если вы не хотите вводить sudo при каждом запуске команды docker, добавьте своего пользователя в группу docker:

sudo usermod -aG docker $(whoami)

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

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

sudo usermod -aG docker username

В дальнейшем в статье подразумевается, что вы запускаете команду docker от имени пользователя, который состоит в группе docker. В противном случае вам необходимо самостоятельно добавить ко всем командам префикс sudo.

3: Использование команды Docker

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

docker [option] [command] [arguments]

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

docker

Начиная с Docker версии 1.11.1, полный список доступных субкоманд выглядит так:

    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders between a container and the local filesystem
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Export a container's filesystem as a tar archive
    history   Show the history of an image
    images    List images
    import    Import the contents from a tarball to create a filesystem image
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive or STDIN
    login     Log in to a Docker registry
    logout    Log out from a Docker registry
    logs      Fetch the logs of a container
    network   Manage Docker networks
    pause     Pause all processes within a container
    port      List port mappings or a specific mapping for the CONTAINER
    ps        List containers
    pull      Pull an image or a repository from a registry
    push      Push an image or a repository to a registry
    rename    Rename a container
    restart   Restart a container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save one or more images to a tar archive
    search    Search the Docker Hub for images
    start     Start one or more stopped containers
    stats     Display a live stream of container(s) resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Display the running processes of a container
    unpause   Unpause all processes within a container
    update    Update configuration of one or more containers
    version   Show the Docker version information
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

Для просмотра параметров, доступных для конкретной команды, введите:

docker docker-subcommand --help

Чтобы посмотреть общесистемную информацию, введите:

docker info

4: Работа с образами Docker.

Контейнеры запускаются из образов Docker. По умолчанию Docker загружает эти образы из Docker Hub, официального реестра Docker. Любой пользователь может создавать и размещать свои образы на Docker Hub. Большинство приложений и дистрибутивов Linux, которые вам понадобятся для запуска контейнеров Docker, размещены на Docker Hub.

Чтобы проверить, можно ли получить доступ и загрузить образы из Docker Hub, введите команду:

docker run hello-world

Следующий вывод говорит о том, что Docker работает корректно:

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Искать образы, доступные в Docker Hub, можно с помощью команды docker с субкомандой search. Например, чтобы найти образ Rocky Linux, введите команду:

docker search rockylinux

Скрипт просканирует Docker Hub и вернет список всех образов с именами, совпадающими со строкой запроса. В этом случае вывод будет примерно таким:

NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                          The official build of CentOS.                   2224      [OK]       
jdeathe/centos-ssh              CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8...   22                   [OK]
jdeathe/centos-ssh-apache-php   CentOS-6 6.7 x86_64 / Apache / PHP / PHP M...   17                   [OK]
million12/centos-supervisor     Base CentOS-7 with supervisord launcher, h...   11                   [OK]
nimmis/java-centos              This is docker images of CentOS 7 with dif...   10                   [OK]
torusware/speedus-centos        Always updated official CentOS docker imag...   8                    [OK]
nickistre/centos-lamp           LAMP on centos setup                            3                    [OK]

Значение OK в столбце OFFICIAL указывает на образ, созданный и поддерживаемый компанией, реализующей проект. После того, как вы выбрали образ, который хотите использовать, можно загрузить его на свой компьютер с помощью подкоманды pull:

docker pull rockylinux

После загрузки образа вы можете запустить контейнер, это делается с помощью субкоманды run. Клиент Docker сначала загрузит образ (если он не был загружен субкомандой run), а затем запускает контейнер с этим образом:

docker run rockylinux

Чтобы просмотреть загруженные образы, введите:

docker images

Вывод команды должен выглядеть так:

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 предоставляет вам доступ к интерактивной командной оболочке внутри контейнера:

docker run -it rockylinux

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

[root@59839a1b7de2 /]#

Важно: обратите внимание на идентификатор контейнера в запросе команды. В примере выше это 59839a1b7de2.

Теперь вы можете запустить любую команду внутри контейнера. Например, давайте сейчас установим сервер MariaDB в запущенный контейнер. Добавлять префикс sudo к командам не нужно, потому что вы работаете внутри контейнера как root пользователь.

dnf install mariadb-server

6: Сохранение контейнера Docker

После запуска образа Docker вы можете создавать, изменять и удалять файлы так же, как и на виртуальной машине. Эти изменения будут применяться только к данному контейнеру. Вы можете запускать и останавливать его, но как только вы удалите его с помощью команды docker rm, изменения будут потеряны навсегда.

В этом разделе мы покажем, как сохранить состояние контейнера в виде нового образа Docker.

После установки сервера MariaDB в контейнер Rocky Linux данный контейнер будет отличаться от образа, который вы использовали для его создания.

Для сохранения состояния контейнера в виде нового образа сначала выйдите из него:

exit

А затем сохраните изменения в новый образ при помощи следующей команды. Флаг -m позволяет оставить сообщение, которое поможет остальным узнать, какие изменения вы внесли, а флаг -a используется для указания автора. Container ID — это тот идентификатор, который мы отмечали ранее в этой статье, когда запускали интерактивную сессию Docker. Repository, как правило, указывает ваше имя пользователя на Docker Hub (если вы не создавали там дополнительные репозитории):

docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

Например:

docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 8host/rockylinux-mariadb

Примечание. Когда вы сохраняете образ, он хранится на локальном компьютере. Далее в этой статье вы узнаете, как добавить образ в реестр Docker, например, на Docker Hub, чтобы другие пользователи могли получить к нему доступ.

Список образов Docker после этого будет содержать новый образ, а также старый образ, из которого он будет получен:

docker images

Вывод будет следующим:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
8host/rockylinux-mariadb   latest              23390430ec73        6 seconds ago       424.6 MB
rockylinux                 latest              778a53015523        5 weeks ago         196.7 MB
hello-world                latest              94df4f0ce8a4        2 weeks ago         967 B

В этом примере rockylinux-mariadb — это новый образ, который получен из образа Rocky Linux на Docker Hub. Разница в размерах показывает внесенные изменения. И в этом примере изменение заключалось в том, что в контейнер был установлен сервер MariaDB. Поэтому в следующий раз, когда вам понадобится запустить контейнер с помощью Rocky Linux с предустановленным сервером MariaDB, вы можете просто использовать новый образ. Образы также можно создавать из Dockerfile. 

7: Список контейнеров Docker

После использования Docker у вас на компьютере будет много активных (работающих) и неактивных контейнеров. Для просмотра активных используйте:

docker ps

Вывод будет выглядеть следующим образом:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c79cc556dd        rockylinux          "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence

Чтобы просмотреть все контейнеры — активные и неактивные, – воспользуйтесь флагом -a:

docker ps -a

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

docker ps -l

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

docker stop container-id

container-id можно найти в выводе команды docker ps.

8: Загрузка образов Docker в репозиторий Docker

Следующий шаг после создания нового образа из существующего — предоставление доступа к этому образу другим пользователям у на Docker Hub (или в другом реестре Docker). У вас должна быть учетная запись, чтобы добавить образ в Docker Hub или любой другой реестр Docker.

В этом разделе показано, как добавить образ в Docker Hub.

Чтобы создать учетную запись в Docker Hub, зарегистрируйтесь там. Прежде чем добавить образ, сначала войдите в свой аккаунт. Вам будет предложено пройти аутентификацию:

docker login -u docker-registry-username

Если вы указали правильный пароль, то аутентификация должна пройти успешно. Затем вы можете загрузить свой образ с помощью следующей команды:

docker push docker-registry-username/docker-image-name

Этот процесс займет некоторое время, и по завершению вы получите такой вывод:

The push refers to a repository [docker.io/8host/rockylinux-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/rockylinux
6a6c96337be1: Mounted from library/rockylinux

После добавления образа он должен отображаться в панели управления вашей учетной записи, как показано на изображении ниже.

Если при попытке добавления образа возникает такая ошибка, скорее всего, вы не прошли аутентификацию:

The push refers to a repository [docker.io/8host/rockylinux-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

Войдите в систему, затем повторите попытку добавления.

Подводим итоги

Docker — это намного больше, чем мы рассказали в этой статье, но этих знаний будет достаточно для начала работы с ним в Rocky Linux 9. Как и большинство проектов с открытым исходным кодом, Docker построен на основе быстро развивающейся кодовой базы. Поэтому выработайте привычку посещать страницу блога проекта для получения последней информации.

Tags: , ,

Добавить комментарий