ุจูŠุฆุฉ ุชุทูˆูŠุฑ PHP ุชุนุชู…ุฏ ุนู„ู‰ Docker

ุญู„ ูŠุณู…ุญ ู„ูƒ ุจุฅู†ุดุงุก ุจูŠุฆุฉ ุชุทูˆูŠุฑ PHP ุนุงู„ู…ูŠุฉ ุนู„ู‰ ูƒู…ุจูŠูˆุชุฑ ู…ุญู„ูŠ   ููŠ  ุบุถูˆู† 30-40 ุฏู‚ูŠู‚ุฉ .

ู„ู…ุงุฐุง DockerุŸ

  • Docker ู„ูŠุณ ู†ุธุงู… VM ุŒ ูู‡ูˆ ู„ุง ูŠุตู…ู… ุฃุฌู‡ุฒุฉ ุงู„ูƒู…ุจูŠูˆุชุฑ. ุจุงุณุชุฎุฏุงู… Docker ุŒ ุณุชุญุตู„ ุนู„ู‰ ุงู„ุญุฏ ุงู„ุฃุฏู†ู‰ ู…ู† ุงุณุชู‡ู„ุงูƒ ุงู„ู…ูˆุงุฑุฏ. ุชุชูุงุนู„ ุญุงูˆูŠุงุช Docker ู…ุจุงุดุฑุฉู‹ ู…ุน ู†ูˆุงุฉ ุงู„ูƒู…ุจูŠูˆุชุฑ (ุฃูˆ ู†ูˆุงุฉ ุงู„ู…ุถูŠู) ุŒ ูˆู„ูƒู†ู‡ุง ุฃูŠุถู‹ุง ุชุนุฒู„ ุงู„ุจุฑู†ุงู…ุฌ ุนู„ู‰ ู…ุณุชูˆู‰ ุงู„ุนู…ู„ูŠุฉ.

  • ุณุฑุนุฉ ู†ุดุฑ ุนุงู„ูŠุฉ. ูŠู…ูƒู†ูƒ ุงุณุชุฎุฏุงู… ุตูˆุฑ ุนุงู…ู„ ุฅุฑุณุงุก ู…ุณุจู‚ุฉ ุงู„ุชุฑูƒูŠุจ ูŠุชู… ุชุซุจูŠุชู‡ุง ูˆุชุดุบูŠู„ู‡ุง ููŠ ุซูˆุงู†ู.

  • ูŠู…ูƒู† ุชุดุบูŠู„ ุงู„ุชุทุจูŠู‚ุงุช ุฏุงุฎู„ ุญุงูˆูŠุงุช docker ุนู„ู‰ ุฃูŠ ุฌู‡ุงุฒ ู…ุซุจุช ุนู„ูŠู‡ Docker ุŒ ู…ุน ู†ูุณ ุงู„ุจูŠุฆุฉ.

  • ุฅู…ูƒุงู†ูŠุฉ ุงู„ูุตู„ ุงู„ุจุณูŠุท ู„ุจูŠุงู†ุงุช ุงู„ู…ุณุชุฎุฏู… ูˆุฎุฏู…ุงุช ุงู„ุญุงูˆูŠุงุช. ุฅุฐุง ูƒุณุฑุช ุฃูˆ ุญุฐูุช ุญุงูˆูŠุฉ ุนุงู…ู„ ุงู„ุฅุฑุณุงุก ุŒ ูู„ู† ุชุถูŠุน ุงู„ุจูŠุงู†ุงุช ุŒ ู„ุฃู†ู‡ุง ู„ู† ุชู†ุชู…ูŠ ุฅู„ู‰ ุงู„ุญุงูˆูŠุฉ. ุชุนู…ู„ ุงู„ุญุงูˆูŠุฉ ูƒุฎุฏู…ุฉ ูู‚ุท ุŒ ูˆู„ุง ุชุฎุฒู† ุงู„ุจูŠุงู†ุงุช ุงู„ุชูŠ ู„ุง ูŠู…ูƒู† ูู‚ุฏู‡ุง ุจูŠู† ุนู…ู„ูŠุงุช ุงู„ุชุดุบูŠู„.

  • ูŠู…ูƒู†ูƒ ุฅุถุงูุฉ ุญุงูˆูŠุงุช ุฌุฏูŠุฏุฉ ุจุณุฑุนุฉ ูƒุจูŠุฑุฉ ุŒ ูˆุชุบูŠูŠุฑ ุชูƒูˆูŠู†ู‡ุง ุŒ ูˆุชุดุบูŠู„ ุฅุตุฏุงุฑุงุช ู…ุฎุชู„ูุฉ ู…ู† ู‚ูˆุงุนุฏ ุงู„ุจูŠุงู†ุงุช ุนู„ู‰ ู†ูุณ ุงู„ุฌู‡ุงุฒ.

ุงู„ู…ุชุทู„ุจุงุช

  • ุดุฎุต ุณุฎูŠู.

  • ู…ุญุฑูƒ Docker 19.x ูˆุงู„ุฅุตุฏุงุฑุงุช ุงู„ุฃุญุฏุซ.

ุชุทูˆูŠุฑ ู‚ุฏุฑุงุช ูˆู…ู…ูŠุฒุงุช ุงู„ุจูŠุฆุฉ 

  • ุงู„ุนุฏูŠุฏ ู…ู† ุฅุตุฏุงุฑุงุช  PHP - 7.3 ูˆ 7.1  ู…ุน ู…ุฌู…ูˆุนุฉ ู…ู† ุงู„ุฅุถุงูุงุช ุงู„ุฃูƒุซุฑ ุดูŠูˆุนู‹ุง.

  • ุงู„ู‚ุฏุฑุฉ ุนู„ู‰ ุงุณุชุฎุฏุงู… ุฅุตุฏุงุฑุงุช PHP ู…ุฎุชู„ูุฉ ู„ู…ุดุงุฑูŠุน ุงู„ูˆูŠุจ  .

  • ู…ุฑุงู‚ุจ ุนู…ู„ูŠุฉ ุงู„ู…ุดุฑู ุฌุงู‡ุฒ  ู„ู„ุฐู‡ุงุจ .

  • ุฎุงุฏู… ูˆูŠุจ Nginx ู…ู‡ูŠุฃ ู…ุณุจู‚ู‹ุง .

  • ู‚ูˆุงุนุฏ ุงู„ุจูŠุงู†ุงุช:  MySQL 5.7 ูˆ  MySQL 8 ูˆ  PostgreSQL  (ุงู„ุฃุญุฏุซ) ูˆ  MongoDB 4.2 ูˆ  Redis (ุงู„ุฃุญุฏุซ).

  •  .env.

  •  docker-compose.yml.

  •  docker-compose.yml.

  • docker- .

  •  Dockerfile   PHP.

  • docker-, .

, โ€”  Docker .

https://github.com/drandin/docker-php-workspace

 

.

โ”œโ”€โ”€ .env-example
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ .ssh
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ mongo
โ”œโ”€โ”€ mysql-5.7
โ”œโ”€โ”€ mysql-8
โ”œโ”€โ”€ nginx
โ”œโ”€โ”€ php-ini
โ”œโ”€โ”€ php-workers
โ”œโ”€โ”€ php-workspace
โ”œโ”€โ”€ postgres
โ”œโ”€โ”€ projects
โ””โ”€โ”€ redis

.gitkeep. , Git.

.gitkeep โ€” , , .

.env-example 

.

#  
WORKSPACE_TIMEZONE='Europe/Moscow'

# XDEBUG
DOCKER_PHP_ENABLE_XDEBUG='on'

#  Nginx
# ,   
#     
NGINX_PORT=80

#  Redis
# ,   
#     
REDIS_PORT=6379
#  Postgres
POSTGRES_DB=test
POSTGRES_USER=pg_user
POSTGRES_PASSWORD=secret
POSTGRES_PORT=54322

#    MySQL 8.x  MySQL 5.7.x
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=test

#  MySQL 8.x
# ,   
#     
MYSQL_8_PORT=4308

#  MySQL 5.7.x
# ,   
#     
MYSQL_5_7_PORT=4307

#  MongoDB
# ,   
#     
MONGO_PORT=27017

#  PHP 7.3
#  ,    
PHP_7_3_PORT=9003

#  PHP 7.1
#  ,    
PHP_7_1_PORT=9001

.gitignore

, , ssh- . gitignore.

.ssh 

ssh-.

readme.md 

.

docker-compose.yml 

 YML,  Docker. web-.

mongo 

MongoDB.

โ”œโ”€โ”€ configdb
โ”‚   โ””โ”€โ”€ mongo.conf
โ”œโ”€โ”€ db
โ””โ”€โ”€ dump

mongo.conf โ€”  MongoDB. , MongoDB .

db โ€” MongoDB.

dump โ€” .

mysql-5.7 

MySQL 5.7.

โ”œโ”€โ”€ conf.d
โ”‚   โ””โ”€โ”€ config-file.cnf
โ”œโ”€โ”€ data
โ”œโ”€โ”€ dump
โ””โ”€โ”€ logs

config-file.cnf โ€” . , MySQL 5.7 .

data โ€” MySQL 5.7.

dump โ€” .

logs โ€” .

mysql-8 

MySQL 8.

โ”œโ”€โ”€ conf.d
โ”‚   โ””โ”€โ”€ config-file.cnf
โ”œโ”€โ”€ data
โ”œโ”€โ”€ dump
โ””โ”€โ”€ logs

config-file.cnf โ€” . , MySQL 8 .

data โ€” MySQL 8.

dump โ€” .

logs โ€” .

nginx 

Nginx .

โ”œโ”€โ”€ conf.d
โ”‚   โ”œโ”€โ”€ default.conf
โ”‚   โ””โ”€โ”€ vhost.conf
โ””โ”€โ”€ logs

default.conf โ€” , .

vhost.conf โ€” web-.

 vhost.conf :

server {
    listen 80;
    index index.php index.html;
    server_name project-1.localhost;
    error_log /var/log/nginx/project-1.error.log;
    access_log /var/log/nginx/project-1.access.log combined if=$loggable;
    root /var/www/project-1.ru;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

server {
    listen 80;
    index index.php index.html;
    server_name project-2.localhost;
    error_log /var/log/nginx/project-2.error.log;
    access_log /var/log/nginx/project-2.access.log combined if=$loggable;
    root /var/www/project-2.ru;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

  web- โ€” project-1.localhost  project-2.localhost.

, docker-.

,  project-1.localhost :

fastcgi_pass php-7.3:9000;

php-7.3 โ€” docker-,  9000 โ€” . , docker-compose.yml.

php-ini 

PHP.

โ”œโ”€โ”€ 7.1
โ”‚   โ””โ”€โ”€ php.ini
โ””โ”€โ”€ 7.3
    โ””โ”€โ”€ php.ini

 PHP โ€” .

php-workers 

 Supervisor.

โ”œโ”€โ”€ 7.1
โ”‚   โ””โ”€โ”€ supervisor.d
โ”‚       
โ””โ”€โ”€ 7.3
    โ””โ”€โ”€ supervisor.d

PHP โ€” .

php-workspace 

, , docker- PHP.

โ””โ”€โ”€ Dockerfile

Dockerfile โ€” , , PHP.

postgres

 PostgreSQL.

โ”œโ”€โ”€ .gitkeep
โ”œโ”€โ”€ data
โ””โ”€โ”€ dump

data โ€” PostgreSQL.

dump โ€” .

projects 

web-.

, web-.

:

project-1.ru
project-2.ru 
...

projects php-7.1 php-7.3.

php-7.1 php-7.3, /var/www , projects .

redis 

key-value Redis.

โ”œโ”€โ”€ conf
โ””โ”€โ”€ data

conf โ€” .

data โ€” , Redis .

docker- PHP 

,  php-7.x  php-workspace/Dockerfile.

, :

  • bash

  • htop

  • curl

  • Git

  • omposer

  • make

  • wget

  • NodeJS

  • Supervisor

  • npm

 

1.  .

git clone https://github.com/drandin/docker-php-workspa

, . .

2.  .env-example  .env

cp .env-example .env

,  .env. .

3. web- projects.

, ,  2 :

project-1.ru
project-2.ru

project-1.ru โ€”  PHP 7.3,  project-2.ru โ€”  PHP 7.1.

4.  Nginx.

 ./nginx/conf.d/.

5. ( ) web- .

web-  hosts  .

 hosts  web-  IP docker- Nginx.

 Mac  Linux   /etc/hosts.  Windows   C:\Windows\System32\drivers\etc\hosts.

, , :

127.0.0.1   project-1.localhost
127.0.0.1   project-2.localhost

, ,  Nginx, docker-,  127.0.0.1  web-  80.

.dev  . โ€” .localhost  .test.

6[, ]  web-.

Web- http- .

docker- php-7.1 web- โ„– X  web- โ„– Y, docker- php-7.3. ,  /etc/hosts  .

 /etc/hosts.

โ€”  extra_hosts  php-7.1  php-7.3  docker-compose.yml.

:

...  
  php-7.1:  
  ...
    extra_hosts:
      - 'project-1.localhost:IP_HOST_MACHINE'
      - 'project-2.localhost:IP_HOST_MACHINE'
  ...

IP_HOST_machine โ€” IP , docker- .

 Mac, docker-  docker.for.mac.localhost.

 IP   Mac  , :

docker run -it alpine ping docker.for.mac.localhost

, - :

PING docker.for.mac.localhost (192.168.65.2): 56 data bytes
64 bytes from 192.168.65.2: seq=0 ttl=37 time=0.286 ms
64 bytes from 192.168.65.2: seq=1 ttl=37 time=0.504 ms
64 bytes from 192.168.65.2: seq=2 ttl=37 time=0.801 ms

, IP-,  extra_hosts  php-7.1  php-7.3  docker-compose.yml.

...  
  php-7.1:  
  ...
    extra_hosts:
      - 'project-1.localhost:192.168.65.2'
      - 'project-2.localhost:192.168.65.2'
  ...

8. .

, docker- php-7.1  php-7.3  :

MySQL 5.7

mysql-5.7

3308

MySQL 8

mysql-8

3308

PostgreSQL

postgres

5432

MongoDB

mongo

27017

Redis

redis

6379

web-.

:

  • โ€” 127.0.0.1.

  • โ€”  .env.

7. .

:

docker-compose build && docker-compose up -d

. 10 30 . . .

, . 

 Docker Dashboard  :

8. SSH-.

web- SSH-, ,  Composer  .

SSH- :

ssh-keygen -f ./.ssh/id_rsa -t rsa -b 2048 -C "your-name@example.com"

 your-name@example.com   Email.

 .ssh/   2  โ€” .

9. docker-.

:

docker ps

, :

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                               NAMES
8d348959c475        docker-php-workspace_php-7.1   "docker-php-entrypoiโ€ฆ"   6 minuts ago        Up 54 seconds       0.0.0.0:9001->9000/tcp              php-7.1
a93399727ff6        docker-php-workspace_php-7.3   "docker-php-entrypoiโ€ฆ"   6 minuts ago        Up 53 seconds       0.0.0.0:9003->9000/tcp              php-7.3
5cd80ac95388        nginx:stable-alpine            "/docker-entrypoint.โ€ฆ"   6 minuts ago        Up 51 seconds       0.0.0.0:80->80/tcp                  nginx
70182bc9e44c        mysql:5.7                      "docker-entrypoint.sโ€ฆ"   6 minuts ago        Up 54 seconds       33060/tcp, 0.0.0.0:4307->3306/tcp   mysql-5.7
46f2766ec0b9        mysql:8.0.21                   "docker-entrypoint.sโ€ฆ"   6 minuts ago        Up 53 seconds       33060/tcp, 0.0.0.0:4308->3306/tcp   mysql-8
a59e7f4b3c61        mongo:4.2                      "docker-entrypoint.sโ€ฆ"   6 minuts ago        Up 54 seconds       0.0.0.0:27017->27017/tcp            mongo
eae8d62ac66e        postgres:alpine                "docker-entrypoint.sโ€ฆ"   6 minuts ago        Up 53 seconds       0.0.0.0:54322->5432/tcp             postgres
bba24e86778a        redis:latest                   "docker-entrypoint.sโ€ฆ"   6 minuts ago        Up 54 seconds       0.0.0.0:6379->6379/tcp              redis

10. web-.

web- ,  Composer  NPM, .

 php-7.1  php-7.3   Composer  NPM.

 php-7.1:

docker exec -it php-7.1 bash

php-7.3:

docker exec -it php-7.3 bash

web- .

,  Composer  :

composer install

 

.

docker-? 

:

docker exec -it container_name bash

container_name โ€” .

, ? 

docker-compose down

docker ps -a

docker-? 

docker inspect containername

containername โ€” .

PHP, php-7.3? 

 php-7.3 , :

docker exec -it php-7.3 php -m

:

docker rm -v $(docker ps -aq)

:

docker rm -v $(docker ps -q)

:

docker rm -v $(docker ps -aq -f status=exited)

MySQL, PostgreSQL MongoDB

web- , .

PostgreSQL? 

:

docker exec -i postgres psql --username user_name database_name < /path/to/dump/pgsql-backup.sql

postgres :

psql --username user_name database_name < /path/to/dump/pgsql-backup.sql

user_name โ€” . postgres_USER (. .env).

database_name โ€” . postgres_DB (. .env).

MySQL? 

.

1

, .

 mysql/conf.d/config-file.cnf   slow_query_log=0   long_query_time, 1000.

 gzip, :

gunzip databases-dump.sql.gz

, :

docker exec -i mysql mysql --user=root --password=secret --force < databases-dump.sql

โ€” , .

MySQL  :

mysql: [Warning] Using a password on the command line interface can be insecure

 --force  MySQL, . , .

2

 Percona XtraBackup.

Percona XtraBackup โ€” MySQL.

,  XtraBackup  : https://medium.com/@drandin/---mysql----xtrabackup-26bd3f843075

ูƒูŠู ูŠุชู… ู†ุดุฑ ู…ู„ู ุชูุฑูŠุบ MongoDBุŸ 

  • ุงู†ุณุฎ ู…ู„ูุงุช ุงู„ุชูุฑูŠุบ ุฅู„ู‰ ุฏู„ูŠู„  mongo / dump .

  • ุฃุฏุฎู„ ุญุงูˆูŠุฉ  ุงู„ู…ูˆู†ุฌูˆ :

docker exec -it mongo sh

ู‚ู… ุจุชุดุบูŠู„ ุงู„ุฃู…ุฑ ุงู„ุชุงู„ูŠ ู„ุชูˆุณูŠุน ู‚ุงุนุฏุฉ ุจูŠุงู†ุงุช ุงู„ุชูุฑูŠุบ  database_name ' :

mongorestore -d database_name /dump/databases/database_nam

ู…ุณุชูˆุฏุน ู…ุดุฑูˆุน ุฌูŠุช: https://github.com/drandin/docker-php-workspace




All Articles