Это будет в основном техническая статья, так как постоянно хожу за этой информацией в поиск, а сейчас решил упростить себе задачу. Я подробно расскажу, как установить систему контейнеризации docker и docker-compose на CentOS 7 и 8. Тема распространенная и популярная, регулярно приходится устанавливать, настраивать и запускать контейнеры.
Введение
Думаю, не нужно каких-то подробных пояснений на тему того, что такое Докер и зачем он нужен. Сейчас этот продукт у всех на слуху. В частности, он используется по дефолту в популярном кластерном продукте по автоматическому развертыванию и управлению контейнерами - Kubernetes. По сути он стал стандартом отрасли, хотя поддерживает работу не только на базе docker, но по факту в основном используют его. Я это все к тому, что docker с нами надолго :)
Пару тройку лет назад считалось, что docker лучше всего разворачивать на Ubuntu. С Centos были некоторые проблемы, но где-то в середине развития 7-й ветки они все были решены. Подробности я уже не помню, но по факту сейчас нет принципиальной разницы. Я запускаю контейнеры как на ubuntu, так и на centos. Обычно разработчики просят убунту, так как она им привычна. Лично я сам предпочитаю Centos. Там еще пока нет рекламы в syslog.
С установкой Docker на Centos 7 нет никаких проблем. С 8-й версией есть нюансы. Расскажу обо всем по порядку. Если у вас еще нет готовой системы, то вот мои статьи по теме - установка и настройка centos.
Установка 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 в 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 запущен и работает.
Установка docker-compose на Centos
Зачастую для работы с докером требуется также docker-compose. Он позволяет быстро запускать проекты, состоящие из нескольких контейнеров. По своей сути docker-compose просто скрипт на python. Так что для его работы нужен собственно сам скрипт и некоторые компоненты python. Последнюю версию скрипта можно посмотреть в репозитории на github - https://github.com/docker/compose/releases/. В моем случае это 1.27.4.
Устанавливаем docker-compose на Centos.
# curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
Делаем файл исполняемым и на всякий случай добавляем символьную ссылку еще и в /usr/bin.
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Смотрим, все ли корректно установилось.
# docker-compose -v
docker-compose version 1.27.4, build 40524192
Для теста можете запустить что-то с помощью docker-compose. Например, установить WordPress. Для этого создаем файл docker-compose.yaml следующего содержания.
version: '3'
services:
mysql:
image: mysql:8
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- "./db:/var/lib/mysql"
wordpress:
image: wordpress:php7.4-apache
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
WORDPRESS_DB_NAME: wordpress
volumes:
- "./wp:/var/www/html/"
После этого запускаем проект.
# docker-compose up
Поднимутся два контейнера - один с mysql, другой с web сервером и исходниками wordpress. Если получите ошибку соединения с базой данных:
MySQL Connection Error: (2002) No route to host
Значит у вас запущен firewalld. Он не дает нормально работать dns в докере. Вам необходимо отключить firewalld и перезапустить докер.
# systemctl stop firewalld
# systemctl restart docker
После этого запускайте docker-compose еще раз и проверяйте работу. Должно получиться примерно так.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4edc21405e4 wordpress:php7.4-apache "docker-entrypoint.s…" 31 minutes ago Up 52 seconds 0.0.0.0:80->80/tcp root_wordpress_1
2c80b7811bb5 mysql:8 "docker-entrypoint.s…" 31 minutes ago Up 52 seconds 3306/tcp, 33060/tcp root_mysql_1
Docker-compose успешно установлен и проверен на Centos. Можно использовать по назначению.
Заключение
На этом по установке Docker и docker-compose на centos у меня все. Ссылка на официальную документацию - https://docs.docker.com.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.