Docker搭建Nginx服務(wù)器的實(shí)現(xiàn)步驟
前言
在現(xiàn)代 Web 開(kāi)發(fā)中,Nginx 是一個(gè)廣泛使用的高性能 Web 服務(wù)器,它不僅可以用于反向代理,還能作為負(fù)載均衡器、HTTP 緩存等。通過(guò) Docker 部署 Nginx,不僅能夠簡(jiǎn)化安裝過(guò)程,還能輕松進(jìn)行配置和管理。
本篇文章將指導(dǎo)你通過(guò) Docker 快速搭建一個(gè) Nginx 環(huán)境,并講解如何修改配置文件以定制化你的服務(wù)器設(shè)置。
一、準(zhǔn)備工作
首先,確保你的系統(tǒng)上已經(jīng)安裝了 Docker。
Linux上進(jìn)行Docker安裝有兩種方式:
- Docker自動(dòng)化安裝
- Docker手動(dòng)安裝
可以根據(jù)該文章的步驟進(jìn)行安裝:http://www.dbjr.com.cn/server/339879ek2.htm
二、設(shè)置 Nginx 容器的目錄結(jié)構(gòu)
為了便于管理,我們首先創(chuàng)建一個(gè)目錄結(jié)構(gòu),用于存放 Nginx 配置文件、日志文件和 HTML 文件。
# 安裝路徑 DIR="/opt/docker/demo" DOCKER_NAME="docker-nginx" # 創(chuàng)建目錄結(jié)構(gòu) mkdir -p "$DIR/nginx/conf" mkdir -p "$DIR/nginx/log" mkdir -p "$DIR/nginx/html"
conf
:存放 Nginx 的主配置文件和自定義配置文件。log
:存放 Nginx 的日志文件。html
:存放靜態(tài)網(wǎng)站文件。
三、啟動(dòng)一個(gè)臨時(shí)的 Nginx 容器來(lái)復(fù)制配置文件
我們需要一個(gè)基礎(chǔ)的 Nginx 配置文件,Docker 官方鏡像已經(jīng)內(nèi)置了標(biāo)準(zhǔn)配置文件。為了方便地獲取并修改這些配置文件,我們首先啟動(dòng)一個(gè)臨時(shí)的 Nginx 容器。
# 啟動(dòng)一個(gè)臨時(shí)的 nginx 容器來(lái)復(fù)制配置文件 docker run --name nginx_test -p 9011:80 -d nginx:stable-alpine
這個(gè)命令會(huì)啟動(dòng)一個(gè) nginx:stable-alpine
容器,并將其 80 端口映射到宿主機(jī)的 9011 端口。我們可以通過(guò)訪問(wèn) http://localhost:9011
來(lái)查看默認(rèn)的 Nginx 歡迎頁(yè)面。
四、復(fù)制 Nginx 配置文件到本地目錄
接下來(lái),我們將容器內(nèi)的 Nginx 配置文件復(fù)制到本地,以便進(jìn)行自定義修改。使用以下命令將 nginx.conf
文件和 conf.d
配置目錄復(fù)制到宿主機(jī)的 $DIR/nginx/conf
目錄中:
# 復(fù)制 nginx 配置文件到本地目錄 docker cp nginx_test:/etc/nginx/nginx.conf "$DIR/nginx/conf/nginx.conf" docker cp nginx_test:/etc/nginx/conf.d "$DIR/nginx/conf/conf.d"
這樣,我們就獲取到了 Nginx 的配置文件,并且可以根據(jù)需要進(jìn)行修改。
五、刪除臨時(shí) Nginx 容器
復(fù)制完配置文件后,我們不再需要這個(gè)臨時(shí)的 Nginx 容器,因此可以將其刪除:
# 刪除臨時(shí) nginx 容器 docker rm -f nginx_test
六、創(chuàng)建并運(yùn)行 Nginx 容器,掛載本地目錄
現(xiàn)在,我們可以使用自己的配置文件來(lái)啟動(dòng)一個(gè)持久化的 Nginx 容器。通過(guò)將本地目錄掛載到容器中,我們可以確保配置文件、日志和網(wǎng)站文件持久化存儲(chǔ)在宿主機(jī)上。
以下是啟動(dòng) Nginx 容器的命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ --network host \ -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \ -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \ -v "$DIR/nginx/log:/var/log/nginx" \ -v "$DIR/nginx/html:/opt/html" \ nginx:stable-alpine
解釋各個(gè)參數(shù):
-d
:后臺(tái)運(yùn)行容器。--restart=always
:容器在崩潰或系統(tǒng)重啟后自動(dòng)重啟。--name "$DOCKER_NAME"
:容器的名稱為docker-nginx
。--network host
:容器將使用宿主機(jī)的網(wǎng)絡(luò)棧。-v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
:掛載自定義的nginx.conf
配置文件到容器中。-v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d"
:掛載自定義的配置目錄。-v "$DIR/nginx/log:/var/log/nginx"
:掛載日志目錄,便于查看和管理日志。-v "$DIR/nginx/html:/opt/html"
:掛載網(wǎng)站文件目錄,用于存放靜態(tài)網(wǎng)頁(yè)。
七、修改 nginx.conf 文件配置監(jiān)聽(tīng)端口
如果你希望更改 Nginx 的默認(rèn)端口,可以在修改的 nginx.conf
文件中進(jìn)行配置。在 nginx.conf
中,你可以找到以下內(nèi)容:
server { listen 80; server_name localhost; client_max_body_size 100m; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log notice; #測(cè)試 location /demo/testme { default_type text/html; return 200 "demo success 80!"; } #首頁(yè)靜態(tài)資源 location /demo { autoindex off; # 禁止目錄索引 server_tokens off; # 在http{}塊中隱藏服務(wù)器版本號(hào) client_max_body_size 100m; alias /opt/html/dist; index index.html index.htm; try_files $uri $uri/ /demo/index.html; #front為路由 而不是目錄 } }
將 listen 80
; 改為你需要的端口(例如 listen 8080;
)。這樣,Nginx 就會(huì)監(jiān)聽(tīng)新的端口。
八、端口配置:Host 網(wǎng)絡(luò)模式 vs Port 映射模式
在 Docker 中,容器的端口配置是非常關(guān)鍵的。Nginx 容器支持兩種主要的端口配置方式:Host 網(wǎng)絡(luò)模式 和 Port 映射模式。
Host 網(wǎng)絡(luò)模式
在 Docker 中使用
--network host
時(shí),容器將共享宿主機(jī)的網(wǎng)絡(luò)棧,這意味著容器直接使用宿主機(jī)的 IP 地址和端口來(lái)暴露服務(wù)。通過(guò)這種方式,容器會(huì)使用宿主機(jī)的端口 80 來(lái)提供服務(wù)。配置命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ --network host \ -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \ -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \ -v "$DIR/nginx/log:/var/log/nginx" \ -v "$DIR/nginx/html:/opt/html" \ nginx:stable-alpine
- 優(yōu)點(diǎn)
- 容器共享宿主機(jī)的網(wǎng)絡(luò),性能較高。
- 無(wú)需顯式端口映射,容器與宿主機(jī)共享相同的網(wǎng)絡(luò)。
- 缺點(diǎn)
- 容器與宿主機(jī)的網(wǎng)絡(luò)完全共享,可能會(huì)有端口沖突,尤其是多個(gè)容器或服務(wù)同時(shí)運(yùn)行時(shí)。
- 容器的端口與宿主機(jī)端口相同,可能存在安全隱患。
- 優(yōu)點(diǎn)
Port 映射模式
如果你希望使用宿主機(jī)的特定端口來(lái)訪問(wèn)容器內(nèi)的服務(wù),可以使用
-p
參數(shù)進(jìn)行端口映射。通過(guò)這種方式,容器內(nèi)部的端口(例如 80)將映射到宿主機(jī)的另一個(gè)端口(例如 8080)。配置命令:
docker run -d \ --restart=always \ --name "$DOCKER_NAME" \ -p 8080:80 \ -v "$DIR/nginx/conf/nginx.conf:/etc/nginx/nginx.conf" \ -v "$DIR/nginx/conf/conf.d:/etc/nginx/conf.d" \ -v "$DIR/nginx/log:/var/log/nginx" \ -v "$DIR/nginx/html:/opt/html" \ nginx:stable-alpine
在這個(gè)配置中:
-p 8080:80
:將宿主機(jī)的 8080 端口映射到容器的 80 端口。你可以通過(guò)宿主機(jī)的http://localhost:8080
訪問(wèn) Nginx 服務(wù)。- 優(yōu)點(diǎn)
- 容器端口與宿主機(jī)端口不同,可以避免端口沖突。
- 容器與宿主機(jī)之間有更好的網(wǎng)絡(luò)隔離性。
- 支持多個(gè)容器映射到宿主機(jī)不同的端口,適合多容器環(huán)境。
- 缺點(diǎn)
- 可能會(huì)導(dǎo)致稍微的性能損失,因?yàn)樾枰M(jìn)行額外的端口映射。
- 需要手動(dòng)管理和指定端口映射。
- 優(yōu)點(diǎn)
九、查看日志和檢查容器狀態(tài)
容器啟動(dòng)后,你可以通過(guò)以下命令查看容器的狀態(tài),確保它在運(yùn)行中:
docker ps
如果容器未正常運(yùn)行,可以查看日志進(jìn)行排查:
docker logs docker-nginx
查看 Nginx 的訪問(wèn)日志和錯(cuò)誤日志也可以幫助你調(diào)試網(wǎng)站:
tail -f "$DIR/nginx/log/access.log" tail -f "$DIR/nginx/log/error.log"
十、訪問(wèn) Nginx 服務(wù)
完成上述步驟后,你可以通過(guò)瀏覽器訪問(wèn)宿主機(jī)的 IP 地址和配置的端口,查看 Nginx 是否正常運(yùn)行。
- 如果使用了
--network host
,則可以通過(guò)http://localhost
或宿主機(jī)的 IP 地址訪問(wèn)服務(wù)。 - 如果使用了端口映射,例如 -
p 8080:80
,則可以通過(guò)http://localhost:8080
訪問(wèn) Nginx 歡迎頁(yè)面。
總結(jié)
通過(guò) Docker 部署 Nginx 容器非常簡(jiǎn)便,并且可以靈活配置各個(gè)參數(shù)。通過(guò)掛載本地目錄,Nginx 的配置文件、日志和網(wǎng)站文件可以持久化存儲(chǔ)在宿主機(jī)上,便于管理和備份。使用 Docker 來(lái)運(yùn)行 Nginx 容器不僅簡(jiǎn)化了部署流程,還提供了極大的靈活性和可擴(kuò)展性。
到此這篇關(guān)于Docker搭建Nginx服務(wù)器的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker搭建Nginx服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker搭建 Nginx+PHP+MySQL 環(huán)境并部署WordPress實(shí)踐
- 利用docker搭建php7和nginx運(yùn)行環(huán)境全過(guò)程(官方鏡像)
- Docker如何使用nginx搭建tomcat集群(圖文詳解)
- Docker搭建Nginx圖片服務(wù)器的方法
- 基于docker搭建nginx文件服務(wù)器的方法步驟
- docker搭建nginx實(shí)現(xiàn)負(fù)載均衡的示例代碼
- docker搭建nginx的實(shí)現(xiàn)步驟
- 使用Docker快速搭建Nginx?Web服務(wù)器
- Docker搭建一個(gè)nginx服務(wù)的實(shí)現(xiàn)
相關(guān)文章
如何解決docker認(rèn)證問(wèn)題failed to authorize:failed to&n
這篇文章主要介紹了在使用Docker構(gòu)建鏡像時(shí)遇到的認(rèn)證問(wèn)題,并提供了兩種解決方案:全局代理設(shè)置和禁用BuildKit,文章還指出了一個(gè)Dockerfile中的語(yǔ)法錯(cuò)誤,并提供了修正建議2025-03-03Docker容器日志占用空間過(guò)大問(wèn)題及解決
這篇文章主要介紹了Docker容器日志占用空間過(guò)大問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Docker 退出container后保持繼續(xù)運(yùn)行的操作
這篇文章主要介紹了Docker 退出container后保持繼續(xù)運(yùn)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Docker實(shí)踐--部署Nodejs應(yīng)用
本篇文章主要介紹了Docker實(shí)踐--部署Nodejs應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較
這篇文章主要介紹了詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)超詳細(xì)攻略
Docker倉(cāng)庫(kù)是集中存放鏡像的地方,分為公共倉(cāng)庫(kù)和私有倉(cāng)庫(kù),這篇文章主要給大家介紹了關(guān)于Docker自定義JDK鏡像并拉取至阿里云鏡像倉(cāng)庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08