導語
之前介紹 docker 的時候說過它的優勢之一,就是可以在同一服務器中搭建多個環境,互相隔離。昨天就實際操作下,萬萬沒想到如此多的坑,比之前從零開始搭建服務器都費時間。變換了好幾種方案,最終還是解決了,中間的心酸就忽略吧,直接說操作方法。
架構
服務器中已存在的是 laradock 鏡像,可以運行 laravel 環境以及其他的 PHP,包含了 nginx、mysql、redis 等。
我的想法是再添加一個 nginx 容器,用來做反向代理。根據子域名進行分發,可以分發給 laradock,也可以給其他任何容器(包括 wordpress、python、java)等等
修改 lradock
要修改的只有一個地方,就是 nginx 監聽的端口。
- 進入到
laradock
目錄中 - 修改
.env
文件,修改NGINX_HOST_HTTP_PORT
值由80
爲8000
- 停止
nginx
,docker-compose stop nginx
- 重裝
nginx
,docker-compose build nginx
- 啓動
docker-compose up -d nginx
這個時候在瀏覽器中是不能訪問成功的,因爲 nginx 已經不再監聽 80
端口。
添加 nginx 容器
新添加一個 nginx 容器用來做反向代理。在安裝 laradock 的時候,已經有了 nginx:alpine
的鏡像,可以直接生成容器。當然你也可以重新 pull
一個新的鏡像。(推薦使用 alpine版本)
- 查看 nginx 鏡像 ID,
docker iamges
- 生成新的 ngixn 容器,
docker run --name proxy_nginx -p 80:80 -d [nginx image id]
。也可以添加-v
參數來映射配置文件,我的環境較少變動就不需要了 - 此時在瀏覽器中訪問,應該是 nginx 的默認頁面,說明啓動成功
- 進入到生成的容器中
docker exec -it proxy_nginx sh
- 安裝
vim
,apk add vim
- 查看宿主機 ip,
/sbin/ip route|awk '/default/ { print $3 }'
- 在
/etc/nginx/conf.d/
目錄下添加新配置文件laradock.conf
,內容如下
server {
listen 80;
server_name you_sits;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://[宿主機IP]:8000;
}
}
- 退出容器,然後重啓
docker restart proxy_nginx
- 打開
8000
端口,參考這裏
結語
這個時候訪問的話,就可以代理到 laradock 中的 nginx 了。後續想要新增其他的容器,只要在 proxy_nginx 中添加新的代理規則就可以了。