docker搭建nginx的實(shí)現(xiàn)步驟
一、安裝Docker
1、安裝:
yum install docker
2、啟動(dòng)/停止/重啟docker服務(wù)
systemctl docker start systemctl docker stop systemctl docker restart #開機(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可不用寫全,只要寫到能識(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,可寫成 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)聽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)聽的,于是就會(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ī)是否防火墻是否開放這個(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)文章
滾動(dòng) docker 中的 nginx 日志思路詳解
Nginx 自己沒(méi)有處理日志的滾動(dòng)問(wèn)題,本文筆者介紹如何滾動(dòng)運(yùn)行在 docker 中的 nginx 日志文件,感興趣的朋友一起看看吧2018-08-08
CentOS Stream 9 服務(wù)器 Docker 部署
本文詳細(xì)記錄了使用Docker部署KaiwuDB的過(guò)程,并包括模數(shù)據(jù)庫(kù)支持序表與關(guān)系表跨模查詢實(shí)戰(zhàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2026-06-06
Docker安裝Redis并介紹可視化客戶端進(jìn)行操作
這篇文章主要介紹了Docker安裝Redis并介紹可視化客戶端進(jìn)行操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
docker部署管理工具portainer-ce的實(shí)現(xiàn)
Portainer是一個(gè)可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構(gòu)建,管理和維護(hù)Docker環(huán)境,本文主要介紹了docker部署管理工具portainer-ce的實(shí)現(xiàn),感興趣的可以了解一下2023-08-08
修改Docker默認(rèn)鏡像和容器的存儲(chǔ)位置的方法
本篇文章主要介紹了修改Docker默認(rèn)鏡像和容器的存儲(chǔ)位置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
mysql8.x docker遠(yuǎn)程訪問(wèn)配置詳解
本文主要介紹了mysql8.x docker遠(yuǎn)程訪問(wèn)配置,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

