小編給大家分享一下如何使用Nginx實(shí)現(xiàn)服務(wù)器中多容器共存,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
10年積累的成都網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有渝中免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
背景
有一臺(tái)騰訊的Linux云主機(jī),在服務(wù)器上部署了一個(gè)docker(稱為ServiceDocker,名稱為sign,下同),ServiceDocker內(nèi)部使用了80、443、3306端口,分別映射到宿主機(jī)(云主機(jī))的相同端口(即80、443、3306)。
ServiceDocker中安裝了XAMPP,在此基礎(chǔ)上部署了掃碼簽到小程序的服務(wù)器。ServiceDocker的80和443端口分別提供http和https服務(wù),3306為MySQL數(shù)據(jù)庫(kù)的端口。
ServiceDocker綁定了域名sign.famend.cn。
目標(biāo)
云主機(jī)中的一個(gè)ServiceDocker占用了80、443端口,如果想在主機(jī)中再部署一臺(tái)服務(wù)器對(duì)外服務(wù),就不能使用80和443端口了。
我們的目標(biāo)是在主機(jī)中可以部署多個(gè)ServiceDocker,每個(gè)ServiceDocker綁定各自的域名,對(duì)外提供服務(wù),保證80和443端口可用。
思路
修改ServiceDocker的端口映射,把ServiceDocker端口80、443分別映射到主機(jī)的89、449端口,這樣主機(jī)的80、443端口釋放出來(lái)了。
釋放出來(lái)的80和443端口供Nginx使用。安裝帶Nginx的docker(稱為NginxDocker,名稱為mynginx,下同)。NginxDocker內(nèi)部使用端口80、443,分別映射到主機(jī)的80和443端口。
NginxDocker用來(lái)做反向代理。當(dāng)有訪問(wèn)請(qǐng)求時(shí),讀取Nginx配置后,不同的URL定向到各自對(duì)應(yīng)的Docker。例如:訪問(wèn)http://sign.famend.cn:80,則自動(dòng)映射到http://sign.famend.cn:89。
實(shí)現(xiàn)步驟
1. 修改ServiceDocker的端口映射,釋放80和443端口。
Docker沒(méi)有提供命令修改端口,從網(wǎng)上我找到了2種方法。
方法1:先停止容器,再將容器打包成鏡像,接著運(yùn)行新的鏡像。在運(yùn)行新的鏡像時(shí)指定新的端口。使用的命令如下:
#先停止容器 docker stop containerA #將容器commit成為一個(gè)鏡像 docker commit containerA newImageB #運(yùn)行容器 docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB
方法2:先停止容器,接著停止容器服務(wù),然后修改容器配置文件,***啟動(dòng)容器服務(wù)、啟動(dòng)容器。步驟如下:
① 停止ServiceDocker(ServiceDocker的名稱為sign),停止docker服務(wù)。
sudo docker stop sign sudo service docker stop
② 使用 docker ps -a 命令找到要修改容器的 CONTAINER ID。
③ 運(yùn)行 docker inspect 【CONTAINER ID】 | grep Id 命令。
④ 執(zhí)行 cd /var/lib/docker/containers 命令令進(jìn)入找到與 Id 相同的目錄。
在執(zhí)行cd 命令時(shí)如果提示permission denied,可以先執(zhí)行 sudo -s。
進(jìn)入id對(duì)應(yīng)的目錄后,打開文件hostconfig.json。
找到80端口的映射,如下:
"80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" }] 把 "HostPort": "80" 修改成 "HostPort": "89" , 如下 "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "89" }]
修改之前,ServiceDocker內(nèi)部的80端口映射為主機(jī)的80端口;修改之后,ServiceDocker內(nèi)部的80端口映射為主機(jī)的89端口。
稍加說(shuō)明,有文章(參考資料中的2、3)提到還需要修改config.v2.json,親測(cè)不需要。這個(gè)文件在啟動(dòng)ServiceDocker時(shí)會(huì)自動(dòng)修改。
⑤ 啟動(dòng)docker服務(wù),然后啟動(dòng)ServiceDocker(名稱為sign)。
sudo service docker start sudo docker start sign
方法(1)和方法(2)都可以,我選用了方法(2)。
在執(zhí)行完方法(2)之后,打開瀏覽器驗(yàn)證,提示“網(wǎng)站無(wú)法訪問(wèn)”。
初步估計(jì)docker中的服務(wù)器沒(méi)有啟動(dòng),運(yùn)行命令:
sudo /opt/lampp/lampp stop sudo /opt/lampp/lampp start
運(yùn)行stop的時(shí)候,發(fā)現(xiàn)apache 沒(méi)有啟動(dòng),可能是修改了80端口的緣故。
在執(zhí)行start之后,打開瀏覽器驗(yàn)證http://sign.famend.cn:89和https://sign.famend.cn:449,成功訪問(wèn)。
修改Docker端口的方法并不復(fù)雜,如果docker以后的版本能夠提供相應(yīng)命令,相信會(huì)方便很多。
順便,運(yùn)行 crontab -l 查看ServiceDocker中的定時(shí)任務(wù)是否啟動(dòng),如果沒(méi)啟動(dòng),運(yùn)行 service cron start 啟動(dòng)定時(shí)任務(wù)。
下一步,配置NginxDocker反向代理,讓http://sign.famend.cn:80和https://sign.famend.cn:443也能成功訪問(wèn)。
2. 配置NginxDocker反向代理。
① 下載nginx,并運(yùn)行它。
docker container run \ -d \ -p 80:80 \ -p 443:443 \ --rm \ --name mynginx \ nginx
② 配置nginx的配置文件。
mkdir nginx-files docker container cp mynginx:/etc/nginx . mv nginx conf vi conf/nginx.conf
在nginx.conf中,添加如下反向代理信息。
server{ listen 443 ssl; server_name sign.famend.cn; ssl_certificate /etc/nginx/ssl/sign.famend.cn/1_sign.famend.cn_bundle.crt; ssl_certificate_key /etc/nginx/ssl/sign.famend.cn/2_sign.famend.cn.key; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://sign.famend.cn:89/; } } server{ listen 80; server_name famend.cn sign.famend.cn; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr:89; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://sign.famend.cn:89/; } }
對(duì)于443端口,需要使用ssl_certificate和ssl_certificate_key。在ServiceDocker中證書使用的LetsEncrypt的SSL證書,每90天更新一次。
SSL證書的來(lái)源:一種方法,可以讓它們共享LetsEncrypt的SSL證書。除此之外,在騰訊注冊(cè)的域名,騰訊免費(fèi)提供SSL證書,有效期為1年。
為了簡(jiǎn)便,我直接使用了騰訊的SSL證書,當(dāng)然,一年之內(nèi),必須在過(guò)期之前更新證書。
③ 停止mynginx,然后重啟它。
docker container run \ --name mynginx \ --volume "$PWD/conf":/etc/nginx \ -p 80:80 \ -p 443:443 \ -d \ nginx
這次,去掉 --rm 參數(shù),以便停止運(yùn)行的時(shí)候保留容器。
至此,配置完成。
驗(yàn)證
瀏覽器中分別打開
sign.famend.cn:80 sign.famend.cn:89 sign.famend.cn:449 sign.famend.cn:443
都能正常訪問(wèn)。當(dāng)然,打開449和443時(shí)候,可以發(fā)現(xiàn)兩個(gè)URL使用的證書不一樣。449是LetsEncrypt提供的,有效期90天;443來(lái)自騰訊(頒發(fā)機(jī)構(gòu)TrustAsia),有效期1年。
當(dāng)然,ServiceDocker中的另外一個(gè)網(wǎng)站famend.cn,也可以訪問(wèn):
famend.cn:80 famend.cn:89
成功。
以上是“如何使用Nginx實(shí)現(xiàn)服務(wù)器中多容器共存”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:如何使用Nginx實(shí)現(xiàn)服務(wù)器中多容器共存
文章轉(zhuǎn)載:http://www.rwnh.cn/article30/jicipo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)公司、營(yíng)銷型網(wǎng)站建設(shè)、企業(yè)建站、動(dòng)態(tài)網(wǎng)站、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)