Docker + Nginx 部署配置指南
下面這 4 個文件通常是一套 Docker + Nginx 部署配置。它們各司其職:Dockerfile 負(fù)責(zé)“怎么構(gòu)建鏡像”,docker-compose.yml 負(fù)責(zé)“怎么編排和啟動容器”,nginx.conf 負(fù)責(zé)“Nginx 怎么轉(zhuǎn)發(fā)/服務(wù)請求”,.dockerignore 負(fù)責(zé)“構(gòu)建鏡像時哪些文件不要帶進(jìn)去”。
| 文件 | 主要作用 | 可以理解為 |
|---|---|---|
Dockerfile | 定義 Docker 鏡像如何構(gòu)建 | 應(yīng)用的“鏡像制作說明書” |
nginx.conf | 定義 Nginx 的運(yùn)行配置 | Web 服務(wù)器 / 反向代理的“路由規(guī)則” |
docker-compose.yml | 定義多個容器如何一起運(yùn)行 | 本地/服務(wù)器部署的“一鍵啟動配置” |
.dockerignore | 排除不需要參與鏡像構(gòu)建的文件 | Docker 版 .gitignore |
1.Dockerfile
Dockerfile 是一個文本文件,里面寫的是構(gòu)建 Docker 鏡像的指令。Docker 官方文檔說,Docker 會讀取 Dockerfile 中的指令來自動構(gòu)建鏡像;它本質(zhì)上包含了你原本可能在命令行里一步步執(zhí)行的構(gòu)建命令。(Docker Documentation)
常見作用包括:
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build CMD ["npm", "start"]
它通常負(fù)責(zé):
- 指定基礎(chǔ)環(huán)境,比如
node、python、nginx。 - 拷貝項目代碼到鏡像中。
- 安裝依賴。
- 執(zhí)行構(gòu)建命令。
- 指定容器啟動后運(yùn)行什么命令。
在你的這組文件里,Dockerfile 很可能用于構(gòu)建前端項目、后端項目,或者自定義 Nginx 鏡像。
2.nginx.conf
nginx.conf 是 Nginx 的主配置文件。Nginx 官方文檔說明,Nginx 及其模塊的行為由配置文件中的指令決定;默認(rèn)配置文件通常叫 nginx.conf,可能位于 /usr/local/nginx/conf、/etc/nginx 或 /usr/local/etc/nginx。(Nginx)
它常用于配置:
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html;
}
location /api/ {
proxy_pass http://backend:3000/;
}
}常見作用包括:
- 配置監(jiān)聽端口,例如
80、443。 - 配置靜態(tài)資源目錄,例如前端打包后的
dist。 - 配置反向代理,例如把
/api請求轉(zhuǎn)發(fā)給后端服務(wù)。 - 配置 HTTPS、緩存、壓縮、日志。
- 配置多站點(diǎn)、多域名、多路徑轉(zhuǎn)發(fā)。
Nginx 本身可以作為 HTTP Web 服務(wù)器、反向代理、緩存、負(fù)載均衡器、TCP/UDP 代理等。(Nginx)
在 Docker 項目里,nginx.conf 經(jīng)常配合 Dockerfile 或 docker-compose.yml 使用,比如把本地的 nginx.conf 掛載到容器里的 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf。
3.docker-compose.yml
docker-compose.yml 是 Docker Compose 的配置文件,用 YAML 格式描述一個應(yīng)用由哪些服務(wù)組成。Docker 官方文檔說明,Compose 文件用于配置 Docker 應(yīng)用的 services、networks、volumes 等內(nèi)容。(Docker Documentation)
一個典型例子:
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
app:
build: .
expose:
- "3000"它通常負(fù)責(zé):
- 定義有哪些容器服務(wù),比如
nginx、frontend、backend、mysql、redis。 - 指定服務(wù)使用哪個鏡像,或者從哪個
Dockerfile構(gòu)建。 - 配置端口映射,比如
80:80、3000:3000。 - 配置數(shù)據(jù)卷掛載,比如掛載配置文件、數(shù)據(jù)庫數(shù)據(jù)目錄。
- 配置容器之間的依賴關(guān)系。
- 配置網(wǎng)絡(luò),使服務(wù)之間可以通過服務(wù)名互相訪問。
官方 Compose 規(guī)范中也提到,Compose 文件是一個 YAML 文件,核心結(jié)構(gòu)通常包括 services,也可以包括 networks、volumes、configs、secrets 等。(GitHub)
在你的這組文件里,docker-compose.yml 很可能是啟動整個項目的入口,例如:
docker compose up -d
4..dockerignore
.dockerignore 用來告訴 Docker:構(gòu)建鏡像時,哪些文件或目錄不要發(fā)送到構(gòu)建上下文里。Docker 官方文檔說明,構(gòu)建上下文中可以使用 .dockerignore 文件排除文件和目錄。(Docker Documentation)
典型內(nèi)容:
node_modules .git .env dist .DS_Store *.log
它的作用主要是:
- 減小 Docker 構(gòu)建上下文。
- 加快鏡像構(gòu)建速度。
- 避免把無關(guān)文件復(fù)制進(jìn)鏡像。
- 避免泄露敏感文件,比如
.env、私鑰、日志。 - 避免把本地依賴目錄,如
node_modules,帶進(jìn)鏡像。
它和 .gitignore 很像,但作用對象不同:
| 文件 | 作用對象 |
|---|---|
.gitignore | Git 提交時忽略哪些文件 |
.dockerignore | Docker 構(gòu)建鏡像時忽略哪些文件 |
這四個文件之間的關(guān)系
可以按部署流程這樣理解:
.dockerignore ↓ 過濾不需要參與構(gòu)建的文件 Dockerfile ↓ 根據(jù)項目代碼構(gòu)建 Docker 鏡像 nginx.conf ↓ 配置 Nginx 如何訪問靜態(tài)文件、轉(zhuǎn)發(fā) API、監(jiān)聽端口 docker-compose.yml ↓ 把 Nginx、應(yīng)用、數(shù)據(jù)庫等服務(wù)組合起來,一鍵啟動
一個常見前端項目部署流程可能是:
.dockerignore排除node_modules、.git、日志等文件。Dockerfile構(gòu)建前端項目,生成dist。nginx.conf配置 Nginx,把dist作為靜態(tài)網(wǎng)站目錄,并把/api轉(zhuǎn)發(fā)給后端。docker-compose.yml啟動 Nginx 容器、后端容器、數(shù)據(jù)庫容器。
簡單說:
Dockerfile:做鏡像 docker-compose.yml:跑容器 nginx.conf:管請求 .dockerignore:減負(fù)和防泄露
到此這篇關(guān)于Docker + Nginx 部署配置指南的文章就介紹到這了,更多相關(guān)Docker Nginx 部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 通過Docker和Nginx實(shí)現(xiàn)OpenClaw在Ubuntu服務(wù)器上的完整部署流程
- Docker部署nginx以及配置域名全過程
- 如何通過Docker部署Nginx服務(wù)
- Docker 部署 Nginx詳細(xì)攻略
- 如何使用 Docker Compose 部署 Nginx
- Docker?Compose+Nginx+Certbot自動化部署HTTPS的詳細(xì)指南
- centos docker容器化部署nginx php項目實(shí)踐
- 使用Docker部署可視化面板監(jiān)控Nginx的流程步驟
- Docker部署Nginx 及Nginx的基本使用最佳實(shí)踐
相關(guān)文章
Docker安裝Redis容器的實(shí)現(xiàn)步驟
本文主要介紹了Docker安裝Redis容器的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
綁定Dokcer容器到主機(jī)指定網(wǎng)卡的方法
這篇文章主要介紹了綁定 Dokcer 容器到主機(jī)指定網(wǎng)卡的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
docker啟動elasticsearch時內(nèi)存不足問題及解決方法
這篇文章主要介紹了docker啟動elasticsearch時內(nèi)存不足問題,本文給大家分享安裝過程及解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
docker鏡像的導(dǎo)入和導(dǎo)出的實(shí)現(xiàn)
這篇文章主要介紹了docker鏡像的導(dǎo)入和導(dǎo)出的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫的方法
這篇文章主要介紹了Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

