博主電腦系統是window 10 專業版的,所以在此記錄下docker的基本使用方法。
參考地址:
https://www.runoob.com/docker/docker-install-php.html
https://learnku.com/articles/28020
在這里主要也就是針對上述地址做一個完整版的整合,主要方便以后查看。
一. 系統檢查
1.1 檢查自己的電腦是否開啟了虛擬化(在任務管理器 \ 性能 界面查看)
進入方法:在最下方的任務欄 -> 鼠標右鍵 -> 任務管理器
* 詳細請參考:https://jingyan.baidu.com/article/59703552811e468fc0074027.html

1.2 查看 Hyper-V 是否打開
進入方法:控制面板 -> 程序 -> 程序和功能 -> 啟動或關閉 Windows 功能
詳細請參考:https://jingyan.baidu.com/article/c1a3101e10c965de656debc2.html
**注意**:如果自己的電腦虛擬化已經開啟,同時 自己的電腦系統版本又是 win10 專業版及以上 Hyper-v 還是無法開啟,那么樓主建議不要去糾結了直接重裝系統,樓主為了這個弄了一天最終還是重裝系統解決的。

二。Docker 安裝
2.1 docker 下載及安裝
官方下載地址:https://www.docker.com/get-started
在下載過程中可能會需要去注冊一個賬號,這里就不細說,
詳細請參考:https://www.runoob.com/docker/windows-docker-install.html
安裝完docker 以后我們需要做一個簡單的設置

在安裝完成成功運行以后我們點擊 這個小鯨魚 -> 單擊 Settings ,進入設置界面 -> 左邊菜單欄 點擊 Daemon -> 點擊Basic -> 找到 "registry-mirrors":[]

設置完成以后 點擊 Apply 自動重啟 docker
2.2 nginx 安裝
2.2.1 查找nginx
docker search nginx

2.2.2 拉取官方的nginx
docker pull nginx

拉取完成以后,查看當前鏡像文件
docker images nginx

2.2.3 啟動nginx容器實例
docker run -d -p 8080:80 --name mynginx nginx
-d:后台運行
-p:設置端口號映射到本機,將 80 端口映射到本機的 8080 端口,外部訪問8080端口即可
--name:設置容器名稱

2.2.4 查看啟動的nginx實例docker ps -l
-l:表示查看最后一個啟動的容器,可以不用帶
-a:表示查詢查詢所有啟動過的容器,包括停止的容器
docker ps: 查看當前運行中的容器

2.2.5 本機訪問測試

進入到此頁面表示 nginx 安裝成功
三。php + nginx 部署
3.1 在本地電腦創建如下幾個文件夾方便后續將容器內文件映射到本地修改

3.2 搜索php
docker search php

3.3 拉取php
docker pull php:7.1-fpm
# 因為PHP有多個版本,這里就以拉取7.1版本為例子

3.4 啟動php
3.4.1 隨便啟動一個,因為需要將php的配置文件和日志文件復制出來到本地
docker run -d -v E:\docker\www:/var/www/html -p 9000:9000 --name myphp php:7.1-fpm
-d:后台運行
-v E:\docker\www:/var/www/html: 將本地的html存儲地址和php的html存儲地址做一個映射
--name myphp:重命名

3.4.2 復制php的配置文件和日志文件到本地
docker cp myphp:/usr/local/etc E:\docker\php-conf docker cp myphp:/usr/local/var/log E:\docker\php-log docker cp myphp:/var/www/html E:\docker\www
myphp:是我們前面運行的php的名稱

復制完以后我們可以在本地對應的文件夾下面看到復制出來的文件,這個時候我們需要做一個處理,就是將這些文件夾中的文件全部復制到根目錄,如下

php-log 文件夾中沒有東西是因為復制出來的log下本身就沒有文件,所以不用管
3.4.3 刪除原有的myphp,重新運行php
# 停止myphp 容器
docker stop myphp
# 刪除myphp 容器
docker rm myphp
# 重新運行php容器,同時映射配置文件
# 全指令
docker run -d -v E:\docker\php-conf:/usr/local/etc -v E:\docker\php-log:/usr/local/var/log -v E:\docker\www:/var/www/html -p 9000:9000 --name myphp php:7.1-fpm#指令分析
docker run -d
-v E:\docker\php-conf:/usr/local/etc # 指定配置文件
-v E:\docker\php-log:/usr/local/var/log # 指定日志文件
-v E:\docker\www:/var/www/html # 指定html界面路徑
-p 9000:9000 # 映射端口號
--name myphp php:7.1-fpm # 重命名
# 查看運行的容器
docker ps

3.4.4 復制nginx的配置文件到本地
因為光有php還不行,因為php只能幫我們編譯php代碼,而運行還是需要依靠服務器來完成
docker cp mynginx:/etc/nginx E:\docker\nginx-conf
# 因為我們之前就已經創建一個一個nginx容器,所以直接將里面的配置文件復制出來就可以了。
docker stop mynginx
# 停止這個容器
docker rm mynginx
# 刪除這個容器
復制出配置文件以后,我們還需要在log文件中創建如下兩個文件


3.4.4 重新啟動nginx,同時指定映射文件位置
# 全命令
docker run -d -p 80:80 -v E:\docker\www:/var/www/html -v E:\docker\nginx-conf:/etc/nginx/ -v E:\docker\nginx-log:/var/log/nginx/ --link myphp:php --name mynginx nginx
# 命令分析
docker run -d -p 80:80 # 映射端口號
-v E:\docker\www:/var/www/html # 指定html頁面位置
-v E:\docker\nginx-conf:/etc/nginx/ # 指定配置文件位置
-v E:\docker\nginx-log:/var/log/nginx/ # 指定日志文件位置
--link myphp:php --name mynginx nginx # 重命名
指定本地html儲存的位置與nginx做映射
指定本地nginx的配置文件位置和nginx配置文件做映射
3.4.5 本地修改配置文件(附上配置文件,僅供參考)
文件位置是前面映射過來到本地的文件夾

server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /var/www/html;
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;
fastcgi_pass php: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;
#}
}
在配置文件中需要將 php 的注解去掉,並且修改訪問的路徑
3.4.6 創建index.php

3.4.7 本地測試運行

注意:在這里我們主要注意一下 nginx配置文件中的 php 下的 fastcgi_pass 和 fastcgi_param,因為如果 php 下的這兩個出錯 將會導致php的代碼無法解析從而報錯, 還有要檢查配置文件是否映射正確。
