Docker部署Nginx服務的兩種實現(xiàn)方法
引言
在現(xiàn)代應用部署中,Docker 憑借其輕量、隔離、可移植的特性成為主流選擇。Nginx 作為高性能的 Web 服務器和反向代理,結(jié)合 Docker 可以快速實現(xiàn)環(huán)境一致性和部署自動化。本文將詳細介紹如何通過 Docker 部署 Nginx 1.24.0 版本,并實現(xiàn)配置文件、日志和網(wǎng)站內(nèi)容的持久化管理。
準備工作
在開始部署前,請確保你的環(huán)境已滿足以下條件:
- 已安裝 Docker 引擎(推薦版本 20.10 及以上)
- 具備基本的 Linux 命令操作能力
- 擁有服務器的 root 或 sudo 權限
- 可通過以下命令驗證 Docker 是否正常運行
docker --version # 查看 Docker 版本 systemctl status docker # 檢查 Docker 服務狀態(tài)
方法1:docker方式部署
步驟一:拉取Nginx鏡像
Docker 鏡像作為容器的模板,我們首先需要從 Docker Hub 拉取官方的 Nginx 鏡像??梢灾付ㄒ粋€具體的版本,也可以默認拉取latest。
docker pull nginx:1.26.0
拉取完成后,可通過docker images命令查看本地鏡像列表,確認nginx:1.26.0 已存在:
docker images

步驟二:創(chuàng)建宿主機目錄結(jié)構
為了實現(xiàn) Nginx 配置、日志和網(wǎng)站內(nèi)容的持久化,避免容器刪除后數(shù)據(jù)丟失,我們需要在宿主機創(chuàng)建對應的目錄結(jié)構。推薦的目錄規(guī)劃如下:
- 創(chuàng)建主目錄
mkdir -p /opt/nginx
- 分別創(chuàng)建配置、日志和網(wǎng)站內(nèi)容目錄
mkdir -p /opt/nginx/conf # 存放 Nginx 主配置文件 mkdir -p /opt/nginx/conf/conf.d # 存放虛擬主機配置 mkdir -p /opt/nginx/log # 存放 Nginx 日志 mkdir -p /opt/nginx/html # 存放網(wǎng)站靜態(tài)文件
步驟三:獲取容器內(nèi)的默認配置文件
Nginx容器內(nèi)置了默認的配置文件,但這些文件存在于容器內(nèi)部。為了便于后續(xù)自定義配置,我們需要先通過一個臨時容器提取這些文件到宿主機的目錄中。
- 啟動臨時 Nginx 容器,執(zhí)行以下命令創(chuàng)建并啟動一個臨時的 Nginx 容器:
docker run --name nginx -d nginx:1.26.0 # --name nginx:為容器指定名稱 # -d:以守護進程模式運行
- 復制容器內(nèi)的配置文件到宿主機
通過 docker cp 命令將容器內(nèi)的關鍵文件復制到之前創(chuàng)建的目錄中。
docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf
- 復制虛擬主機配置目錄 conf.d
docker cp nginx:/etc/nginx/conf.d /opt/nginx/conf/
- 復制默認網(wǎng)站內(nèi)容目錄html
docker cp nginx:/usr/share/nginx/html /opt/nginx/
- 刪除臨時容器
配置文件已提取完成,臨時容器不再需要,執(zhí)行以下命令停止并刪除容器:
docker stop nginx docker rm nginx
步驟四:啟動正式的 Nginx 容器
基于宿主機的持久化目錄,啟動正式的 Nginx 容器,通過 -v 參數(shù)實現(xiàn)目錄掛載:
docker run --restart=always -d --name nginx \ -p 80:80 \ -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /opt/nginx/log:/var/log/nginx \ -v /opt/nginx/html:/usr/share/nginx/html \ -v /mnt/volumn:/mnt/volumn \ nginx:1.26.0
命令參數(shù)說明:
–restart=always:設置容器隨 Docker 服務自動啟動(避免服務器重啟后容器未運行)
-d:后臺運行容器
–name nginx:指定容器名稱為 nginx
-p 80:80:端口映射(宿主機 80 端口:容器內(nèi) 80 端口,外部可通過服務器 IP:80 訪問)
-v 目錄掛載:
配置文件掛載:確保宿主機修改配置后無需重啟容器即可生效(需執(zhí)行 nginx -s reload)
日志掛載:便于在宿主機直接查看和分析 Nginx 日志
網(wǎng)站內(nèi)容掛載:直接在宿主機修改 /opt/nginx/html 目錄下的文件即可更新網(wǎng)站內(nèi)容
/mnt/volumn:/mnt/volumn:額外 掛載自定義目錄(可根據(jù)實際需求添加或刪除,例如用于存放靜態(tài)資源)
步驟五:驗證 Nginx 容器運行狀態(tài)
容器啟動后,通過以下命令確認是否正常運行:
docker ps | grep nginx
查看容器詳細日志(排查啟動失敗問題)
docker logs nginx
若容器正常運行,可通過瀏覽器訪問服務器的 80 端口,應顯示Nginx的默認歡迎頁面
方法2:docker-compose方式部署
- 拉取鏡像
docker pull nginx:1.26.0
- 建立自定義網(wǎng)絡
docker network ls
docker network create --driver bridge my_switch
- 編寫docker-compose.yml文件
services:
nginx: # 服務的名稱 自定義
image: nginx:1.26.0
container_name: nginx # 容器名稱
restart: always
ports:
- "80:80"
volumes:
- /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /opt/nginx/html:/usr/share/nginx/html
- /opt/nginx/conf/conf.d:/etc/nginx/conf.d
- /opt/nginx/log:/var/log/nginx
- /mnt/volume:/mnt/volume
networks:
- my_switch
networks:
my_switch:
external: true # 指明該網(wǎng)絡是外部定義和管理的
- 啟動容器
在docker-compose.yml文件所在的目錄下,打開終端或命令行界面,運行以下命令
docker-compose up -d
結(jié)語
本文闡述的Docker部署Nginx方案,核心在于通過目錄掛載實現(xiàn)數(shù)據(jù)持久化,既保留了容器化部署的輕量特性,又解決了配置與數(shù)據(jù)的管理難題。這種模式在實際生產(chǎn)環(huán)境中極具實用價值。當需要遷移服務時,只需打包宿主機的 /opt/nginx目錄與啟動命令,即可在新環(huán)境快速復現(xiàn)相同的運行實例。
本文還分別介紹了docker原生和docker-compose工具兩種方式部署nginx的方法。個人比較推薦后者,docker-compose方式使得docker的運維內(nèi)容都以yaml的方式保存下來,使得后期運維更加清晰明了,但docker原生的方式可以讓操作者更加熟悉docker底層的邏輯,也是一種加深學習映像的方式。
到此這篇關于Docker部署Nginx服務的兩種實現(xiàn)方法的文章就介紹到這了,更多相關Docker部署Nginx服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Docker 部署 Microsoft SQL Server 完全指南
本文詳細介紹如何使用Docker快速部署Microsoft SQL Server,提供兩種主流方式,兩種方式都包含了數(shù)據(jù)持久化、資源限制等生產(chǎn)環(huán)境所需的配置,并提供了詳細的參數(shù)說明和常見問題解決方法,感興趣的朋友跟隨小編一起看看吧2025-08-08
Docker可視化ui管理工具Portainer安裝及使用解析
這篇文章主要介紹了Docker可視化ui管理工具Portainer安裝及使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11
docker容器中登陸并操作postgresql的實現(xiàn)
本文主要介紹了docker容器中登陸并操作postgresql的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02

