Docke搭建:Nginx
accttodo 12/31/2024 运维操作系统Docker
目录
参考:
# Docke搭建:Nginx
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 备注 |
---|---|---|---|---|
Windows | 11 | x86_64 |
# 查询镜像
# 查询nginx镜像
docker search nginx
1
2
2
# 拉取镜像
# 拉取对应的版本镜像
docker pull nginx:latest
1
2
2
# 检查镜像
docker images
1
2
2
# 启动容器
创建挂载目录
mkdir -p /data/nginx/{conf,html,log}
mkdir -p /data/nginx/conf/conf.d
1
2
2
复制配置文件
# 创建临时nginx容器,用于复制配置文件
docker run --name nginx \
-p 80:80 \
-d nginx:latest
1
2
3
4
2
3
4
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /data/nginx
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
#停止并删除创建的临时nginx容器
docker stop nginx
docker rm nginx
1
2
3
2
3
创建&启动容器
#创建nginx容器,并将nginx目录映射到宿主机
docker run --name nignx \
-p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
-d nginx:latest
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
命令结束,输出的是容器的 ID,表示容器已成功启动。
# 检查容器的状态
docker ps -a
# 查看日志
docker logs nginx
1
2
3
4
2
3
4
访问服务器ip:80例:http://127.0.0.1:80/ (opens new window)
# 进入容器
# 进入Nginx容器
docker exec -it nginx /bin/bash
1
2
2
#检查配置文件是否正确
nginx -t
1
2
2
# 不重启重新加载配置文件
nginx -s reload
1
2
2
# Docker Compose 安装 Nginx 指南
# 一、准备工作
环境要求:
- Docker 已安装(版本 20.10+)
- Docker Compose 已安装(版本 v2.20+)
- 系统:Linux/Windows/macOS(推荐 Linux)
创建目录结构:
mkdir -p ~/nginx-docker/{conf,conf/conf.d,html,log}
1
# 二、获取 Nginx 默认配置
# 创建临时容器复制配置文件
docker run --name nginx-temp -d nginx:latest
docker cp nginx-temp:/etc/nginx/nginx.conf ~/nginx-docker/conf/
docker cp nginx-temp:/etc/nginx/conf.d/ ~/nginx-docker/conf/
docker cp nginx-temp:/usr/share/nginx/html/ ~/nginx-docker/
docker stop nginx-temp && docker rm nginx-temp
1
2
3
4
5
6
2
3
4
5
6
# 三、创建 docker-compose.yml
在 ~/nginx-docker
目录创建文件:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
- "443:443" # 可选 HTTPS 端口
volumes:
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf/conf.d:/etc/nginx/conf.d
- ./log:/var/log/nginx
- ./html:/usr/share/nginx/html
restart: unless-stopped
networks:
- nginx-net
networks:
nginx-net:
driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 四、启动 Nginx 服务
cd ~/nginx-docker
docker compose up -d
1
2
2
# 五、验证操作
检查容器状态:
docker ps -a | grep nginx
1测试默认页面: 访问
http://localhost
应显示 Nginx 欢迎页查看日志:
docker logs nginx
1进入容器:
docker exec -it nginx /bin/bash
1
# 六、管理命令
操作 | 命令 |
---|---|
启动服务 | docker compose up -d |
停止服务 | docker compose down |
重启服务 | docker compose restart |
重载配置 | docker exec nginx nginx -s reload |
测试配置 | docker exec nginx nginx -t |
# 七、自定义配置
修改主配置: 编辑
~/nginx-docker/conf/nginx.conf
添加 Server 配置: 在
~/nginx-docker/conf/conf.d/
创建mysite.conf
:server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
1
2
3
4
5
6
7
8
9
10
11更新网页内容: 将文件放入
~/nginx-docker/html/
# 八、反向代理配置示例
location / {
proxy_pass http://app-server:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
注:需要确保被代理服务与 Nginx 在同一 Docker 网络中
# 常见问题解决
端口冲突: 修改
docker-compose.yml
中的端口映射(如8080:80
)配置错误:
docker exec nginx nginx -t # 测试配置文件语法
1权限问题: 在 Linux 系统添加
:Z
到 volume 路径(如./html:/usr/share/nginx/html:Z
)
此方案结合了链接1的 Docker 部署思路和链接2的配置管理实践,使用 Compose 简化了流程,同时保留了配置灵活性。