Docker - Windows10 的安裝及搭建 PHP 開發環境,採坑

Leon-myfriend發表於2019-04-28
  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檔案(後面將會操作對映到本機的目錄)

  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

小丑

相關文章