6: Коммиты контейнеров Docker
Файловые системы Docker являются временными по умолчанию. После запуска образа Docker вы можете создавать, изменять и удалять файлы так же, как на виртуальной машине. Однако если вы остановите контейнер, а позже запустите его снова, все изменения будут потеряны: все ранее удалённые файлы будут восстановлены, а все новые файлы или внесенные изменения будут утрачены. Это потому, что образы Docker больше похожи на шаблоны, чем на стандартные образы.
Чтобы сохранить все изменения внутри контейнера (и иметь к ним доступ даже после его перезапуска), используйте тома данных Docker.
Данный раздел научит вас сохранять состояние контейнера в качестве нового образа Docker.
Итак, в контейнер Ubuntu вы установили приложение node.js. Теперь контейнер отличается от образа, который был использован для его создания.
Чтобы сохранить текущее состояние контейнера в качестве нового образа, сначала закройте контейнер:
Затем передайте все изменения в новый образ Docker при помощи следующей команды. Опция –m позволяет создать сообщение о коммите, которое предоставит вам (и другим пользователям) подробную информацию о внесённых изменениях. Опция –a позволяет указать автора коммита. ID контейнера был выписан из командной строки. В качестве репозитория, как правило, указывается имя пользователя your Docker Hub:
Например:
Примечание: Новый образ сначала сохраняется локально. Далее будет показано, как выгрузить новый образ на Docker Hub.
Запросите список доступных образов, чтобы убедиться, что новый образ был сохранён успешно:
Команда должна вернуть:
Теперь в списке появился новый образ ubuntu-nodejs, который был получен из существующего образа Ubuntu, загруженного с Docker Hub. Разница в размерах отражает внесенные изменения (в данном случае установку приложения NodeJS). Поэтому если в дальнейшем вам понадобится контейнер Ubuntu с предустановленным приложением NodeJS, вы можете просто использовать этот образ. Также можно собирать образы из так называемых Dockerfile, но это очень сложный процесс, который выходит за рамки данного руководства.
Шаг 5 — Запуск контейнера Docker
Контейнер , который мы запускали ранее, является примером контейнера, который запускается и завершает работу после вывода тестового сообщения. Контейнеры могут выполнять и более полезные действия, а также они могут быть интерактивными. В конце концов, они очень похожи на виртуальные машины, только менее требовательные к ресурсам.
В качестве примера запустим контейнер, использующий последнюю версию образа Ubuntu. Комбинация ключей -i и -t позволяет осуществлять интерактивный доступ к контейнеру:
Ваш консольный ввод должен измениться для отражения факта, что вы работаете внутри контейнера. Он примет следующий вид:
Внимание: Обратите внимание, что идентификатор контейнера отображается в консольном вводе. В примере выше это
Теперь вы можете выполнять любые команды внутри контейнера. Для примера, давайте обновим базу пакетов внутри контейнера. Нет необходимости использовать , поскольку внутри контейнера вы работаете с привилегиями root:
Теперь установим любое приложение в контейнер. Например, NodeJS.
Шаг 5 — Запуск контейнеров Docker
Контейнер , который вы запустили на предыдущем шаге, служит примером контейнера, который запускается и завершает работу после отправки тестового сообщения. Контейнеры могут быть гораздо более полезными, чем в примере выше, а также могут быть интерактивными. В конечном счете они очень похожи на виртуальные машины, но более бережно расходуют ресурсы.
В качестве примера мы запустим контейнер с самым последним образом образ Ubuntu. Сочетание переключателей -i и -t предоставляет вам доступ к интерактивной командной оболочке внутри контейнера:
Необходимо изменить приглашение к вводу команды, чтобы отразить тот факт, что вы работаете внутри контейнера, и должны иметь следующую форму:
Обратите внимание на идентификатор контейнер в запросе команды. В данном примере это
Вам потребуется этот идентификатор для определения контейнера, когда вы захотите его удалить.
Теперь вы можете запустить любую команду внутри контейнера. Например, сейчас мы обновим базу данных пакетов внутри контейнера. Вам не потребуется начинать любую команду с , потому что вы работаете внутри контейнера как root-пользователь:
После этого вы можете установите любое приложение внутри контейнера. Давайте установим Node.js:
Эта команда устанавливает Node.js внутри контейнера из официального репозитория Ubuntu. После завершения установки проверьте, что Node.js был установлен успешно:
Вы увидите номер версии, отображаемый в терминале:
Любые изменения, которые вы вносите внутри контейнера, применяются только к контейнеру.
Чтобы выйти из контейнера, введите .
Далее мы рассмотрим управление контейнерами в нашей системе.
Step 7 — Committing Changes in a Container to a Docker Image
When you start up a Docker image, you can create, modify, and delete files just like you can with a virtual machine. The changes that you make will only apply to that container. You can start and stop it, but once you destroy it with the command, the changes will be lost for good.
This section shows you how to save the state of a container as a new Docker image.
After installing Node.js inside the Ubuntu container, you now have a container running off an image, but the container is different from the image you used to create it. But you might want to reuse this Node.js container as the basis for new images later.
To do this, commit the changes to a new Docker image instance using the following command structure:
The -m switch is for the commit message that helps you and others know what changes you made, while -a is used to specify the author. The is the one you noted earlier in the tutorial when you started the interactive Docker session. Unless you created additional repositories on Docker Hub, the repository is usually your Docker Hub username.
For example, for the user sammy, with the container ID of , the command would be:
Note: When you commit an image, the new image is saved locally, that is, on your computer. Later in this tutorial, you’ll learn how to push an image to a Docker registry like Docker Hub so that it can be assessed and used by you and others.
After that operation is completed, listing the Docker images now on your computer should show the new image, as well as the old one that it was derived from:
The output should be similar to this:
In the above example, ubuntu-nodejs is the new image, which was derived from the existing ubuntu image from Docker Hub. The size difference reflects the changes that were made. In this example, the change was that Node.js was installed. Next time you need to run a container using Ubuntu with Node.js pre-installed, you can just use the new image.
You can also build images from a , which lets you automate the installation of software in a new image. However, that’s outside the scope of this tutorial.
Now let’s share the new image with others so they can create containers from it.
NGINX + PHP + PHP-FPM
Рекомендуется каждый микросервис помещать в свой отдельный контейнер, но мы (для отдельного примера) веб-сервер с интерпретатором PHP поместим в один и тот же имидж, на основе которого будут создаваться контейнеры.
Создание образа
Создадим каталог, в котором будут находиться файлы для сборки образа веб-сервера:
mkdir -p /opt/docker/web-server
Переходим в созданный каталог:
cd /opt/docker/web-server/
Создаем докер-файл:
vi Dockerfile
- FROM centos:8
- MAINTAINER Dmitriy Mosk <master@dmosk.ru>
- ENV TZ=Europe/Moscow
- RUN dnf update -y
- RUN dnf install -y nginx php php-fpm php-mysqli
- RUN dnf clean all
- RUN echo «daemon off;» >> /etc/nginx/nginx.conf
- RUN mkdir /run/php-fpm
- COPY ./html/ /usr/share/nginx/html/
- CMD php-fpm -D ; nginx
- EXPOSE 80
* где:
1) указываем, какой берем базовый образ. В нашем случае, CentOS 8.
3) задаем для информации того, кто создал образ. Указываем свое имя и адрес электронной почты.
5) создаем переменную окружения TZ с указанием временной зоны (в нашем примере, московское время).
7) запускаем обновление системы.
устанавливаем пакеты: веб-сервер nginx, интерпретатор php, сервис php-fpm для обработки скриптов, модуль php-mysqli для работы php с СУБД MySQL/MariaDB.
9) удаляем скачанные пакеты и временные файлы, образовавшиеся во время установки.
10) добавляем в конфигурационный файл nginx строку daemon off, которая запретит веб-серверу автоматически запуститься в качестве демона.
11) создаем каталог /run/php-fpm — без него не сможет запуститься php-fpm.
13) копируем содержимое каталога html, который находится в том же каталоге, что и dockerfile, в каталог /usr/share/nginx/html/ внутри контейнера. В данной папке должен быть наше веб-приложение.
15) запускаем php-fpm и nginx. Команда CMD в dockerfile может быть только одна.
17) открываем порт 80 для работы веб-сервера.
В рабочем каталоге создаем папку html:
mkdir html
… а в ней — файл index.php:
vi html/index.php
<?php
phpinfo();
?>
* мы создали скрипт, который будет выводить информацию о php в браузере для примера. По идее, в данную папку мы должны положить сайт (веб-приложение).
Создаем первый билд для нашего образа:
docker build -t dmosk/webapp:v1 .
Новый образ должен появиться в системе:
docker images
При желании, его можно отправить на Docker Hub следующими командами:
docker login —username dmosk
docker tag dmosk/webapp:v1 dmosk/web:nginx_php7
docker push dmosk/web:nginx_php7
* первой командой мы прошли аутентификацию на портале докер-хаба (в качестве id/login мы используем dmosk — это учетная запись, которую мы зарегистрировали в Docker Hub). Вторая команда создает тег для нашего образа, где dmosk — учетная запись на dockerhub; web — имя репозитория; nginx_php7 — сам тег. Последняя команда заливает образ в репозиторий.
* подробнее про докера.
Запуск контейнера и проверка работы
Запускаем веб-сервер из созданного образа:
docker run —name web_server -d -p 80:80 dmosk/webapp:v1
Открываем браузер и переходим по адресу http://<IP-адрес сервера с docker> — откроется страница phpinfo:
Наш веб-сервер из Docker работает.
Step 3: Install Docker
There are several ways to install Docker:
- The standard and most practical approach is to set up Docker repositories and install the software from them.
- Alternatively, download the DEB package and install Docker manually. This method is recommended for users that have air-gapped systems with no access to the internet.
- If you have Raspbian, the only way to set up Docker is by using automated convenience scripts.
Method 1: Install Docker Using the Repository on Debian 10
The best option for most Debian 10 users will be to install Docker from its official repositories. To do so, follow the steps outlined below.
1. Download Docker’s official GPG key to verify the integrity of packages before installing:
2. Add the Docker repository to your system repository with the following command:
3. Update the apt repository:
4. Install Docker Engine – Community (the latest version of Docker) and :
5. The service will start automatically after the installation. Check the status by typing:
6. You can also verify the installation by asking for the Docker version:
Method 2: Install Docker Manually on Debian 10
Users who cannot install Docker from its repositories (or prefer not to) have the option of installing the software manually.
1.Navigate to the following URL:
https://download.docker.com/linux/debian/dists/
2. Click the version of Debian you are using. In this case, it is Buster.
3. Click pool > stable, and finally amd64.
4. Next, you will see a list of all the available .deb packages, including the new releases and older versions. The list will consist of multiple versions of three essential Docker packages:
- containerd
- docker-ce-cli (Docker’s command user interface)
- docker-ce
Unless you require a specific version, go for the latest stable release. Click the newest version for each software package to download them.
The system will most often store the .deb files in the Downloads folder.
5. Return to the command line and navigate to the Downloads folder with the following command:
6. To set up Docker, use the command to install each of the three packages. Make sure to do it in the following order:
Шаг 1 — Установка Docker
Дистрибутив Docker, доступный в официальном репозитории Ubuntu, не всегда является последней версией программы. Лучше установить последнюю версию Docker, загрузив ее из официального репозитория Docker. Для этого добавляем новый источник дистрибутива, вводим ключ GPG из репозитория Docker, чтобы убедиться, действительна ли загруженная версия, а затем устанавливаем дистрибутив.
Сначала обновляем существующий перечень пакетов:
Затем устанавливаем необходимые пакеты, которые позволяют использовать пакеты по HTTPS:
Затем добавляем в свою систему ключ GPG официального репозитория Docker:
Добавляем репозиторий Docker в список источников пакетов APT:
Затем обновим базу данных пакетов информацией о пакетах Docker из вновь добавленного репозитория:
Следует убедиться, что мы устанавливаем Docker из репозитория Docker, а не из репозитория по умолчанию Ubuntu:
Вывод получится приблизительно следующий. Номер версии Docker может быть иным:
Output of apt-cache policy docker-ce
Обратите внимание, что не устанавливается, но для установки будет использован репозиторий Docker для Ubuntu 18.04 (). Далее устанавливаем Docker:
Далее устанавливаем Docker:
Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы. Убедимся, что процесс запущен:
Вывод должен быть похож на представленный ниже, сервис должен быть запущен и активен:
При установке Docker мы получаем не только сервис (демон) Docker, но и утилиту командной строки или клиент Docker. Использование утилиты командной строки рассмотрено ниже.
2: Настройка команды docker (опционально)
По умолчанию команда docker требует привилегий root (или доступа к команде sudo). Также её можно запускать в группе docker, которая создаётся автоматически во время установки Docker.
Если вы попытаетесь запустить команду docker без sudo и вне группы docker, вы получите ошибку:
Чтобы вам не пришлось набирать sudo каждый раз, когда вы запускаете команду docker, добавьте своего пользователя в группу docker:
Чтобы активировать это изменение, выйдите из системы и войдите снова, или же введите:
При этом будет запрошен пароль вашего пользователя.
Убедитесь, что пользователь добавлен в группу:
Чтобы добавить в группу docker пользователя, который не является вашим текущим пользователем, укажите в команде его имя:
Примечание: Далее в мануале предполагается, что команда docker запускается пользователем, который состоит в группе docker. В противном случае вам нужно самостоятельно добавить префикс sudo во все команды.
7: Коммиты контейнеров в образы Docker
После запуска образа Docker вы можете создавать, менять и удалять файлы так же, как на виртуальной машине. Однако если вы остановите контейнер, а позже запустите его снова, все изменения будут потеряны: все ранее удалённые файлы будут восстановлены, а все новые файлы или внесенные изменения – утрачены.
Данный раздел научит вас сохранять состояние контейнера в качестве нового образа Docker.
Итак, в контейнер Ubuntu вы установили приложение node.js. Теперь контейнер отличается от исходного образа, который был использован для его создания. Его можно использовать в качестве основы для нового образа.
Передайте все изменения в новый образ Docker при помощи следующей команды.
Опция –m позволяет создать сообщение о коммите, которое предоставит вам (а также другим пользователям) подробную информацию о внесённых изменениях. Опция –a позволяет указать автора коммита. container_id был выписан из командной строки. В качестве репозитория, как правило, указывается имя пользователя your Docker Hub.
Например, для пользователя 8host и контейнера с ID d9b100f2f636 команда выглядит так:
Новый образ сначала сохраняется локально. Далее будет показано, как выгрузить новый образ на Docker Hub.
Запросите список доступных образов, чтобы подтвердить, что новый образ был сохранён успешно:
Команда должна вернуть:
В списке появился новый образ ubuntu-nodejs, который был получен из существующего образа ubuntu, загруженного с Docker Hub. Разница в размерах отражает внесенные изменения (в данном случае установку приложения NodeJS). Поэтому если в дальнейшем вам понадобится контейнер Ubuntu с предустановленным приложением Node.JS, вы можете просто использовать этот образ.
Также можно собирать образы из так называемых Dockerfile, но это довольно сложный процесс, который выходит за рамки данного руководства.
Step 7 — Committing Changes in a Container to a Docker Image
When you start up a Docker image, you can create, modify, and delete files just like you can with a virtual machine. The changes that you make will only apply to that container. You can start and stop it, but once you destroy it with the command, the changes will be lost for good.
This section shows you how to save the state of a container as a new Docker image.
After installing Node.js inside the Ubuntu container, you now have a container running off an image, but the container is different from the image you used to create it. But you might want to reuse this Node.js container as the basis for new images later.
Then commit the changes to a new Docker image instance using the following command.
The -m switch is for the commit message that helps you and others know what changes you made, while -a is used to specify the author. The is the one you noted earlier in the tutorial when you started the interactive Docker session. Unless you created additional repositories on Docker Hub, the is usually your Docker Hub username.
For example, for the user sammy, with the container ID of , the command would be:
When you commit an image, the new image is saved locally on your computer. Later in this tutorial, you’ll learn how to push an image to a Docker registry like Docker Hub so others can access it.
Listing the Docker images again will show the new image, as well as the old one that it was derived from:
You’ll see output like this:
In this example, is the new image, which was derived from the existing image from Docker Hub. The size difference reflects the changes that were made. And in this example, the change was that NodeJS was installed. So next time you need to run a container using Ubuntu with NodeJS pre-installed, you can just use the new image.
You can also build Images from a , which lets you automate the installation of software in a new image. However, that’s outside the scope of this tutorial.
Now let’s share the new image with others so they can create containers from it.
Установка DEB-пакета Docker на Linux
Сейчас мы рассмотрим установку DEB-пакета Docker на Linux на примере Ubuntu 18.04 LTS, но эта инструкция также подойдет и для следующих дистрибутивов:
Ubuntu Eoan 19.10
Ubuntu Bionic 18.04 (LTS)
Ubuntu Xenial 16.04 (LTS)
Debian Stretch 9
Debian Buster 10
Также всё будет работать и на других Linux-дистрибутивах, которые основаны на вышеперечисленных.
Docker Community Edition доступен для следующих архитектур:
x86_64 (или amd64)
armhf
arm64
s390x (IBM Z)
ppc64le (IBM Power)
Если вы уже когда-нибудь пробовали установить Docker, то у вас могли остаться старые и ненужные пакеты, для их удаления воспользуемся следующей командой:
Если у вас ничего не было установлено, то в терминале вы получите сообщение, что таких пакетов у вас нет:
При этом содержимое директории /var/lib/docker, где Docker хранит образы (images), контейнеры (containers), хранилища (volumes) и настройки сетей (networks), будут сохранены. Пакет Docker Engine Community сейчас называется .
Есть 3 способа установки Docker CE в Ubuntu:
Способ №1: Настроить поддержку репозитория Docker и установить его оттуда.
Способ №2: Загрузить DEB-пакет и установить его вручную.
Способ №3: Воспользоваться , которые позволяют установить Docker.
Сейчас мы рассмотрим установку Docker из репозиториев, так как этот способ наиболее безопасен и позволит обновлять Docker вместе с системой.
Итак, первым делом нам нужно добавить Docker-репозиторий — это место, где хранятся все нужные для установки Docker пакеты. Безопасность данного способа заключается в том, что эти репозитории имеют цифровую подпись, гарантирующую получение именно того пакета Docker, который нужен и ничего лишнего.
Для начала обновим список существующих репозиториев в системе:
Далее установим пакеты:
Затем подтверждаем наши намерения символом и нажимаем :
После подтверждения получим следующий вывод:
Далее нам нужно добавить официальный GPG-ключ для Docker репозитория:
После чего нажимаем .
Проверяем цифровой отпечаток ключа , сравнивая последние 8 символов с помощью следующей команды:
Воспользуемся следующей командой, чтобы добавить стабильный репозиторий Docker:
После этого нам снова нужно обновить список репозиториев:
И, собственно, устанавливаем сам Docker:
После скачивания и установки Docker нам нужно добавить пользователя в группу Docker, чтобы иметь возможность использовать команды Docker без прав суперпользователя:
Чтобы обновления в группах вступили в силу, воспользуемся следующей командой:
Проверяем, всё ли ок:
Если в терминале появились сообщения, указанные на скриншоте, расположенном выше, то вы успешно установили Docker на DEB-дистрибутив Linux!
6: Управление контейнерами Docker
Со временем в вашей системе соберётся определённое количество активных и неактивных контейнеров. Чтобы просмотреть список активных контейнеров, введите:
Команда вернёт такой вывод:
В этом примере у нас есть 2 контейнера – hello-world и ubuntu. Оба контейнера сейчас неактивны, потому список пуст.
Чтобы просмотреть список всех контейнеров, включая неактивные, добавьте опцию -a:
Чтобы получить список недавно созданных контейнеров, добавьте опцию –l:
Чтобы запустить неактивный контейнер, введите команду docker start и укажите ID контейнера. Например, чтобы запустить контейнер Ubuntu с ID 1c08a7a0d0e4, нужно ввести:
Проверьте состояние этого контейнера с помощью команды docker ps:
Чтобы остановить запущенный контейнер, введите docker stop и добавьте ID этого контейнера. Также можно использовать имя, которое контейнерам присваивает Docker. В данном случае это quizzical_mcnulty:
Удалить ненужный контейнер можно с помощью команды docker rm, указав ID или имя контейнера. Чтобы узнать id или имя контейнера, используйте команду docker ps -a. Чтобы удалить контейнер hello-world, нужно ввести:
Вы можете запустить новый контейнер и присвоить ему имя с помощью флага –name. Чтобы создать контейнер, который самостоятельно удалится после деактивации, используйте флаг –rm. Больше информации о командах вы найдете в справке:
Контейнеры можно превращать в образы, на основе которых вы сможете собирать новые контейнеры.
2: Настройка команды docker (опционально)
По умолчанию команда docker требует привилегий root (или доступа к команде sudo). Также её можно запускать в группе docker, которая создаётся автоматически во время установки программы Docker.
Если вы попытаетесь запустить команду docker без префикса sudo и вне группы docker, вы получите ошибку:
Чтобы вам не пришлось набирать префикс sudo каждый раз, когда вам нужно запустить команду docker, добавьте своего пользователя в группу docker:
Чтобы активировать это изменение, выйдите из системы и войдите снова, или же введите:
При этом будет запрошен пароль вашего пользователя.
Убедитесь, что пользователь добавлен в группу:
Чтобы добавить в группу docker пользователя, который не является текущим, укажите в команде его имя:
Примечание: Далее в мануале предполагается, что команда docker запускается пользователем, который состоит в группе docker. В противном случае вам нужно добавлять префикс sudo самостоятельно.
Red Hat Enterprise Linux (RHEL) and CentOS
Docker runs on RHEL 7 and CentOS 7.
Install Docker
Install with Yum
- Log into your system as a user with privileges.
- Update your system: .
-
Add the yum repo (use the code below for both RHEL 7 and CentOS 7):
-
Install Docker:
-
Start Docker:
-
Verify Docker:
Install with the Docker Installation Script
- Log into your system as a user with privileges.
-
Update your system:
-
Run Docker’s installation script:
-
Start Docker:
-
Verify Docker:
The Docker Group
If you prefer, you can set up a group to run Docker (instead of ). However, as must have access, receives the same access as .
-
Run the following command to create a Docker group and add your user to the group (replace USERNAME with your username):
- Log out and back in.
-
Verify Docker works without :
Run one of the following:
Шаг 4 — Работа с образами Docker
Контейнеры Docker получают из образов Docker. По умолчанию Docker загружает эти образы из Docker Hub, реестр Docker, контролируемые Docker, т.е. компанией, реализующей проект Docker. Любой может размещать свои образы Docker на Docker Hub, поэтому большинство приложений и дистрибутивов Linux, которые вам потребуется, хранят там свои образы.
Чтобы проверить, можно ли получить доступ к образам из Docker Hub и загрузить их, введите следующую команду:
Данный вывод говорит о том, что Docker работает корректно:
Docker первоначально не смог найти локальный образ , поэтому он загрузил образ из Docker Hub, который является репозиторием по умолчанию. После того как образ был загружен, Docker создал контейнер из образа, а приложение внутри контейнера было исполнено, отобразив сообщение.
Вы можете выполнять поиск доступных на Docker Hub с помощью команды с субкомандой . Например, чтобы найти образ Ubuntu, введите:
Скрипт пробежится по Docker Hub и вернет список всех образов с именами, совпадающими со строкой запроса. В данном случае вывод будет выглядеть примерно следующим образом:
В столбце OFFICIAL OK указывает на образ, созданный и поддерживаемый компанией, реализующей проект. После того как вы определили образ, который хотели бы использовать, вы можете загрузить его на свой компьютер с помощью субкоманды .
Запустите следующую команду, чтобы загрузить официальный образ на свой компьютер:
Вывод должен выглядеть следующим образом:
После того как образ будет загружен, вы сможете запустить контейнер с помощью загруженного образа с помощью субкоманды . Как вы уже видели на примере , если образ не был загружен, когда выполняется с субкомандой , клиент Docker сначала загружает образ, а затем запускает контейнер с этим образом.
Чтобы просмотреть образы, которые были загружены на ваш компьютер, введите:
Вывод команды должен выглядеть примерно следующим образом:
Как вы увидите далее в этом обучающем руководстве, образы, которые вы используете для запуска контейнеров, можно изменить и использовать для создания новых образов, которые затем могут быть загружены (помещены) на Docker Hub или другие реестры Docker.
Давайте более подробно рассмотрим, как запускаются контейнеры.
Шаг 1 — Установка Docker Compose
Хотя Docker Compose можно установить из официальных репозиториев Debian, эти версии немного отстают от последней, и поэтому в данном обучающем руководстве мы будем устанавливать Docker из репозитория GitHub. Следующая команда немного отличается, чем приведенная на странице Выпуски. Мы используем флаг для указания выходного файла вместо переадресации вывода. Такой синтаксис позволяет избежать ошибки «отказ в разрешении» при использовании .
Проверьте текущий выпуск и при необходимости обновите его с помощью следующей команды:
После этого мы настроим разрешения:
Затем мы проверим, что установка прошла успешно, с помощью проверки версии:
В результате должна быть выведена установленная нами версия:
Теперь, когда мы установили Docker Compose, мы можем запустить пример «Hello World».