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