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

Установка Docker в CentOS 8

 3 мин. на чтение
docker

Docker - open source решение для разработки, доставки и эксплуатации приложений. В настоящее время является самой популярной платформой контейнерной виртуализации. В данном материале я предоставлю пошаговую инструкцию установки Docker в операционной системе CentOS.


Docker Inc. первыми начали использовать технологии namespace и cgroups. Благодаря чему, несмотря на все недостатки, сейчас Docker занимает лидирующие позиции в области контейнеризации приложений. Так мы получили единый командный интерфейс для создания контейнеров, запуска, монтирования томов, а так же запуска процессов внутри них. С появлением систем оркестрации типа kubernetes, Docker стал еще более популярным.

Установка docker

Первым делом необходимо добавить официальный репозиторий:

# 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 CE Stable - x86_64                        45 kB/s | 4.8 kB     00:00
Available Packages
docker-ce.x86_64                3:19.03.14-3.el8                docker-ce-stable

Производим установку Docker:

# dnf install docker-ce

Проверяем, что установка прошла хорошо и добавляем службу в автозагрузку:

# systemctl enable --now docker
# systemctl status docker
systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor pres>
   Active: active (running) since Thu 2020-10-19 20:48:42 EET; 1min 20s ago
     Docs: https://docs.docker.com
 Main PID: 14442 (dockerd)
    Tasks: 10
   Memory: 43.4M
   CGroup: /system.slice/docker.service

Docker успешно стартовал. Теперь давайте запустим какой-нибудь контейнер. Пусть это будет nginx:

# docker run --name mynginx1 -p 80:80 -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
852e50cd189d: Pull complete
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
b1018611ead10c0cb88c89539b564a5ccc0aa5c9e13d4a42725ae9c50ee8858e

Смотрим перечень запущенных контейнеров:

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             
	STATUS              PORTS                NAMES
b1018611ead1        nginx               "/docker-entrypoint.…"   38 seconds ago      
	Up 36 seconds       0.0.0.0:80->80/tcp   mynginx1

Посмотрим открыт ли 80й порт в системе, на котором мы запускали nginx:

# netstat -tulnp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      14675/docker-proxy

Тут стоит обратить внимание на одну деталь. Выше видно, что указан ipv6 адрес. Но знайте, что контейнер nginx будет запущен в том числе и на ipv4. Это легко проверить. Если зайти браузером на страницу с ip адресом сервера, то увидите там стартовую страницу nginx.

Установка docker-compose

Запуск отдельного контейнера - это хорошо. Но что делать, если необходимо быстро поднять группу взаимосвязанных контейнеров? Тут нам на помощь приходит Docker Compose.

Скопируем последнюю версию:

# curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname \
  -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

Проверим текущую версию, только что установленной утилиты:

# docker-compose --version
docker-compose version 1.27.4, build 40524192

Запустим nginx как и в примере, когда мы устанавливали docker, но только с помощью docker-compose. Для этого создадим файл с описанием, что именно и как мы будем запускать:

# mcedit docker-compose.yaml

Скопируем в него следующие строки:

version: '3'
services:
  nginx:
    image: nginx:latest
    volumes:
      - nginx_data:/etc/nginx
    ports:
      - 80:80

volumes:
  nginx_data:

И выполним запуск нашего контейнера:

# docker-compose up -d
Creating network "tmp_default" with the default driver
Creating volume "tmp_nginx_data" with default driver
Creating tmp_nginx_1 ... done

Чтобы остановить выполнение, необходимо выполнить следующую команду:

# docker-compose down -v
Stopping tmp_nginx_1 ... done
Removing tmp_nginx_1 ... done
Removing network tmp_default
Removing volume tmp_nginx_data