Как установить Docker в CentOS 8
Установка Docker в CentOS 8
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