Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

  1. 开启Windows10中的Hyper-V(专业版)
    ··· 打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

  1. 修改虚拟硬盘的位置
    ··· a.启用后,使用搜索框搜索Hyper-V管理器,打开

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· b. 选择 Hyper-v设置

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· c.更改虚拟硬盘的的位置

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

  1. 下载Docker for Windows10
    ··· a. 下载地址:https://download.docker.com/win/stable/Docker for Windows Installer.exe (下载时,需要注册Docker账户。)
    ··· b. 双击等待安装完成即可
    ··· c. Docker启动之后右下角有个Docker图标 -> 右键图标 -> 选择settings打开如下界面

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· d. 选择选择Daemon,点击Basic改为Advanced,在下面的输入框中找到registry-mirrors属性,修改国内镜像源。(我用的阿里云Docker国内镜像)

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

最后点击 Apply 等待重启。

  1. 使用搜索框,找到Windows PowerShell,以管理员方式运行。
    ··· a. 尽量使用管理员方式,在搭建过程中涉及到从容器中拷贝文件到宿主机,需要权限,并且以后关于docker中的命令操作都会在PowerShell中完成。(以下不再提示)

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· b. 使用 docker version 查看docker版本信息,安装完成。

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

  1. 在win10里面创建目录来存放MySql/PHP/Nginx的配置文件及日志文件和存放项目的www文件(后面将会操作映射到本机的目录)

    1. * E:\wnmp\mysql-conf***

    1. E:\wnmp\mysql-log

    1. E:\wnmp\nginx-conf

    1. E:\wnmp\nginx-log

    1. E:\wnmp\php71-conf

    1. E:\wnmp\php71-log

    1. E:\wnmp\www\index.php index.php 可以写入 phpinfo();*

  2. 下载mysql5.6镜像
    ··· a. 输入命令: docker pull mysql:5.6 并且等待下载完成。
    ··· b. 下载完成之后,先简单创建一个mysql容器,因为在上一步中创建的MySql/PHP/Nginx等目录中还没有对应的配置及日志文件。需要我们从容器中先拷贝到宿主机目录里。
    ··· c. 先创建一个MySql的简单容器,输入命令:
    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6
    (具体命令解释,参考docker官方文档)
    ··· d. 创建成功之后,进入容器中,docker exec -ti mysql /bin/bash (这命令中的mysql是上一句命令中对mysql:5.6进行的重命名)找到对应的配置文件位置和日志文件位置。

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· e. 将对应的日志文件及配置文件复制出来
命令1:docker cp mysql:/var/log/mysql E:\wnmp\mysql-log
命令2:docker cp mysql:/etc/mysql E:\wnmp\mysql-conf
因为复制的是整个目录,所以复制出来的地址有点小问题,需要在Win10中调整下。调整如下:

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

将mysql-log中的mysql目录里的所有文件复制到mysql-log目录中。也就是所将日志文件的目录深度退一层。

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

然后,将mysql-log中的mysql目录删除,已经没用了。
··· f. mysql的配置文件的复制,也同理。全部复制完成之后。我们就需要删除掉这个mysql容器。重新创建带有文件映射的mysql容器。(这里可以使用容器ID,我这里为了方便阅读,换成对应的重命名,也是可以的运行的。)
命令1:docker stop mysql
命令2:docker rm mysql
··· g. 重新创建带有文件映射的mysql容器:(注意:地址映射的时候docker会要求输入宿主机密码,最好设置一个)
命令:docker run -d -v E:\wnmp\mysql-log:/var/log/mysql/ -v E:\wnmp\mysql-conf:/etc/mysql/ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6
··· h. 创建完成之后,使用命令进入容器,docker exec -ti mysql /bin/bash
··· i. 这里介绍一个mysql初始化命令,mysql_secure_installation,具体内容参考:
https://blog.csdn.net/u013931660/article/details/79443061

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· j. 初始化完成之后,执行命令安装VIM编辑器。
命令1:apt update
命令2:apt-get install vim
··· k. mysql容器配置完成,用Navicat验证下是否可以连接。(这里的主机地址要使用宿主机的IP地址,使用ipconfig命令,IPv4后面的就是宿主机的IP)

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

以上mysql镜像及容器的配置全部完成。

  1. 下载PHP7.1镜像
    ··· a. 命令:docker pull php:7.1-fpm
    先创建一个php的简单容器
    docker run -d -v E:\wnmp\www:/var/www/html -p 9000:9000 --link mysql:mysql --name php71 php:7.1-fpm
    docker exec -ti php71 /bin/bash
    ··· b. 因为同样要复制PHP的配置文件及日志文件,所以操作方法与mysql相同。复制出来的文件目录深度同样要退一层。删掉无用的目录
    ··· c. PHP的配置文件及日志文件目录地址:
    配置文件:/usr/local/etc
    日志文件:/usr/local/var/log
    项目文件:/var/www/html
    如果进入容器正常接下来
    docker cp php:/usr/local/etc D:\wnmp\php71-conf
    docker cp php:/usr/local/var/log D:\wnmp\php71-log
    docker cp php:/usr/www/html D:\wnmp\www
    ··· d. 因为PHP有可能要多版本切换,所以这里的PHP容器重命名最好带有版本标识。
    全命令:docker run -d -v E:\wnmp\php-conf:/usr/local/etc -v E:\wnmp\php71-log:/usr/local/var/log -v E:\wnmp\www:/var/www/html -p 9000:9000 --link mysql:mysql --name php71 php:7.1-fpm
    ··· e. 容器创建完成之后,进入容器,docker exec -ti php71 /bin/bash (如果需要VIM,安装方法同mysql)
    ··· f. 安装PHP的扩展
    命令1:docker-php-ext-install pdo_mysql
    命令2:docker-php-ext-install mysqli
    ··· g:查看扩展是否已经安装。php -m

  2. 下载Nginx1.10.3
    ··· a. 命令:docker pull nginx:1.10.3
    ··· b. 因为同样要复制Nginx的配置文件,所以操作方法与mysql相同。复制出来的文件目录深度要退一层。(这里不建议复制nginx的日志文件,因为即使复制了最后在映射完成之后无法启动nginx容器,最好自己创建一份。)
    配置文件:/etc/nginx/
    项目文件:/var/www/html
    先创建简单容器:
    docker run -d -p 80:80 -v D:\wnmp\www:/var/www/html:/var/www/html --link php71:phpfpm --name nginx110 nginx:1.10.3
    容器进入正常的话
    docker cp nginx110:/etc/nginx E:\wnmp\nginx-conf
    docker cp nginx110:/var/log/nginx/ E:\wnmp\nginx-log

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

··· c. Nginx容器全命令:
docker run -d -p 80:80 -v E:\wnmp\www:/var/www/html -v E:\wnmp\nginx-conf:/etc/nginx/ -v E:\wnmp\nginx-log:/var/log/nginx/ --link php71:phpfpm --name nginx110 nginx:1.10.3
··· d. 容器创建完成之后,如果需要VIM,安装方法同mysql,进入容器,docker exec -ti nginx /bin/bash
··· e. 编辑配置文件,(这里就体现出文件映射的好处了,因为不需要进入容器修改配置文件,直接可在windows中操作。)

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

fastcgi_pass 这里面 ip地址是宿主机的IP地址,同mysql,端口号这里是9000.
修改配置文件后,重载一下,这里有两种方法实现重载,
第一种:进入容器中,执行,/etc/init.d/nginx reload

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

第二种:在容器外中直接重启nginx容器,docker restart nginx
··· f. 在windows浏览器中输入localhost,或者127.0.0.1,查看phpinfo的打印结果。

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑
··· g. 现在,我们测试一下,是否可以连接mysql
在之前的index.php中输入测试代码:(这里的ip地址依然用的是宿主机的IP,否则连接错误。)

Docker - Windows10 的安装及搭建 PHP 开发环境,采坑

原文地址https://blog.csdn.net/u013931660/article/details/85210787

mysql:

docker pull mysql:5.7
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql57 mysql:5.7
docker exec -ti mysql57 /bin/bash
docker cp mysql57:/var/log/mysql D:\wnmp\mysql-log
docker cp mysql57:/etc/mysql D:\wnmp\mysql-conf
docker stop mysql57
docker rm mysql57
docker run -d -v D:\wnmp\mysql-log:/var/log/mysql/ -v D:\wnmp\mysql-conf:/etc/mysql/ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7
docker exec -ti mysql57 /bin/bash
mysql_secure_installation 数据库初始化
apt update
apt-get install vim

php:

docker pull php:7.1-fpm
docker run -d -v D:\wnmp\www:/var/www/html -p 9000:9000 --link mysql57:mysql --name php71 php:7.1-fpm
docker exec -ti php71 /bin/bash
docker cp php71:/usr/local/etc D:\wnmp\php71-conf
docker cp php71:/usr/local/var/log D:\wnmp\php71-log
docker cp php71:/var/www/html D:\wnmp\www
docker stop php71
docker rm php71
docker run -d -v D:\wnmp\php71-conf:/usr/local/etc -v D:\wnmp\php71-log:/usr/local/var/log -v D:\wnmp\www:/var/www/html -p 9000:9000 --link mysql57:mysql --name php71 php:7.1-fpm
docker exec -ti php71 /bin/bash
apt update
apt-get install vim

nginx:
docker pull nginx:1.10.3
docker run -d -p 80:80 --link php71:phpfpm --name nginx110 nginx:1.10.3
docker exec -ti nginx110 /bin/bash
docker cp nginx110:/etc/nginx D:\wnmp\nginx-conf
docker cp nginx110:/var/log/nginx/ D:\wnmp\nginx-log
docker cp nginx110:/usr/share/nginx/html D:\wnmp\www
docker stop nginx110
docker rm ngix110
docker run -d -p 80:80 -v D:\wnmp\www:/var/www/html -v D:\wnmp\nginx-conf:/etc/nginx/ -v D:\wnmp\nginx-log:/var/log/nginx/ --link php71:phpfpm --name nginx nginx:1.10.3

小丑

讨论数量: 3
cnguu

请问一下,docker占用内存情况

2周前

@cnguu 我感觉轻盈很多,不像虚拟机感觉很笨重

1周前
cnguu

@Leon-myfriend 那么和WSL相比,感觉如何?据说6月微软将在win10中加入完整的linux内核,目前我是在wsl环境下做开发的

1周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!