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(); ?>
Вот и всё. Это был краткий курс, без подробных объяснений.