Steps for Installing Docker Compose on Ubuntu
Update Software Repositories and Packages
Start by updating the software repositories and software packages. Open a terminal window, and enter the following:
Check the command by entering:
The system should respond as seen in the image below:
If you see a different message, like , you’ll need to install it.
To install curl, enter the following:
Download the Latest Docker Compose Version
1. To download the latest version of Docker Compose, use the command:
This will download Docker Container 1.24.0. (At the time this article was written, Docker Compose 1.24.0 is the latest version.)
- The option tells the system to follow any redirects, in case the file has been moved
- If you want a different version of Docker Compose, you may browse the list and substitute your preferred version for /1.24.0/
- The option changes the filename, so it’s easier to type
- The file will be saved in /usr/local/bin/
2. Next, change the file permissions to allow the new software to be executed on Ubuntu:
You do not need to run an installation script for Docker Compose. Once downloaded, the software is ready to use.
Note: You can also install Docker Compose from the official Ubuntu repository. Simply run . However, it is recommended to install the software package from Docker’s official GitHub repository. That way, you are always installing the latest version.
Шаг 1 — Установка Docker Compose
Чтобы получить самую последнюю стабильную версию Docker Compose, мы загрузим это программное обеспечение из официального репозитория Github.
Для начала проверьте, какая последняя версия доступна на странице релизов. На момент написания настоящего документа наиболее актуальной стабильной версией является версия .
Следующая команда загружает версию и сохраняет исполняемый файл в каталоге , в результате чего данное программное обеспечение будет глобально доступно под именем :
Затем необходимо задать правильные разрешения, чтобы сделать команду исполняемой:
Чтобы проверить успешность установки, запустите следующую команду:
Вывод будет выглядеть следующим образом:
Установка Docker Compose успешно выполнена. В следующем разделе мы покажем, как настроить файл и запустить контейнерную среду с помощью этого инструмента.
4: Команды Docker Compose
Теперь вы знаете, как настроить файл docker-compose.yml и запустить вашу среду. Давайте посмотрим, как использовать другие команды Docker Compose, предназначенные для управления и взаимодействия с вашей контейнерной средой.
Чтобы проверить логи, созданные контейнером Nginx, вы можете использовать команду logs:
Чтобы поставить выполнение среды на паузу, не изменяя при этом текущего состояния контейнеров, используйте команду:
Чтобы восстановить работу среды, используйте:
Команда stop прервет работу контейнера, но сохранит все данные, связанные с ним.
Если вы хотите удалить контейнеры, сети и тома, связанные с этой контейнерной средой, используйте команду down:
Обратите внимание, это не удалит базовый образ, используемый Docker Compose для запуска вашей среды (в нашем случае nginx: alpine). Таким образом, всякий раз, когда вы снова запускаете свою среду с помощью docker-compose up, процесс будет запускаться намного быстрее, поскольку образ уже находится в вашей системе
Если вы хотите удалить базовый образ из вашей системы, вы можете использовать эту команду:
2: Запуск контейнера при помощи Docker Compose
Официальный открытый ресурс Docker, Docker Hub, предлагает образ простого приложения Hello World. Он представляет собой минимальную конфигурацию (YAML-файл), необходимую для запуска контейнера в Docker Compose. Этот образ можно использовать, чтобы протестировать Docker Compose.
Создайте каталог для YAML-файла и перейдите в него:
Создайте YAML-файл:
Поместите в файл следующий код, затем сохраните и закройте его:
Первая строка будет использоваться как часть имени контейнера. Вторая строка указывает, какой образ использовать для создания контейнера. Команда docker-compose up будет искать в локальных образах образ hello-world.
Список локальных образов можно просмотреть вручную:
Если локальных образов нет, команда вернёт только заголовки столбцов:
В каталоге ~/hello-world выполните следующую команду, чтобы создать контейнер:
Если при первом запуске команда не обнаружит нужного образа на локальной машине, образ будет загружен из официального репозитория Docker Hub.
Загрузив образ, docker-compose создаст контейнер и запустит программу hello-world. Если всё выполнено верно, на экране появится такой вывод:
Затем команда выведет описание своих действий:
- Клиент Docker подключается к демону Docker.
- Демон загружает образ hello-world с Docker Hub.
- Демон создаёт из этого образа новый контейнер.
- Демон передаёт полученный вывод клиенту Docker, а он возвращает его в терминал.
Контейнер Docker работает до тех пор, пока работает программа, запущенная в нём. Если вы остановите программу hello, контейнер тоже остановится. Запросите список активных контейнеров; программы hello-world среди них не будет.
Чтобы просмотреть все существующие контейнеры, используйте флаг –а:
Step 3 — Running a Container with Docker Compose
The public Docker registry, Docker Hub, includes a simple Hello World image. Now that we have Docker Compose installed, let’s test it with this really simple example.
First, create a directory for our YAML file:
Then change into the directory:
Now create the YAML file using your favorite text editor (we will use nano):
Put the following contents into the file, save the file, and exit the text editor:
docker-compose.yml
The first line will be used as part of the container name. The second line specifies which image to use to create the container. The image will be downloaded from the official Docker Hub repository.
While still in the directory, execute the following command to create the container:
The output should start with the following:
The output then explains what Docker is doing:
- The Docker client contacted the Docker daemon.
- The Docker daemon pulled the “hello-world” image from the Docker Hub.
- The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
- The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
If the process doesn’t exit on its own, press .
This simple test does not show one of the main benefits of Docker Compose — being able to bring a group of Docker containers up and down all at the same time. The How To Install WordPress and PhpMyAdmin with Docker Compose on Ubuntu 14.04 articles show how to use Docker Compose to run three containers as one application group.
Run a Sample Container
Check whether the installation is working correctly by running a sample container with Docker Compose. Use Docker’s hello-world container to do so.
1. Create a new directory for the sample container:
2. Move into the previously created directory:
3. Create a YAML configuration file:
4. Next, instruct Docker to create a container under the name hello-world based on the latest Hello World image on Docker Hub. To do this, add the following content to the YAML file:
5. Save the changes and exit the text editor (Ctrl+X > Y > Enter).
6. Launch the container while within the hello-world directory with the command:
This prompts Docker to launch the hello-world container. The output displays a script with a message that the installation is working correctly. Once it shows the script, it exists out of the container.
Note: Users new to Docker may find it difficult to use as they often encounter an issue right after installing it. Check out our guide on how to resolve the “Cannot Connect To The Docker Daemon” error that commonly occurs.
Conclusion
After reading this article, you should have successfully set up Docker Compose on Ubuntu.
Once you get in the practice of launching containers with pre-made Docker images, you may want to start making your own. If you are reading to do so, take a look at How To Create Docker Image With Dockerfile.
Начало работы с Docker Compose
В этом разделе мы покажем, как настроить локальную среду разработки WordPress с помощью Docker Compose.
Создайте каталог для проекта и перейдите в него:
Откройте ваш текстовый редактор и создайте файл с именем :
Вставьте следующий контент:
Давайте объясним код построчно
Первая строка указывает версию файла Compose. Существует несколько разных версий формата файлов Compose с поддержкой определенных версий Docker.
Далее мы определяем две службы, и . Каждый сервис создает отдельный контейнер при запуске Docker Compose.
Служба :
Для изображения установлено значение mysql:8.0 . Если изображение отсутствует, Compose извлечет его из общедоступного хранилища Docker Hub. Строка, начинающаяся с command переопределяет команду по умолчанию restart: always Политика restart: always предписывает Compose перезапустить контейнер, если он выйдет из строя. Контейнер будет использовать именованный том db_data для сохранения базы данных. db_data переменные среды для образа mysql:8.0 .
Сервис :
Использует изображение wordpress Устанавливает каталог wp_data на хосте в /var/lib/mysql внутри контейнера. wp_data открытый порт 80 на контейнере на порт 8080 на хост-машине. depends_on переменные среды для изображения wordpress Инструкция определяет зависимость между двумя сервисами. В этом примере db будет запущена до wordpress .
Из каталога проекта запустите стек WordPress, выполнив следующую команду:
Вывод должен выглядеть примерно так:
Docker Compose извлечет изображения, запустит контейнеры и создаст каталог каталоге вашего проекта.
Введите в своем браузере, и вы увидите стандартный экран установки WordPress.
На этом этапе приложение WordPress запущено и работает, и вы можете начать работать над ним.
Чтобы остановить Compose нажмите
Вы также можете запустить Compose в отдельном режиме, используя опцию :
Для просмотра запущенных Docker-контейнеров используйте следующую команду:
Чтобы остановить службы, когда Compose работает в отдельном режиме, используйте:
Передача также удаляет тома данных:
Step 3 — Running Docker Compose
With the file in place, we can now execute Docker Compose to bring our environment up. The following command will download the necessary Docker images, create a container for the service, and run the containerized environment in background mode:
Docker Compose will first look for the defined image on your local system, and if it can’t locate the image it will download the image from Docker Hub. You’ll see output like this:
Your environment is now up and running in the background. To verify that the container is active, you can run:
This command will show you information about the running containers and their state, as well as any port redirections currently in place:
You can now access the demo application by pointing your browser to either if you are running this demo on your local machine, or if you are running this demo on a remote server.
You’ll see a page like this:
Because the shared volume you’ve set up within the file keeps your folder files in sync with the container’s document root. If you make any changes to the file, they will be automatically picked up by the container and thus reflected on your browser when you reload the page.
In the next step, you’ll see how to manage your containerized environment with Docker Compose commands.
Step 2 — Setting Up a docker-compose.yml File
To demonstrate how to set up a file and work with Docker Compose, we’ll create a web server environment using the official Nginx image from Docker Hub, the public Docker registry. This containerized environment will serve a single static HTML file.
Start off by creating a new directory in your home folder, and then moving into it:
In this directory, set up an application folder to serve as the document root for your Nginx environment:
Using your preferred text editor, create a new file within the folder:
Place the following content into this file:
~/compose-demo/app/index.html
Save and close the file when you’re done. If you are using , you can do that by typing , then and to confirm.
Next, create the file:
Insert the following content on your file:
docker-compose.yml
The file typically starts off with the definition. This will tell Docker Compose which configuration version we’re using.
We then have the block, where we set up the services that are part of this environment. In our case, we have a single service called . This service uses the image and sets up a port redirection with the directive. All requests on port of the host machine (the system from where you’re running Docker Compose) will be redirected to the container on port , where Nginx will be running.
The directive will create a between the host machine and the container. This will share the local folder with the container, and the volume will be located at inside the container, which will then overwrite the default document root for Nginx.
Save and close the file.
We have set up a demo page and a file to create a containerized web server environment that will serve it. In the next step, we’ll bring this environment up with Docker Compose.
Примеры проектов с Docker Compose
Содержимое файла зависит от того, какие инструменты используются в проекте. Например, если ваш стек Nginx / Flask / MongoDB, то структура должна быть следующей:
├── docker-compose.yaml ├── flask │ ├── Dockerfile │ ├── requirements.txt │ └── server.py └── nginx └── nginx.conf
Базовый в таком случае будет выглядеть так:
services: web: image: nginx volumes: - ./nginx/nginx.conf:/tmp/nginx.conf environment: - FLASK_SERVER_ADDR=backend:9091 command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" ports: - 80:80 depends_on: - backend backend: build: flask environment: - FLASK_SERVER_PORT=9091 volumes: - ./flask:/src depends_on: - mongo mongo: image: mongo
Файл может выглядеть и сложнее. В качестве примера возьмем стек React, Spring и MySQL.
Структура проекта:
. ├── backend │ ├── Dockerfile │ ... ├── db │ └── password.txt ├── docker-compose.yaml ├── frontend │ ├── ... │ └── Dockerfile └── README.md
Конфигурация Docker Compose:
services: backend: build: backend restart: always secrets: - db-password environment: MYSQL_HOST: db networks: - react-spring - spring-mysql depends_on: db: condition: service_healthy db: # We use a mariadb image which supports both amd64 & arm64 architecture image: mariadb:10.6.4-focal # If you really want to use MySQL, uncomment the following line #image: mysql:8.0.19 environment: - MYSQL_DATABASE=example - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password restart: always healthcheck: test: interval: 3s retries: 5 start_period: 30s secrets: - db-password volumes: - db-data:/var/lib/mysql networks: - spring-mysql frontend: build: context: frontend target: development ports: - 3000:3000 volumes: - ./frontend/src:/code/src - /project/node_modules networks: - react-spring depends_on: - backend expose: - 3306 - 33060 volumes: db-data: {} secrets: db-password: file: db/password.txt networks: react-spring: {} spring-mysql: {}
Выглядит устрашающе, но теперь вы должны понимать, что значат все эти элементы и как можно менять конфигурацию в зависимости от своих потребностей.
Еще больше полезной информации — в репозитории Awesome Compose на GitHub. Там вы найдете примеры приложений с несколькими интегрированными службами, одиночные сервисы, а также базовые настройки для разных платформ.
Install Docker Compose on Ubuntu
Follow the steps below to install the latest Docker Compose version from its official GitHub repository. At the time of writing, Docker Compose 1.29.2 is the latest stable release.
You can also install Docker Compose from the Ubuntu repository by running . However, this option doesn’t guarantee you are downloading the latest version.
Step 1: Upgrade and Update
Start by updating the default repository to ensure you download the latest Docker Compose:
Then, upgrade the system to ensure all local packages and programs are up to date:
Step 2: Install curl
To download the binary package using an URL, you need curl. You can check whether you have this command-line utility by typing in the terminal window:
If the output displays ““, move on to the next step. This message means curl is installed.
However, if the terminal says ““, you need to install curl with:
Note: For some development purposes, you might need to make curl ignore SSL errors. To learn how to do this, please refer to our guide How To Make Curl Ignore Certificate Errors.
Step 3: Download the Latest Docker Version
With the system updated and curl available for use, you can download and install Docker Compose. There is no installation script once the package is locally available, it is automatically installed.
Use the following command:
The command instructs the system to save the file in the /usr/local/bin/ directory, under the name docker-compose.
Wait for the download to complete.
Note: The command used above includes the release number of the software. To check whether there are new stable versions, refer to the official list of releases on GitHub. Accordingly, modify the command if needed.
Step 5: Check Docker Compose Version
To verify the installation, check the Docker Compose version by running:
If the output shows the release downloaded in Step 3, you have successfully installed the package.
Установка Docker в Centos 7
В Centos 7 Docker устанавливается так же штатно, через официальный репозиторий. Прежде чем его подключить, убедитесь, что у вас установлен пакет yum-utils.
# yum install yum-utils
После этого подключаем репозиторий докера.
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo Loaded plugins: fastestmirror adding repo from: https://download.docker.com/linux/centos/docker-ce.repo grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
Теперь можно приступить к установке Docker на Centos 7.
# yum install docker-ce docker-ce-cli containerd.io
Запускаем докер и добавляем в автозагрузку.
# systemctl enable --now docker
Проверяем работу:
# systemctl status docker
Запускаем контейнер c nginx для теста.
# docker run -d -p 80:80 --restart=always --name nginx-proxy nginx
Убеждаемся, что все запущено и корректно работает.
# docker ps # ss -tulnp
На этом установка Docker на Centos 7 закончена. Для верности можете в браузере проверить, что nginx запущен и работает.
Код приложения
В открывшемся проекте рядом с главным классом, содержащим метод main, создаём ещё один класс — контроллер с методом hello ().
Класс помечен аннотацией @RestController, означающей, что он предназначен для обработки web-запросов. А метод помечен аннотацией @GetMapping c адресом «/» — перейдя по нему (выполнив get-запрос к http://localhost:8080/), мы получим сообщение «Hello Docker!»
Теперь открываем терминал и вводим команду:
Она упакует приложение в jar-файл и запустит его. Чтобы убедиться в корректности работы приложения — перейдём на http://localhost:8080/ в браузере и увидим заветное сообщение.
Теперь создаём файл с именем Dockerfile в корне проекта, который содержит инструкции для сборки образа со следующим текстом:
Вот что происходит, когда мы вводим этот код:
Команда | Описание |
---|---|
FROM adoptopenjdk/openjdk11:alpine-jre | Oбраз создаётся на основе alpine linux с установленной openjdk11 |
ARG JAR_FILE=target/spring-docker-simple-0.0.1-SNAPSHOT.jar | Переменной JAR_FILE присваивается путь к jar- архиву |
WORKDIR /opt/app | Назначаем рабочую директорию, в которой будут выполняться дальнейшие команды (перемещаемся в папку app) |
COPY ${JAR_FILE} app.jar | Наш jar-файл, указанный в JAR_FILE, копируется в папку app, и копии задаётся имя app.jar |
ENTRYPOINT | jar-файл запускается, собирается команда java -jar app.jar из заданной рабочей директории |
После этого в терминале вводим команду, с помощью которой собираем образ и запускаем контейнер.
Точка в конце важна, она указывает на расположение Dockerfile (символ «точка» означает текущую директорию. Проверьте, что образ создан командой docker images. Вывод должен быть таким:
Запускаем контейнер командой:
Опция -d означает старт процесса в фоновом режиме. Опция -p тоже важна — дело в том, что контейнер собирается в полностью изолированном окружении. Тот факт, что приложение внутри контейнера запущено на порту 8080, не означает, что оно доступно вне контейнера на этом порту.
Требуется явно указать, что порту 8080 в контейнере (здесь второе значение — это порт, на котором работает наше приложение в контейнере) соответствует порт 8080 на локальной машине, который будет использоваться при обращении к контейнеру. Поэтому пишем через двоеточие -p 8080:8080.
Теперь введём в терминале команду:
Проверка
Чтобы убедиться, что docker в рабочем состоянии, выполняем команду:
docker run hello-world
Сначала система обнаружит, что нужного образа нет и загрузит его:
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
b8dfde127a29: Already exists
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest
После отобразит приветствие:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker…
Docker работает корректно.
Основы ENTRYPOINT && CMD
Перед началом нужно кратко вспомнить, что это такое и чем отличается. Эти две директивы в Dockerfile наверняка всем известны – обе запускают процессы в контейнере. Как правило, в entrypoint используется какой-либо скрипт или команда для запуска процесса внутри контейнера, а в cmd – параметры, которые передаются в entrypoint.
Если указывать параметры в квадратных скобках, т.е. в формате exec, то внутри контейнера будет выполняться лишь процесс, который указан для запуска, и никаких оболочек запущено не будет. Это значит, что замена (substitution) переменных и их обработка невозможны – это также предпочтительный вариант для простого запуска какого-либо процесса. О более сложных моментах будет рассказано далее.
Если же указать команду для запуска без фигурных скобок, то внутри контейнера можно будет увидеть, что процесс запущен через форму shell и процесс внутри будет вида sh -c “ping ya.ru”.
Грубый пример Dockerfile для демонстрации работы exec формы:
После сборки образа с именем “ping” и дальнейшего запуска контейнера из него будет выполняться команда “/bin/ping it-lux.ru”. Домен можно переопределить, указав его при запуске контейнера, например:
Тем самым выполняется переопределение значения из параметра CMD в Dockerfile, что очень удобно – из одного образа можно запускать команды с различными аргументами. Такой способ я использовал для выполнения крон-задач в отдельном докер-контейнере, указывая на хосте в crontab через аргументы путь к скриптам при запуске docker run, которые принимал для выполнения php.
Установка Docker на Centos 8
Начинаем установку системы управления контейнерами Docker на Centos 8. Первыми делом подключаем официальный репозиторий.
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
Система проинформирует, что репозиторий успешно подключен. Сморим, какие версии докера доступны для установки.
# dnf list docker-ce
Устанавливаем Docker на Centos 8.
# dnf install docker-ce
Я хотел рассказать о некоторых нюансах установки на Centos 8, а по факту оказалось, что их больше нет. Еще недавно не получалось просто взять и установить пакет с докером. Была проблема с зависимостями, связанная с тем, что 8-я версия системы не поддерживала необходимую версию container.id. Но сейчас этой проблемы нет, так что можно про нее забыть.
Проверим, что Docker нормально запустился. И сразу добавим его в автозагрузку.
# systemctl enable --now docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service. # systemctl status docker
Все нормально, Docker успешно стартовал. Проверим его работу, запустив какой-нибудь контейнер. Например, официальный образ nginx. Сначала загрузим его.
# docker pull nginx
Проверяем список образов.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 7e4d58f0e5f3 3 weeks ago 133MB
Теперь запускаем контейнер на основе этого образа и сразу включаем ему автозапуск после старта системы. Частенько разработчики забывают это делать и потом, после ребута сервера, контейнеры не стартуют.
# docker run -d -p 80:80 --restart=always --name nginx-proxy nginx
Смотрим список запущенных контейнеров.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d6555ea4726 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp nginx-proxy
Все в порядке, контейнер слушает 80-й порт. Посмотрим список открытых портов в системе.
# netstat -tulnp
Несмотря на то, что указан ipv6 адрес, контейнер nginx запущен в том числе и на ipv4. Можете зайти браузером на страницу с ip адресом сервера и увидите там стартовую страницу nginx. Причем, даже если у вас запущен firewalld, docker автоматически добавит разрешающее правило для 80-го порта.
На этом по установке Docker на Centos 8 все. Мы настроили и проверили работу. Собственно, даже на таком простом примере наглядно видно, в чем удобство докера, хотя тут он сработал аналогично пакетному менеджеру. Но если у вас что-то посложнее с кучей зависимостей, поставится оно так же быстро и легко.
Мои принципы
Подходы, которые удобны для меня, могут пригодиться и вам. Я следую этим
простым правилам:
- Все мои стеки для продакшена, разработки (или других сред) определяются через
файлы docker-compose. - Файлы конфигурации, необходимые для охвата всех моих сред, максимально
избегают дублирования. - Мне нужна одна простая команда для работы в каждой среде.
- Основная конфигурация определяется в файле docker-compose.yml.
- Переменные среды используются для определения тегов образов или других
переменных, которые могут меняться от среды к среде (стейджинг, интеграция,
продакшен). - Значения переменных для продакшена используются в качестве значений по
умолчанию, это минимизирует риски в случае запуска стека в продакшене без
установленной переменной окружения. - Для запуска сервиса в продакшен-среде используется команда docker stack deploy — compose-file docker-compose.yml —with-registry-auth my-stack-name.
- Рабочее окружение запускается с помощью команды docker-compose up -d.
Давайте посмотрим на простой пример.
И
Я могу использовать docker-compose (docker-compose up), чтобы запустить стек в
режиме разработки с исходным кодом, смонтированным в /project/src.
Я могу использовать эти же файлы на продакшене! И я мог бы использовать точно
такой же файл docker-compose.yml для стейджинга. Чтобы развернуть это на
продакшен, мне просто нужно собрать и отправить образ с предопределенным тегом
на этапе CI:
На продакшене это можно запустить с помощью следующих команд:
И если вы хотите сделать то же самое на стейдже, необходимо просто определить
необходимые переменные окружения для работы в среде стейджинга:
В итоге мы использовали два разных docker-compose файла, которые без
дублирования конфигураций могут использоваться для любой вашей среды!
Узнать подробнее о курсе «Администратор Linux»
Возможные проблемы
1. undefined symbol: seccomp_api_set
Сервис докера не запускается, а в логе можно увидеть следующий текст ошибки:
/usr/bin/containerd: symbol lookup error: /usr/bin/containerd: undefined symbol: seccomp_api_set
Причина: ошибка возникает, если установить свежую версию containerd на систему с необновленной библиотекой libseccomp.
Решение: обновляем libseccomp.
а) в CentOS:
yum update libseccomp
б) в Ubuntu:
apt-get —only-upgrade install libseccomp2
2. error initializing network controller list bridge addresses failed no available network
Сервис докера не запускается, а в логе можно увидеть следующий текст ошибки:
error initializing network controller list bridge addresses failed no available network
Причина: система не может создать docker-интерфейс.
Решение: создаем docker-интерфейс вручную. Устанавливаем утилиту для работы с bridge-интерфейсами.
а) в CentOS:
yum install bridge-utils
б) в Ubuntu:
apt-get install bridge-utils
Создаем интерфейс:
brctl addbr docker0
Назначаем IP-адреса на созданный интерфейс:
ip addr add 192.168.84.1/24 dev docker0
* в нашем примере для docker мы задали адрес 192.168.84.1.
Включаем созданный интерфейс:
ip link set dev docker0 up
Можно запускать docker:
systemctl start docker
Заключение
Мы установили Docker Compose, протестировали установку, запустив пример Hello World, и удалили тестовый образ и контейнер.
Хотя пример Hello World использовался для подтверждения корректности установки, простая конфигурация не демонстрирует одно из главных преимуществ Docker Compose — возможность одновременного запуска группы контейнеров Docker
Чтобы увидеть силу Docker Compose в действии, вы можете ознакомиться с практическим примером в статье Настройка среды непрерывного интеграционного тестирования с помощью Docker и Docker Compose в Ubuntu 16.04 (обратите внимание, что эта статья для Ubuntu 16.04, а не 18.04)