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: nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
container_name: my-nginx
然后使用启动:
docker-compose up -d
修改配置后并启动:
version: '4'
services:
nginx:
image: nginx
ports:
- "8080:80"
volumes:
- D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html
container_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
# 复制站点配置文件:
docker cp temp-nginx:/etc/nginx/conf.d/default.conf 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:/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:/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:/etc/nginx/nginx.conf \
-v D:/dockerFils/nginx/nginx_defaultConf:/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