CentOS 8 и Docker CE

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

Открывая различные статьи с советами, натыкаюсь на рекомендацию отключить SELinux, это очень плохой совет. Лучше прочитайте мануал и разберитесь как настраивать SELinux (самостоятельно).

И свой путь хотелось бы начать с подготовки и настройки. Первым делом добавим репозиторий докера:

sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

После успешного добавления, нам необходимо установить сам докер, для этого выполним:

sudo dnf install docker-ce

Добавим нашему пользователю возможность запуска докера, добавив его в нужную группу:

sudo usermod -aG docker $USER

Для возможности обмена данными между контейнерами можно пойти таким путём:

sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --permanent --zone=public --change-interface=docker0
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 4 -i docker0 -j ACCEPT
sudo firewall-cmd --reload

Вот мы и добрались до самой интересной части, подготовка контейнеров. И для примера попробуем запустить связку nginx + PHP-fpm. Для этого необходимо установить docker-compose, обычно с установкой проблем не бывает, пропустим этот момент. И подготовим первый файл конфигурации, у нас это будет docker-compose.yml со следующим содержимым:

web:
 image: nginx:latest
 ports:
 - "8080:80"

После сохранения файла, в этой же директории, мы можем смело выполнить команду:

docker-compose up

Постучавшись на ваш хост из браузера по 8080 порту, мы получим стандартное приветствие от nginx. Совсем просто? Тогда движемся дальше и создадим конфигурацию nginx и добавим в неё php-fpm. Изменим наш docker-compose.yml файл:

version: "3.3"
services:
 web:
  image: "nginx:latest"
  ports:
  - 80:80
  volumes:
  - ./code:/code
  - ./conf/site.conf:/etc/nginx/conf.d/default.conf
  networks:
  - code-network
 php:
  image: "php:7.4.1-fpm"
  volumes:
  - ./code:/code
  networks:
  - code-network
networks:
 code-network:
  driver: bridge

Создадим папку conf и в ней новый файл site.conf со следующим содержимым:

server {
    index index.php index.html;
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

И соответственно создадим папку code с файлом index.php содержимое может быть любым, но в нашем примере это будет:

<?php phpinfo(); ?>

Вот и всё. Это был краткий курс, без подробных объяснений.