在Docker容器中運(yùn)行Nginx的詳細(xì)教程
前言
Nginx 是一款高性能 Web 服務(wù)器,常被用作反向代理、負(fù)載均衡器以及內(nèi)容緩存。它以高效與靈活著稱(chēng),是提供靜態(tài)文件服務(wù)、流量管理和提升應(yīng)用速度的首選解決方案。而當(dāng)你將 Nginx 運(yùn)行在 Docker 容器中時(shí),還能進(jìn)一步獲得可移植性、快速部署和更整潔的管理體驗(yàn)。
本教程將帶你從零開(kāi)始學(xué)習(xí)如何使用 Docker 部署 Nginx。內(nèi)容包括:
- 拉取官方鏡像
- 在 Docker 容器中運(yùn)行 Nginx
- 映射端口并訪(fǎng)問(wèn)服務(wù)
- 使用自定義配置文件和 HTML 內(nèi)容
- 管理容器
- 使用 Docker Compose 管理多容器環(huán)境
完成后,你將能夠以快速、干凈、可重復(fù)的方式運(yùn)行屬于你自己的 Nginx 服務(wù)。
一、運(yùn)行 Nginx 所需的前提條件
在開(kāi)始之前,請(qǐng)確保具備以下條件:
- 擁有 VPS 主機(jī)訪(fǎng)問(wèn)權(quán)限
如果你還沒(méi)有,可以考慮 云廠商 等提供的 VPS 托管方案。 - 服務(wù)器上已安裝 Docker
- 熟悉基本的 Docker 命令
- 已安裝 Docker Compose(用于高級(jí)配置)
重要提示
Docker 命令通常需要 sudo 權(quán)限。
你可以將當(dāng)前用戶(hù)添加到 Docker 用戶(hù)組以免每次都輸入 sudo。
本教程中為簡(jiǎn)潔起見(jiàn)省略了 sudo,你可根據(jù)實(shí)際環(huán)境調(diào)整。
二、拉取 Nginx 官方 Docker 鏡像
要啟動(dòng) Nginx,首先需要從 Docker Hub 拉取官方鏡像:
docker pull nginx
該命令會(huì)獲取最新的穩(wěn)定版 Nginx 鏡像。推薦始終使用官方鏡像,因?yàn)樗?Nginx 團(tuán)隊(duì)維護(hù),更新及時(shí)且無(wú)冗余內(nèi)容。
下載完成后,運(yùn)行以下命令驗(yàn)證鏡像是否存在:
docker images
在輸出結(jié)果的“REPOSITORY”列中查找 nginx 即可確認(rèn)。

三、以分離模式運(yùn)行 Nginx 容器
有了鏡像后,可以啟動(dòng)一個(gè)名為 nginx-server 的容器:
docker run -d --name nginx-server -p 80:80 nginx
命令說(shuō)明:
-d:讓容器在后臺(tái)運(yùn)行(Detached 模式)--name:為容器命名-p 80:80:將主機(jī)的 80 端口映射到容器的 80 端口
Detached 模式意味著容器在后臺(tái)持續(xù)運(yùn)行,不占用當(dāng)前終端,非常適合 Nginx 這類(lèi)長(zhǎng)期運(yùn)行的服務(wù)。
驗(yàn)證容器運(yùn)行狀態(tài):
docker ps

然后在本地測(cè)試訪(fǎng)問(wèn):
curl http://localhost:80
成功后,你將看到 Nginx 默認(rèn)歡迎頁(yè):

四、端口映射與訪(fǎng)問(wèn)控制
默認(rèn)情況下,Nginx 在容器內(nèi)部監(jiān)聽(tīng) 80 端口。
使用 -p 參數(shù)可以指定主機(jī)與容器端口的映射:
docker run -d --name nginx-alt -p 8080:80 nginx
這樣,外部訪(fǎng)問(wèn) http://localhost:8080 即可訪(fǎng)問(wèn)容器內(nèi)部的 80 端口。
如果出現(xiàn)“port already allocated”錯(cuò)誤,說(shuō)明端口被占用,可以使用 lsof -i :80 或 netstat 檢查端口使用情況。

五、自定義 Nginx 配置文件
你可以通過(guò)掛載自定義配置文件來(lái)實(shí)現(xiàn)反向代理、緩存、SSL 或其他高級(jí)功能。
創(chuàng)建配置文件:
nano nginx.conf
示例配置(將請(qǐng)求代理到 http://127.0.0.1:3000):
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
運(yùn)行帶自定義配置的容器:
docker run -d --name nginx-reverse-proxy \ -p 8080:80 \ -v /full/path/to/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx
-v 參數(shù)掛載本地配置文件到容器內(nèi),并設(shè)置只讀模式(:ro)。
測(cè)試代理是否生效:
curl http://localhost:8080
若需修改配置,修改文件后執(zhí)行:
docker restart nginx-reverse-proxy
六、掛載靜態(tài)網(wǎng)站內(nèi)容
Nginx 最常見(jiàn)的用途之一是托管靜態(tài)網(wǎng)頁(yè)。
只需將本地網(wǎng)站目錄掛載到容器內(nèi):
docker run -d --name nginx-static \ -p 8080:80 \ -v /path/to/site:/usr/share/nginx/html:ro \ nginx
這樣,Nginx 會(huì)自動(dòng)從 /usr/share/nginx/html 提供內(nèi)容。默認(rèn)配置支持 HTML、CSS、JS、圖片等基礎(chǔ)類(lèi)型。
若需重定向、自定義緩存規(guī)則或訪(fǎng)問(wèn)控制,可再定義自有 nginx.conf。
七、管理 Nginx 容器
常用命令如下:
停止容器
docker stop nginx-server
啟動(dòng)容器
docker start nginx-server
重啟容器
docker restart nginx-server
查看日志
docker logs nginx-server
刪除容器
docker stop nginx-server docker rm nginx-server
保持環(huán)境整潔有助于避免端口沖突和資源浪費(fèi)。

八、使用 Docker Compose 管理 Nginx
當(dāng)項(xiàng)目包含多個(gè)容器時(shí),Docker Compose 可以讓部署更簡(jiǎn)單。
創(chuàng)建 docker-compose.yml 文件:
version: '3'
services:
nginx:
image: nginx
container_name: nginx-compose
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
在同一目錄下執(zhí)行:
docker-compose up -d
停止并清理:
docker-compose down
九、多服務(wù)協(xié)同部署(Nginx + 后端)
Docker Compose 也可以同時(shí)運(yùn)行前后端服務(wù),例如 Node.js + Nginx。
示例 docker-compose.yml:
version: '3'
services:
backend:
build: ./backend
container_name: node-app
ports:
- "3000:3000"
networks:
- app-network
nginx:
image: nginx
container_name: nginx-proxy
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- backend
networks:
- app-network
networks:
app-network:
這樣,Nginx 將通過(guò)網(wǎng)絡(luò)連接到后端容器,實(shí)現(xiàn)流量轉(zhuǎn)發(fā)。
結(jié)語(yǔ)
至此,你已經(jīng)學(xué)會(huì)如何:
- 從官方鏡像運(yùn)行 Nginx
- 使用自定義配置或靜態(tài)資源
- 管理容器生命周期
- 通過(guò) Docker Compose 構(gòu)建多服務(wù)架構(gòu)
Nginx + Docker 的組合能讓部署更高效、環(huán)境更干凈、遷移更方便。無(wú)論是搭建個(gè)人網(wǎng)站還是構(gòu)建復(fù)雜微服務(wù)體系,這都是最穩(wěn)妥的起點(diǎn)。
以上就是在Docker容器中運(yùn)行Nginx的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Docker運(yùn)行Nginx的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
告別Docker請(qǐng)求超時(shí)之一步步排查與詳細(xì)解決方案
在Ubuntu系統(tǒng)上安裝Docker后,運(yùn)行docker?run?hello-world時(shí)遇到連接超時(shí)問(wèn)題,下面這篇文章主要介紹了Docker請(qǐng)求超時(shí)一步步排查與詳細(xì)解決方案的相關(guān)資料,需要的朋友可以參考下2025-02-02
Docker API 未授權(quán)訪(fǎng)問(wèn)漏洞問(wèn)題解析
這篇文章主要介紹了Docker API 未授權(quán)訪(fǎng)問(wèn)漏洞問(wèn)題解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Docker網(wǎng)絡(luò)IP地址沖突的解決方法
本文主要介紹了Docker網(wǎng)絡(luò)IP地址沖突的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
詳解在Docker容器內(nèi)外互相拷貝數(shù)據(jù)的方法
本篇文章主要介紹了詳解在Docker容器內(nèi)外互相拷貝數(shù)據(jù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Docker搭建RabbitMq的普通集群和鏡像集群的詳細(xì)操作
這篇文章主要介紹了Docker搭建RabbitMq的普通集群和鏡像集群,我本機(jī)是window10,通過(guò)docker搭建兩個(gè)rabbitmq節(jié)點(diǎn),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11
修改Docker鏡像默認(rèn)存儲(chǔ)位置的3種實(shí)現(xiàn)方式
文章介紹了三種解決Docker容器存儲(chǔ)空間不足的問(wèn)題的方法:使用軟鏈接、指定容器啟動(dòng)參數(shù)和創(chuàng)建配置文件,這些方法可以幫助更好地管理和擴(kuò)展Docker容器的存儲(chǔ)空間2026-03-03
部署Prometheus+Grafana監(jiān)控平臺(tái)實(shí)踐
文章介紹了如何在宿主機(jī)上配置Prometheus和Grafana,并使用NodeExporter監(jiān)控Linux服務(wù)器,通過(guò)Docker部署Prometheus和Grafana,并在Prometheus中添加NodeExporter作為數(shù)據(jù)源,最后,通過(guò)Grafana導(dǎo)入儀表盤(pán)來(lái)可視化監(jiān)控?cái)?shù)據(jù)2026-01-01

