Как установить Docker на Centos

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

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

Думаю, не нужно каких-то подробных пояснений на тему того, что такое Докер и зачем он нужен. Сейчас этот продукт у всех на слуху. В частности, он используется по дефолту в популярном кластерном продукте по автоматическому развертыванию и управлению контейнерами - 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

Установка docker на centos 8

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

Загрузка образа 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

Установка Docker в Centos 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

Проверка docker

На этом установка 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-compose на centos

# 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

Запуск wordpress через docker-compose

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

Заключение

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

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

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

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

19 комментариев

  1. Екатерина

    ERROR: Get https://registry-1.docker.io/v2/: x509: certificate signed by unknown authority

  2. привет, а где настройки апача в этом случае можно настроить? чтобы домен прописать?

  3. На версии CentOS 8+ (столкнулся на 8.3) с высокой вероятностью после после добавления репозитория docker-ce.repo вы не сможете штатно установить docker-ce, а зачастую даже выполнение команды dnf update приведёт к ошибке (конфликту) предустановленных компонентов Podman и Buildah.
    В случае если эти компоненты не используются вами, рекомендуется выполнить yum erase podman buildah и продолжать спокойную жизнь :)

    • Подобная ошибка была в 8.0 из-за проблем с зависимостями, потом в какой-то момент пропала. Странно, что опять появилась.

    • Сергей У.

      на самой свежей centOS 8.4, получил ту же самую ошибку *Buildah

      решение именно такое:: yum erase podman buildah

  4. Теперь в Kubernetes не будет Docker'а - для создания контейнеров будет использоваться containerd или CRI-O:
    https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
    https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/

    • В контексте данной статьи это не так важно. Кубер все равно автоматически раскатывают. Никто руками докеры не ставит на ноды.

      • Да, но желательно знать что под капотом.
        За статью спасибо, проверил, работает.

  5. Я бы не сказал, что нет проблем с установкой на Centos 8 докера. Проблема с зависимостями есть и никуда не делись. Вот сейчас ставлю, то podman не тот, то buildah не такой.

  6. Спасибо большое за полезную информацию

  7. Вячеслав

    А у меня для этого есть вот такая вот последовательность
    curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh #ставим Docker на голую ОС
    systemctl restart docker.service
    systemctl enable docker.service
    curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose #Ставим docker-compose на любую ОСь из поддерживаемых
    chmod +x /usr/bin/docker-compose #Делаем исполняемым
    # Проверяем версии
    docker --version
    docker-compose --version

  8. благодарность за пример как раз с вордпрессом в докере. надо будет попробовать

  9. Спасибо за пост

  10. Зачем поднимать docker на CentOS 8? Если для задач с контейнеризацией у RHEL есть отличный продукт - podman. Который поддерживает systemd для контейнеров и работает без демона.

    • Да много зачем нужно. Если развивать тему, то можно сказать, зачем поднимать контейнеры вручную, если можно управлять ими централизованно и т.д. Начать можно с того, что podman в списке доступных дистрибутивов для использования отсутствует у большинства хостеров.

  11. Спасибо большое за статью!

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar