Добавить в корзинуПозвонить
Найти в Дзене
serveradmin.ru

Установка Docker на Centos

Это будет в основном техническая статья, так как постоянно хожу за этой информацией в поиск, а сейчас решил упростить себе задачу. Я подробно расскажу, как установить систему контейнеризации docker и docker-compose на CentOS 7 и 8. Тема распространенная и популярная, регулярно приходится устанавливать, настраивать и запускать контейнеры.
Введение
Думаю, не нужно каких-то подробных пояснений на
Оглавление

Это будет в основном техническая статья, так как постоянно хожу за этой информацией в поиск, а сейчас решил упростить себе задачу. Я подробно расскажу, как установить систему контейнеризации 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

-2

Устанавливаем Docker на Centos 8.

# dnf install docker-ce

-3

Я хотел рассказать о некоторых нюансах установки на 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

-4

Все нормально, Docker успешно стартовал. Проверим его работу, запустив какой-нибудь контейнер. Например, официальный образ nginx. Сначала загрузим его.

# docker pull nginx

-5

Проверяем список образов.

# 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

-6

Несмотря на то, что указан 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

-7

Запускаем докер и добавляем в автозагрузку.

# 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

-8

На этом установка 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 еще раз и проверяйте работу. Должно получиться примерно так.

-9

# 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

-10

Docker-compose успешно установлен и проверен на Centos. Можно использовать по назначению.

Заключение

На этом по установке Docker и docker-compose на centos у меня все. Ссылка на официальную документацию - https://docs.docker.com.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.