ุญู ูุณู ุญ ูู ุจุฅูุดุงุก ุจูุฆุฉ ุชุทููุฑ 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
โโโ dumpmongo.conf โ MongoDB. , MongoDB .
db โ MongoDB.
dump โ .
mysql-5.7
MySQL 5.7.
โโโ conf.d
โ โโโ config-file.cnf
โโโ data
โโโ dump
โโโ logsconfig-file.cnf โ . , MySQL 5.7 .
data โ MySQL 5.7.
dump โ .
logs โ .
mysql-8
MySQL 8.
โโโ conf.d
โ โโโ config-file.cnf
โโโ data
โโโ dump
โโโ logsconfig-file.cnf โ . , MySQL 8 .
data โ MySQL 8.
dump โ .
logs โ .
nginx
Nginx .
โโโ conf.d
โ โโโ default.conf
โ โโโ vhost.conf
โโโ logsdefault.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.iniPHP โ .
php-workers
Supervisor.
โโโ 7.1
โ โโโ supervisor.d
โ
โโโ 7.3
โโโ supervisor.dPHP โ .
php-workspace
, , docker- PHP.
โโโ DockerfileDockerfile โ , , PHP.
postgres
PostgreSQL.
โโโ .gitkeep
โโโ data
โโโ dumpdata โ 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
โโโ dataconf โ .
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.ruproject-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 bashphp-7.3:
docker exec -it php-7.3 bashweb- .
, 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.sqlpostgres :
psql --username user_name database_name < /path/to/dump/pgsql-backup.sqluser_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