安裝docker
按照官網(wǎng)上面安裝就可以了
拉取鏡像文件
一開始我拉取的都是latest鏡像,后面我把docker run 這些鏡像寫在shell腳本中,去執(zhí)行,發(fā)現(xiàn)有些狀態(tài)是退出,然后一直沒有成功,后面我就單獨拿出來docker run又成功了。
我shell腳本執(zhí)行的時候如果后面沒有帶 TAG,就會一直起不來是退出狀態(tài),我也很詫異,百度也沒能拯救我,所以后面我的都是帶有版本的。
創(chuàng)建目錄
mkdir -p /myDocker/firstDemo/nginx/html
mkdir -p /myDocker/firstDemo/nginx/log
mkdir -p /myDocker/firstDemo/nginx/conf.d
編寫三個shell文件:
如果這幾個shell腳本不能跑起來容器,那就直接將文件里面的內(nèi)容拿出了跑吧。
- docker_nginx.sh
#!/usr/bin bash
docker run -p 80:80 --name nginx \
-v /myDocker/firstDemo/nginx/html:/usr/share/nginx/html \
-v /myDocker/firstDemo/nginx/log/:/var/log/nginx \
-v /myDocker/firstDemo/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-idt nginx:1.16
- docker_php.sh
#!/usr/bin bash
docker run -p 9000:9000 --name php \
-v /myDocker/firstDemo/nginx/html:/var/www/html/ \
--privileged=true \
-d php:7.2-fpm
- docker_mysql.sh
#!/usr/bin bash
docker run -p 3306:3306 --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-v /usr/lib/mysql:/usr/lib/mysql \
-d mysql:5.7
執(zhí)行shell腳本
sh docker_nginx.sh
sh docker_php.sh
sh docker_mysql.sh
編寫nginx配置文件
創(chuàng)建default.conf文件
vim /myDocker/firstDemo/nginx/conf.d/default.conf
nginx配置如下
server {
listen 80; #監(jiān)聽80端口,接收http請求
server_name mgk.com; #就是網(wǎng)站地址
root /usr/share/nginx/html; # 準(zhǔn)備存放代碼工程的路徑
#路由到網(wǎng)站根目錄www.example.com時候的處理
location / {
index index.php index index.html index.htm; #跳轉(zhuǎn)到mgk.com/index.php
autoindex on;
}
#當(dāng)請求網(wǎng)站下php文件的時候,反向代理到php-fpm
location ~ \.php$ {
fastcgi_pass 172.16.236.190:9000; #nginx fastcgi進程監(jiān)聽的IP地址和端口,docker中要寫內(nèi)網(wǎng)的ip,127.0.0.1不行
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;#這里要寫/var/www/html,不然 php fastcgi解析不了目錄
include fastcgi_params;
}
}
重啟nginx
docker restart nginx
測試
在/myDocker/firstDemo/nginx/html中編寫測試代碼
echo "<?php echo phpinfo(); ?>" > index.php
然后瀏覽訪問出現(xiàn)php相關(guān)信息。
總結(jié)
- 出現(xiàn)的很多問題:
- 服務(wù)啟不來然后直接docker run ...
- nginx解析不了PHP,不是權(quán)限的問題,是nginx配置問題,上面的配置文件作了說明
- 沒有復(fù)雜的操作
- PHP的擴展
- MYSQL的使用測試
- 其他服務(wù)的配置redis、swoole等
補充說明:
出現(xiàn)了502錯誤,檢查了半天的nginx配置,后來發(fā)現(xiàn)反向代理地址配置有問題:
proxy_pass http://127.0.0.1:8888;
因為nginx在docker中,所以不能使用127.0.0.1:8888來訪問宿主機里的nodejs應(yīng)用,docker內(nèi)部實際上實現(xiàn)了一個虛擬網(wǎng)橋docker0,所以要通過宿主機內(nèi)網(wǎng)地址(192.168.102.1)來訪問.
補充php+mysql測試
創(chuàng)建文件
vim mysql.php
編輯內(nèi)容
<?php
$link=mysqli_connect("172.16.236.190","root","root");
if(!$link) echo "FAILD!連接錯誤,用戶名密碼不對";
else echo "OK!可以連接";
?>
- 一開始會報錯 mysql_connect()不可用,PHP7不支持,改用mysqli。
- mysqli_connect()不可用,沒有開擴展。
- mysql連接的host寫localhost報錯,應(yīng)該需要寫內(nèi)外ip
解決mysqli擴展:
1、先得進入容器:docker exec -it php_server /bin/bash
2、然后運行 docker-php , 按兩下tab鍵會有提示
root@781322cc6de5:/var/www/html# docker-php-
docker-php-entrypoint docker-php-ext-configure docker-php-ext-enable docker-php-ext-install docker-php-source
3、執(zhí)行docker-php-ext-install mysqli
4、重啟php
5、訪問成功