Build php development environment with win10 docker toolbox

Posted by Cless on Sat, 19 Oct 2019 16:01:09 +0200

Download mirroring

docker pull mysql:5.7 
docker pull php:7.2-fpm
docker pull nginx
docker pull redis:3.2

Set up shared files

Host create directory
E:\wnmp\mysql57\conf
E:\wnmp\mysql57\log
E:\wnmp\php72\conf
E:\wnmp\php72\conf
E:\wnmp\nginx\conf
E:\wnmp\nginx\conf
E:\wnmp\www
vmware setting up file sharing

Pictured

After setting, execute docker machine restart default at docker QuickStart terminal.

Install Mysql

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql57 mysql:5.7

Copy profile
PS C:\Windows\system32> docker cp mysql57:/var/log/mysql E:\wnmp\mysql57\log
PS C:\Windows\system32> docker cp mysql57:/etc/mysql E:\wnmp\mysql57\conf
Reinstall mysql and specify the configuration file
PS C:\WINDOWS\system32> docker stop mysql57
mysql57
PS C:\WINDOWS\system32> docker rm mysql57
mysql57
PS C:\WINDOWS\system32> docker run -d -v /wnmp/mysql57/log:/var/log/mysql/ -v /wnmp/mysql57/conf:/etc/mysql/ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql57 mysql:5.7
Initialize database
docker exec -ti mysql57 /bin/bash
mysql_secure_installation 
#View Mysql status
root@d7bd0712bcf8:/# mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.28 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Install PHP

PS C:\WINDOWS\system32> docker run -d -v /wnmp/www:/var/www/html -p 9000:9000 --link mysql57:mysql --name php72 php:7.2-fpm
Copy profile
PS C:\Windows\system32> docker cp php72:/usr/local/etc E:\wnmp\php72\conf
PS C:\Windows\system32> docker cp php72:/usr/local/var/log E:\wnmp\php72\log
PS C:\Windows\system32> docker cp php72:/var/www/html E:\wnmp\www
Reinstall PHP and specify the configuration file
PS C:\WINDOWS\system32> docker stop php72
php72
PS C:\WINDOWS\system32> docker rm php72
php72
docker run -d -v /wnmp/php72/conf/etc:/usr/local/etc -v /wnmp/php72/log:/usr/local/var/log -v /wnmp/www:/var/www/html -p 9000:9000 --link mysql57:mysql --name php72 php:7.2-fpm
# View PHP version
PS C:\Windows\system32> docker exec -ti php72  /bin/bash
root@742150f14d8a:/var/www/html# php -v
PHP 7.2.23 (cli) (built: Oct  5 2019 00:31:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Ngixn

install
PS C:\WINDOWS\system32> docker run -d -p 80:80 --link php72:phpfpm --name nginx nginx:latest
Copy profile
PS C:\Windows\system32>  docker cp nginx:/etc/nginx/ E:\wnmp\nginx\conf
PS C:\Windows\system32>  docker cp nginx:/var/log/nginx/ E:\wnmp\nginx\log
Reinstall and specify profile
PS C:\WINDOWS\system32> docker stop nginx
nginx
PS C:\WINDOWS\system32> docker rm nginx
nginx
PS C:\WINDOWS\system32> docker run -d -p 80:80 -v /wnmp/www:/var/www/html -v /wnmp/nginx/conf/nginx:/etc/nginx/ -v /wnmp/nginx/log:/var/log/nginx/ --link php72:phpfpm --name nginx nginx
#Browser access http://192.168.99.100/ verification successful

Redis

docker run -p 6379:6379 -d redis:3.2 redis-server

PHP extension installation

redis
PS C:\Windows\system32> docker exec -ti php72 /bin/bash
root@742150f14d8a:/var/www/html# pecl install -o -f redis
#After installation, add Ini configuration. At this time, redis under docker is configured in
E:\wnmp\php72\conf\etc\php\conf.d\docker-php-ext-sodium.ini
# Restart php

Configure test domain name

#E:\wnmp\nginx\conf\nginx\conf.d create a new test.conf under the directory
#E:\wnmp\www directory create a new test directory. Create index.php in the directory and output phpinfo;
server {
    listen       80;
    server_name  test.com;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /var/www/html/test;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
          root   /var/www/html/test;
        fastcgi_pass   192.168.99.100:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

#nginx reloads the configuration or restarts.

#The local host resolves the domain name test.com, and phpinfo is normal.

The above are all installation configurations and tests. Of course, in the end, we need to add these docker containers to the auto start.

docker container update --restart=always php72
docker container update --restart=always mysql57
docker container update --restart=always nginx
docker container update --restart=always redis

Topics: PHP Docker Nginx Windows