Docker學習日志-Docker容器配置、Nginx 配置與文件映射
docker run 之后能否再次修改卷映射或端口映射?
不能直接修改已創建容器的卷映射或端口映射。
Docker 的設計原則是 **容器是不可變的 **,也就是說:
一旦容器通過 docker run 創建完成,它的配置(如卷映射、端口映射、網絡等)不能直接修改。如果你需要更改這些配置,有以下幾種方法:
方法一:刪除容器并重新創建
my-nginx是容器名
docker stop my-nginx
docker rm my-nginx
重新運行并添加卷映射和端口映射
docker run -d --name my-nginx \-p 8080:80 \-v D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html \nginx
方法二:使用 Docker Compose 管理配置
由于docker的設計原則是“容器是不可變的”,所以Docker Compose不是修改現有容器,而是先刪除舊容器,再根據新的 compose 文件新建一個配置更新后的容器。
創建一個 示例: docker-compose.yml
文件:
version: '3'
services:nginx:image: nginxports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlcontainer_name: my-nginx
然后使用啟動:
docker-compose up -d
修改配置后并啟動:
version: '3'
services:nginx:image: nginxports:- "8080:80"volumes:- D:/dockerFils/nginx/nginx_html:/usr/share/nginx/htmlcontainer_name: my-nginx
docker-compose down
docker-compose up -d
nginx配置文件
- Nginx 容器內的核心配置文件
/etc/nginx/nginx.conf
(主配置文件)- 作用: 定義 Nginx 的全局設置。
- 包含內容示例: 工作進程數、錯誤日志路徑、事件模型、HTTP 模塊的全局設置(如 MIME 類型、默認日志格式、連接超時)、包含其他配置文件的指令(如
include /etc/nginx/conf.d/*.conf;
)。
/etc/nginx/conf.d/
目錄下的*.conf
文件 (站點配置文件 / 虛擬主機配置)- 作用: 定義具體的網站(虛擬主機)的行為。每個文件通常對應一個域名(站點)。
- 核心結構: 基于
server { ... }
塊進行配置。 - 配置項示例:
listen
: 監聽的端口(如80
)。server_name
: 綁定的域名(如www.example.com
,blog.example.com
)。一個物理服務器可以通過配置多個server
塊綁定多個域名(虛擬主機)。location
: 定義如何處理特定請求路徑的規則。root
: 指定該站點網頁文件的根目錄。index
: 指定默認索引文件。try_files
: 嘗試查找文件的順序。proxy_pass
: 配置反向代理(常見于應用后端)。
- 網頁文件默認目錄:
/usr/share/nginx/html
/etc/nginx/
├── nginx.conf
└── conf.d/├── default.conf # 站點1:www.example.com├── blog.example.com.conf # 站點2:blog.example.com└── api.example.com.conf # 站點3:api.example.com
示例的站點配置,只有server塊
server {listen 80;server_name blog.example.com;location / {root /data/blog;index index.html;try_files $uri $uri/ =404;}
}
自定義運行 Nginx 容器的文件映射
在docker中使用卷映射會讓容器中的配置消失,所需要先拷貝出容器中的配置文件然后再進行卷映射。
文件復制
# 創建臨時的nginx用于復制文件
docker run -d --name temp-nginx -p 8080:80 nginx# 復制主配置文件到本地:
docker cp temp-nginx:/etc/nginx/nginx.conf D:/dockerFils/nginx/nginx_mainConf/nginx.conf# 復制站點配置文件:
docker cp temp-nginx:/etc/nginx/conf.d D:/dockerFils/nginx/nginx_defaultConf#復制網頁文件目錄:
docker cp temp-nginx:/usr/share/nginx/html D:/dockerFils/nginx/nginx_html# 停止臨時容器:
docker stop temp-nginx # 刪除臨時容器
docker rm temp-nginx
進行卷映射
只替換主配置文件 + 自定義網頁內容。
docker run -d --name my-nginx \-p 8080:80 \-v D:/dockerFils/nginx/nginx_mainConf/nginx.conf:/etc/nginx/nginx.conf \-v D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html \nginx
映射 default.conf(站點配置) + html(網頁文件)
docker run -d --name my-nginx \-p 8080:80 \-v D:/dockerFils/nginx/nginx_defaultConf/default.conf:/etc/nginx/conf.d/default.conf \-v D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html \nginx
映射 nginx.conf + default.conf + html
docker run -d --name my-nginx \-p 8080:80 \-v D:/dockerFils/nginx/nginx_mainConf/nginx.conf:/etc/nginx/nginx.conf \-v D:/dockerFils/nginx/nginx_defaultConf/default.conf:/etc/nginx/conf.d/default.conf \-v D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html \nginx
如果你掛載的是文件(如 nginx.conf、default.conf),那么容器中的對應文件會被你的本地文件完全替換。
如果你掛載的是目錄(如 html),那么整個目錄內容都會被替換。
如果你掛載了卷(volume),即使容器被刪除并重建,只要你不刪除卷本身,數據仍然是安全的。
切換到docker中的nginx文件夾內查看
docker exec -it my-nginx /bin/bash
my-nginx 為 容器名稱,執行命令的shell: /bin/bash