docker編譯nginx
Ⅰ Docker 入門 (07) 部署nginx 並且映射本地配置文件
目標:
1. 利用docker部署一個nginx容器
2.為nginx 容器設置配置文件 , 並且映射到宿主機(本機)
操作步驟:
1.拉取nginx鏡像,並嘗試簡單運行(忘記怎麼操作請參考第五節)
2.在本地新增配置文件 , 為了後面映射容器使用 ,我習慣是放到 /etc/docker/nginx-config , 按你個人運頃習慣新增
3.進入config ,我們需要創建一個簡單配置文件 , 這里就來個簡單的吧
4.因為我稍後需要佔用的是8080埠 , 請確認雲伺服器端是否開放
5. 萬事俱備 , 嘗試啟動吧
6. 使用你的 伺服器ip+8080埠訪問測試 , 看到您的寫的 index,html 內容, 代表啟動成功!
7.具體映射位置 可以 使用 docker exec -it [容野叢器ID] /bin/bash 命令去參考對應映射文件 ,原理就應該明白了
結語:
通過本節的 nginx 映射本地配置文件 , 應旁脊陸該掌握對docker映射文件的基本使用了 , 希望大家都把自己的nginx跑起來吧
Ⅱ Docker中使用Nginx部署多應用
最近打算將系統中的應用全部用docker進行部署,能夠進行統一管理。
花費時間最多的問題是:
這兩種方式各有優勢各有痛點:
我最終還是選擇使用一個nginx容器代理所有應用,因為如果多個域名不能都使用80,443埠訪問確實很難受。
這篇文章包含了docker中很多元素,如果用的不對,也希望大家斧正。
步驟如下:
我之前已經准備好了兩個簡單的應用鏡像,訪問返回靜態頁面,啟動兩個應用。
創建一個appbridge用於容器之間的通信。
數據卷可以映射宿主機和容器中的目錄,可以方便配置,修改內容和數據持久化。也可以在運行容器 -v 參數自動創建數據卷,這里為了清晰就單獨拎出來。
test2應用相同方式創建。
因為需要配置https,先用certbot為域名生成證書和密鑰(步驟省略),拷貝證書和密鑰到數據卷ssl-certs-vol中。
修改nginx-vol數據卷中的nginx.conf文件,能夠映射到nginx容器的配置。
添加伺服器配置,這里配置了相同域名的三個埠的反向代理應用,應用地址可使用別名。
進入nginx容器,重新啟動nginx
瀏覽器訪問
Ⅲ Docker 搭建 Nginx 集群
實現負載均衡其實並不難、只是很多人不敢去嘗試而已,簡單來說就是:
在nginx裡面配置一個upstream,然後把相關的伺服器ip都配置進去。然後採用輪詢的方案,然後在nginx裡面的配置項里,proxy-pass指向這個upstream,這樣就能實現負載均衡.
nginx的負載均衡有4種模式:
1)、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2)、weight
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器性能不均的情況。
3)、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
4)、fair , url_hash(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
docker pull nginx ( docker pull cloud.io/nginx 這個稍微快點 )
docker run -itd --name nginx1 -p 8080:80 nginx /bin/bash -- 主
docker run -itd --name nginx2 nginx /bin/bash
docker run -itd --name nginx3 nginx /bin/bash
docker ps 查看
docker network ls
docker nerwork inspect d530da7ebbd3
進入nginx1 (主)
docker exec -it d530da7ebbd3 /bin/bash
安裝 vim 編輯器 (如有其他、盡可隨意) --- 注意:nginx2、nginx3 均安裝 編輯器、下文不再贅述
1. apt update 2. apt install vim
cd /etc/nginx/
vim nginx.conf
進入nginx2
docker exec -it e59de010efff /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 後添加: From 172.17.0.3:80 即可
進入nginx3
docker exec -it 0f12240cb622 /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 後添加: From 172.17.0.4:80 即可
重啟三個nginx服務 service nginx restart
此時如果 docker容器會關閉、因此需要再次重啟
docker start d530da7ebbd3
docker start e59de010efff
docker start 0f12240cb622
測試結果
補充:
上述說到 負載均衡有4種模式、
配置分別如下:
輪詢模式:
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080;
}
weight 模式:
upstream webname {
server192.168.0.1:8080 weight=2;
server192.168.0.2:8080 weight=1;
}
ip_hash模式:
upstream webname {
ip_hash;
server192.168.0.1:8080;
server192.168.0.2:8080;
}
其他配置:
設置某一個節點為backup,那麼一般情況下所有請求都訪問server1,當server1掛掉或者忙的的時候才會訪問server2
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 backup;
}
設置某個節點為down,那麼這個server不參與負載。
upstream webname {
server192.168.0.1:8080;
server192.168.0.2:8080 down;
}
Ⅳ 基於 Docker 安裝 Nginx,啟動運行,外網訪問,映射配置文件
基於 Docker 安裝 Nginx
查找Nginx鏡像
語法:docker search nginx
示例:
獲取Nginx鏡像
示例:
啟動nginx容器實例
說明:--name nginx nginx 第一個nginx是通過--name指定的nginx容器實例的名稱,另一個nginx表示nginx倉庫的名稱。
查看nginx容器實例的進程信息
通過ps -ef | grep nginx查看
進入nginx容器內
殺死nginx容器實例
停止nginx實例
啟動nginx容器實例
重啟nginx容器實例
移除nginx容器實例
案例
暴露外部埠
基於docker run -d --name nginx nginx方法啟動nginx後,Docker 容器並沒有對外暴露訪問的埠,即無法通過當前主機外部瀏覽器器訪問nginx。那麼該怎麼樣呢?
語法:
-p 80:80:通過-p來指定Docker容器中nginx實例對外開放的埠。本例中,第一個80埠是對外開放的埠,第二個80埠指對外開放的埠映射到容器里的埠號。
示例:
通過當前主機外的瀏覽器訪問nginx,如下圖:
指定外部的配置文件
語法:
說明:
-v: 表示掛載一個本機目錄或文件到容器里。
-v /develop/nginx/nginx.conf:/etc/nginx/nginx.conf:將/develop/nginx/nginx.conf配置文件掛載到容器中/etc/nginx/nginx.conf這個配置文件中。
-v /develop:/develop:將/develop這個目錄掛載到容器里的/develop這個目錄里。
示例:
注意事項:指定外部配置文件,同時需要指定nginx的首頁面,否則會拋出404錯誤,原因就是因為nginx找不到配置文件中默認的index頁面。
本例中,使用/develop/apps/static/index.html替代了容器里的nginx默認的index頁面,同時,-v /develop:/develop掛載根目錄即可訪問子目錄。
指定網路模式:--net=bridge 默認模式
其中8080是指主機的埠,而80是指容器的埠
我們先看一下埠的狀態
docker是運行在Linux上的,在Windows中運行docker,實際上還是在Windows下先安裝了一個Linux環境,然後在這個系統中運行的docker。也就是說,服務中使用的localhost指的是這個Linux環境的地址,而不是我們的宿主環境Windows。我們可以通過命令:
找到這個Linux的ip地址,一般情況下這個地址是192.168.99.100,然後在Windows的瀏覽器中,輸入這個地址,加上服務的埠即可啟用了。
Ⅳ docker-compose快速啟動nginx
創建nginx目錄,目錄下創建docker-compose.yml文件如下:
nginx目錄下創建創建nginx.conf文件,根據實際情況配置,我這里寫一個示例:
在nginx目錄下創建build目錄,將前端靜態文件拷貝到下邊
在nginx目錄下執行如下命令啟動服務
啟動之後,nginx就可以正常使用了。