docker搭建nginx的實(shí)現(xiàn)步驟
一、安裝Docker
1、安裝:
yum install docker
2、啟動(dòng)/停止/重啟docker服務(wù)
systemctl docker start systemctl docker stop systemctl docker restart #開(kāi)機(jī)自啟動(dòng) systemctl enable docker
#設(shè)置容器自啟動(dòng)
1.創(chuàng)建容器時(shí)設(shè)置
docker run -d --restart=always --name 設(shè)置容器名 使用的鏡像
(上面命令 --name后面兩個(gè)參數(shù)根據(jù)實(shí)際情況自行修改)
# Docker 容器的重啟策略如下:
--restart具體參數(shù)值詳細(xì)信息:
no // 默認(rèn)策略,容器退出時(shí)不重啟容器;
on-failure // 在容器非正常退出時(shí)(退出狀態(tài)非0)才重新啟動(dòng)容器;
on-failure:3 // 在容器非正常退出時(shí)重啟容器,最多重啟3次;
always // 無(wú)論退出狀態(tài)是如何,都重啟容器;
unless-stopped // 在容器退出時(shí)總是重啟容器,但是不考慮在 Docker 守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器。
2.修改已有容器,使用update
#如果創(chuàng)建時(shí)未指定 --restart=always,可通過(guò)update 命令設(shè)置
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根據(jù)實(shí)際情況修改)3、查看docker版本信息
docker version
4、查看所有docker鏡像
docker images

二、安裝Nginx
1、拉取Nginx鏡像文件
docker pull [鏡像名]:[版本號(hào)] //版本號(hào)可省略,省略會(huì)下載最新版本 例如: docker pull nginx //下載最新的Nginx鏡像
2、查看下載好的鏡像文件
docker images

3、創(chuàng)建并運(yùn)行Nginx容器
docker run -d --name nginx01 -p 8050:80 nginx 命令詳解: # docker run 啟動(dòng)一個(gè)鏡像 # -d 表示后臺(tái)允許 # --name nginx01 表示為當(dāng)前容器起一個(gè)別名 # -p 8050:80 表示將本機(jī)的8050端口映射到nginx鏡像的80端口 4、查看正在運(yùn)行的容器
docker ps

5、查看Nginx是否部署成功
curl localhost:8050

1、進(jìn)入Nginx容器當(dāng)中
docker exec -it nginx /bin/bash 命令詳解: # docker exec 在運(yùn)行的容器中執(zhí)行命令 # -i 以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;例如-it # -t 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;例如-it # nginx 容器名 # /bin/bash 其實(shí)就是表示載入容器后運(yùn)行bash(命令語(yǔ)言解釋程序), 因?yàn)閐ocker中必須要保持一個(gè)進(jìn)程(運(yùn)行的程序)的運(yùn)行,要不然整個(gè)容器就會(huì)退出,所以說(shuō),bash就擔(dān)任起了docker中運(yùn)行的那個(gè)進(jìn)程的角色! #而/bin/bash則是bash在linux下的位置
2、在容器中查詢出nginx的相關(guān)配置文件存放位置
whereis nginx

3、退出容器,回到本地linux系統(tǒng)
exit
4、停止并移除Nginx容器
docker stop ff6fc #停止容器,容器id可不用寫(xiě)全,只要寫(xiě)到能識(shí)別到唯一一條就可以 docker rm ff6fc #移除容器 # bedfd2a72585表示容器的ID,即:CONTAINER ID
5、本地創(chuàng)建管理目錄
mkdir -p /usr/local/nginx mkdir -p /usr/local/nginx/html mkdir -p /usr/local/nginx/conf mkdir -p /usr/local/nginx/logs
6、將容器中的相應(yīng)文件copy到剛創(chuàng)建的管理目錄中
docker cp ff6fc:/etc/nginx/nginx.conf /usr/local/nginx/ docker cp ff6fc:/etc/nginx/conf.d /usr/local/nginx/conf/ docker cp ff6fc:/usr/share/nginx/html/ /usr/local/nginx/html/ docker cp ff6fc:/var/log/nginx/ /usr/local/nginx/logs/ 注:docker cp ff6fc中的 "ff6fc" 為容器ID(docker ps可查看),也可換成容器名,例如上面容器名是nginx,可寫(xiě)成 docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/ ,但是要區(qū)分唯一性
7、再次啟動(dòng)容器并作目錄掛載
docker run --name nginx -p 8050:80 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/www/:/usr/share/nginx/html/ -v /usr/local/nginx/logs/:/var/log/nginx/ -v /usr/local/nginx/conf/:/etc/nginx/conf.d --privileged=true -d nginx
docker run --name nginx -p 8050:80 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/www/:/usr/share/nginx/html/ -v /usr/local/nginx/logs/:/var/log/nginx/ -v /usr/local/nginx/conf/:/etc/nginx/conf.d --privileged=true -d nginx
這里掛載的路徑和端口要明白,不然配置conf文件會(huì)亂
就是
端口:宿主機(jī)8050端口映射docker里nginx容器的80端口,所以我們?cè)L問(wèn)宿主機(jī)ip+8050端口,就會(huì)映射到docker里nginx容器里的80端口,所以nginx配置文件listen是監(jiān)聽(tīng)80端口,這個(gè)千萬(wàn)不要搞錯(cuò)了
頁(yè)面:打包的頁(yè)面文件夾是build,宿主機(jī)頁(yè)面路徑/usr/local/nginx/www/,映射的是docker里nginx容器的/usr/share/nginx/html/路徑,所以nginx配置文件
里的location的/usr/share/nginx/html這個(gè)路徑不用調(diào)整,只需在后面加上部署的前端頁(yè)面路徑,下面就是加上了build,然后前端打包的頁(yè)面build文件夾放在宿主機(jī)的/usr/local/nginx/www/就可以了
location / {
root /usr/share/nginx/html/build;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
所以流程是這樣,我們輸入網(wǎng)址宿主機(jī)+8050端口會(huì)映射到nginx配置文件80端口,然后nginx80端口是監(jiān)聽(tīng)的,于是就會(huì)走到“l(fā)ocaltion / ”這個(gè)位置,然后會(huì)定位到/usr/share/nginx/html/build這個(gè)路徑,又因?yàn)?usr/share/nginx/html/相當(dāng)于宿主機(jī)/usr/local/nginx/www/,所以最終會(huì)去宿主機(jī)/usr/local/nginx/www/build找到頁(yè)面,所以我們的頁(yè)面文件夾build需要放在/usr/local/nginx/www/這里
后端服務(wù):因?yàn)楝F(xiàn)在nginx是部署在docker容器里,后臺(tái)服務(wù)部署在宿主機(jī)里,基于docker和宿主機(jī)通信是通過(guò)搭建新的網(wǎng)關(guān)橋docker0網(wǎng)橋,我們可以通過(guò)docker inspect nginx(容器名或容器id)看到nginx的ip是172.17.0.4

查看宿主機(jī)在docker0網(wǎng)橋下的所屬ip是172.17.0.1

宿主機(jī)的wlan(使用wifi分配的ip) ip是192.168.1.106(使用網(wǎng)線的可以查看eth0分配的ip)

基于docker和宿主機(jī)通信是通過(guò)搭建新的網(wǎng)關(guān)橋docker0網(wǎng)橋
需要注意的一點(diǎn)就是,即使ping通了,docker里nginx的容器最好進(jìn)行telnet測(cè)試一下能否連通宿主機(jī)的后端端口
若不通,就要看看宿主機(jī)是否防火墻是否開(kāi)放這個(gè)端口
所以nginx配置后端服務(wù)需要這樣配置,需要代理到docker0網(wǎng)橋分配的ip:172.17.0.1或者網(wǎng)線分配的ip或者wifi分配的ip:192.168.1.106的后臺(tái)服務(wù)
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.17.0.1:8081/;
#或 proxy_pass http://192.168.1.106:8081/;
}最后附上nginx配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
root /usr/share/nginx/html/build;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.17.0.1:8081/;
#或 proxy_pass http://192.168.1.106:8081/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}到此這篇關(guān)于docker搭建nginx的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)docker搭建nginx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker搭建 Nginx+PHP+MySQL 環(huán)境并部署WordPress實(shí)踐
- 利用docker搭建php7和nginx運(yùn)行環(huán)境全過(guò)程(官方鏡像)
- 使用Docker搭建Django,Nginx,R,Python部署環(huán)境的方法
- 使用dockercompose搭建springboot-mysql-nginx應(yīng)用
- docker搭建php+nginx+swoole+mysql+redis環(huán)境的方法
- Docker如何使用nginx搭建tomcat集群(圖文詳解)
- Docker搭建Nginx圖片服務(wù)器的方法
- 基于docker搭建nginx文件服務(wù)器的方法步驟
- docker搭建nginx實(shí)現(xiàn)負(fù)載均衡的示例代碼
相關(guān)文章
Docker 安裝 LogStash的詳細(xì)過(guò)程
Logstash,作為Elastic Stack家族中的核心成員之一,是一個(gè)功能強(qiáng)大的開(kāi)源數(shù)據(jù)收集引擎,在本文中,我們將詳細(xì)介紹如何借助Docker容器技術(shù)快速安裝配置Logstash,以實(shí)現(xiàn)日志及各類事件數(shù)據(jù)的無(wú)縫集成與實(shí)時(shí)處理,感興趣的朋友一起看看吧2024-03-03
Docker守護(hù)進(jìn)程安全配置項(xiàng)目詳解
這篇文章主要介紹了Docker守護(hù)進(jìn)程安全配置介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
docker 啟動(dòng)具有多個(gè)網(wǎng)絡(luò)接口的容器的方法示例
這篇文章主要介紹了docker 啟動(dòng)具有多個(gè)網(wǎng)絡(luò)接口的容器的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
基于Docker部署GitLab環(huán)境搭建的方法步驟
這篇文章主要介紹了基于Docker部署GitLab環(huán)境搭建的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Docker項(xiàng)目部署之從后端到前端部署詳細(xì)流程
在當(dāng)今的軟件開(kāi)發(fā)領(lǐng)域,容器化技術(shù)已經(jīng)成為了部署和管理應(yīng)用程序的重要手段,下面這篇文章主要給大家介紹了關(guān)于Docker項(xiàng)目部署之從后端到前端部署的相關(guān)資料,需要的朋友可以參考下2024-08-08
Spring Cloud中使用jib進(jìn)行docker部署的步驟詳解
這篇文章主要介紹了Spring Cloud中使用jib進(jìn)行docker部署的步驟詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹
這篇文章主要介紹了docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹,link的原理就是在/etc/hosts里面添加了一個(gè)alias的名稱,本文通過(guò)案例分析給大家詳細(xì)講解,需要的朋友可以參考下2022-09-09
CentOS修改docker鏡像存儲(chǔ)位置并進(jìn)行數(shù)據(jù)遷移的操作方法
本文詳細(xì)介紹了在CentOS上修改Docker鏡像存儲(chǔ)位置并進(jìn)行數(shù)據(jù)遷移的步驟,包括停止Docker服務(wù)、創(chuàng)建新的存儲(chǔ)目錄、復(fù)制現(xiàn)有數(shù)據(jù)、修改Docker配置、重啟Docker服務(wù)、驗(yàn)證配置、清理舊數(shù)據(jù)(可選)以及檢查容器和鏡像,感興趣的朋友一起看看吧2025-01-01
Docker安裝配置RabbitMQ的實(shí)現(xiàn)步驟
RabbitMQ是基于AMQP的一款消息管理系統(tǒng)。AMQP(Advanced?Message?Queuing?Protocol),是一個(gè)提供消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級(jí)消息隊(duì)列協(xié)議,其中RabbitMQ就是基于這種協(xié)議的一種實(shí)現(xiàn)2021-11-11

