Home » Linux » CentOS » Как установить Docker на Centos

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

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

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Введение

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

Онлайн курс по Linux

Если у вас есть желание освоить операционную систему Linux, не имея подходящего опыта, рекомендую познакомиться с онлайн-курсом Administrator Linux. Basic в OTUS. Курс для новичков, адаптирован для тех, кто только начинает изучение Linux. Обучение длится 4 месяца. Что даст вам этот курс:
  • Вы получите навыки администрирования Linux (структура Linux, основные команды, работа с файлами и ПО).
  • Вы рассмотрите следующий стек технологий: Zabbix, Prometheus, TCP/IP, nginx, Apache, MySQL, Bash, Docker, Git, nosql, grfana, ELK.
  • Умение настраивать веб-сервера, базы данных (mysql и nosql) и работа с сетью.
  • Мониторинг и логирование на базе Zabbix, Prometheus, Grafana и ELK.
  • Научитесь командной работе с помощью Git и Docker.
Смотрите подробнее программу по .

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

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

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

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

  1. Аватар

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

  2. Аватар

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

  3. Аватар

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

    • Zerox

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

  4. Аватар

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

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.