Docker学习日志-Docker容器配置、Nginx 配置与文件映射

Docker学习日志-Docker容器配置、Nginx 配置与文件映射

docker run 之后能否再次修改卷映射或端口映射?

不能直接修改已创建容器的卷映射或端口映射。

Docker 的设计原则是 **容器是不可变的 **,也就是说:

一旦容器通过 docker run 创建完成,它的配置(如卷映射、端口映射、网络等)不能直接修改。如果你需要更改这些配置,有以下几种方法:

方法一:删除容器并重新创建

my-nginx是容器名

base 复制代码
docker stop my-nginx
docker rm my-nginx
重新运行并添加卷映射和端口映射
base 复制代码
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 文件:

yaml 复制代码
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    container_name: my-nginx

然后使用启动:

base 复制代码
docker-compose up -d

修改配置后并启动:

yaml 复制代码
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - D:/dockerFils/nginx/nginx_html:/usr/share/nginx/html
    container_name: my-nginx
base 复制代码
docker-compose down
docker-compose up -d

nginx配置文件

  1. 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
c 复制代码
/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块

base 复制代码
server {
    listen 80;
    server_name blog.example.com;

    location / {
        root /data/blog;
        index index.html;
        try_files $uri $uri/ =404;
    }
}

自定义运行 Nginx 容器的文件映射

在docker中使用卷映射会让容器中的配置消失,所需要先拷贝出容器中的配置文件然后再进行卷映射。

文件复制

base 复制代码
# 创建临时的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

进行卷映射

只替换主配置文件 + 自定义网页内容。
base 复制代码
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(网页文件)
base 复制代码
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
base 复制代码
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

相关推荐
dear_bi_MyOnly3 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
一只小菜鸡..4 小时前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
MartinYeung55 小时前
[论文学习]迈向自主医疗人工智能智能体:MIRA系统深度分析
人工智能·学习
晚风吹长发6 小时前
Docker基础——Docker Network(网络详解)
linux·运维·网络·ubuntu·docker·容器
熊猫钓鱼>_>7 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
茯苓gao10 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
ji_shuke10 小时前
从零深入:基于 Playwright + Pytest + Allure 的企业级 Web 端到端自动化测试框架实战
前端·自动化测试·docker·jenkins·pytest·allure·playwright
木木_王10 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
FellAveal11 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
你怎么知道我是队长11 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习