Запуск двух нод для web кластера nginx

запуск двух нод для web кластера nginx (сам 
прокси-балансировщик в отдельной статье)

устанавливаем docker
#yum install docker

включаем и стартуем сервис:
#systemctl enable docker.service
#systemctl start docker.service

Для начала создадим под этот проект папку и заходим в нее:
#mkdir /site (папка может быть названа как угодно)
#cd /site

Дальше строим структуру папок таким образом:
#mkdir mysql nginx php

Создаем понятную среду для nginx:
#cd nginx
#mkdir core html logs www
Создадим конфигурационный файл для Nginx:
#cd /core
#mkdir node1 node2
в каждой директории создаём по файлу test.conf
содержание:

 server {
 listen 81; ## listen for ipv4; this line is default and implied
 root /var/www/html/test.ru;
  index index.php index.html index.htm;
 # Make site accessible from http://localhost/
  server_name test.ru;
 Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
 sendfile off;
 Add stdout logging
 error_log /var/log/nginx/test.ru-error.log info;
 access_log /var/log/nginx/test.ru-access.log;
 Add option for x-forward-for (real ip when behind elb)
 real_ip_header X-Forwarded-For;
 set_real_ip_from 172.16.0.0/12;
 block access to sensitive information about git
 location /.git {
 deny all;
 return 403;
 }
location / {
 First attempt to serve request as file, then
 as directory, then fall back to index.html
 try_files $uri $uri/ =404;
 }
 error_page 404
 /404.html;
 location = /404.html {
 root /var/www/errors;
 internal;
              }
 location ^~ /sad.svg {
 alias /var/www/errors/sad.svg;
 access_log off;
           }
 location ^~ /twitter.svg {
 alias /var/www/errors/twitter.svg;
 access_log off;
 }
 location ^~ /gitlab.svg {
 alias /var/www/errors/gitlab.svg;
 access_log off;
 }
 pass the PHP scripts to FastCGI server listening on socket
 #
 location ~ .php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+.php)(/.+)$;
                                                                                                                                                                                                                              fastcgi_pass
 unix:/var/run/php-fpm.sock;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
 fastcgi_index index.php;
# fastcgi_param GEOIP2_LONGITUDE $geoip2_data_longitude;
# fastcgi_param GEOIP2_LATITUDE $geoip2_data_latitude;
# fastcgi_param GEOIP2_CONTINENT_CODE $geoip2_data_continent_code;
# fastcgi_param GEOIP2_CONTINENT_NAME $geoip2_data_continent_name;
# fastcgi_param GEOIP2_COUNTRY_CODE $geoip2_data_country_code;
# fastcgi_param GEOIP2_COUNTRY_NAME $geoip2_data_country_name;
# fastcgi_param GEOIP2_STATE_CODE $geoip2_data_state_code;
# fastcgi_param GEOIP2_STATE_NAME $geoip2_data_state_name;
# fastcgi_param GEOIP2_CITY_NAME $geoip2_data_city_name;
# fastcgi_param GEOIP2_POSTAL_CODE $geoip2_data_postal_code;
include fastcgi_params;
       }
 location ~* .(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ {
 expires           5d;
      }
 deny access to . files, for security
 #
 location ~ /. {
 log_not_found off;
 deny all;
 }
 location ^~ /.well-known {
 allow all;
 auth_basic off;
 }
 }

и точно такой же файл в node2 с другим портом который прослушивает nginx
В папке /site/nginx/logs создаём две директории с названиями
#cd /site/nginx/logs
#mkdir node1 node2

скачиваем образ с nginx+php-fpm
#docker pull richarvey/nginx-php-fpm:latest
создаём контейнеры
#docker run -d --net=host -v /site/nginx/www/:/var/www/html -v /site/nginx/core/node1:/etc/nginx/sites-enabled -v /site/nginx/Logs/node1:/var/log/nginx --name node1 richarvey/nginx-php-fpm
#docker run -d --net=host -v /site/nginx/www/:/var/www/html -v /site/nginx/core/node2:/etc/nginx/sites-enabled -v /site/nginx/Logs/node2:/var/log/nginx --name node2 richarvey/nginx-php-fpm

--name node2 имя контейнера. так с ним удобнее работать

аргумент -d указываем для того, чтобы отвязать 
работу контейнеров от консоли, т.е. 
запустить в режиме демона 

параметр --net=host говорит от том, 
что нужно запускать на физическом хосте, 
а не в отдельной подсети(по-умолчанию). 
так проще обращаться по портам.

-v проброс директории с контейнера на физический хост.

Так же при запуск необходимо сделать 
автозапуск контейнеров.
для этого в документации есть описание:
https://docs.docker.com/config/containers/start-containers-automatically/ 
но мы запустили без параметра 
docker run  --restart=always
поэтому обновим конфиг с помощью команды update:
#docker update --restart=always node1
#docker update --restart=always node2 

другие полезные команды:
#docker ps -a
просмотр контейнеров
#docker rm имя контейнера или id
удаление контейнера
#docker stop site
#docker start site

#docker exec --tty --interactive "имя контейнера" bash
подключение к контейнеру для запуска команд.

Запустить контейнер с автоматическим удалением (после остановки) 
#docker run --rm -ti my_container my_image 
Показать список образов 
#docker images 
Удалить нерабочие контейнеры 
#docker container prune -f 
Удалить лишние образы 
#docker image prune -fa 
Показать логи контейнера 
#docker logs my_container -f 

Запись опубликована в рубрике docker, Новости. Добавьте в закладки постоянную ссылку.