首先确保你的CentOS7系统已经安装了Docker:
# 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker --version
# 拉取官方Nginx镜像(默认最新版)
sudo docker pull nginx
# 或者指定版本
sudo docker pull nginx:1.21.6
# 运行一个简单的Nginx容器
sudo docker run --name my-nginx -p 80:80 -d nginx
mkdir -p ~/nginx-docker/{conf,html,logs}
# 运行临时容器获取默认配置
sudo docker run --name tmp-nginx -d nginx
sudo docker cp tmp-nginx:/etc/nginx/nginx.conf ~/nginx-docker/conf/
sudo docker cp tmp-nginx:/etc/nginx/conf.d ~/nginx-docker/conf/
sudo docker rm -f tmp-nginx
echo "<h1>Welcome to My Nginx Docker Site</h1>" > ~/nginx-docker/html/index.html
sudo docker run --name my-nginx \
-p 80:80 \
-v ~/nginx-docker/html:/usr/share/nginx/html \
-v ~/nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/nginx-docker/conf/conf.d:/etc/nginx/conf.d \
-v ~/nginx-docker/logs:/var/log/nginx \
-d nginx
# 查看运行中的容器
sudo docker ps
# 检查容器日志
sudo docker logs my-nginx
# 测试访问
curl http://localhost
错误现象:Bind for 0.0.0.0:80 failed: port is already allocated
解决方案:
1. 停止占用80端口的服务
2. 或者修改映射端口,如 -p 8080:80
错误现象:Permission denied
当挂载本地文件时
解决方案:
1. 确保挂载的本地文件有正确权限
2. 或者使用 --privileged=true
参数运行容器(不推荐生产环境)
错误现象:容器启动后立即退出
解决方案:
1. 检查Nginx配置文件是否正确
2. 使用 docker logs
查看错误日志
3. 可以进入容器调试:
bash
sudo docker exec -it my-nginx bash
nginx -t # 测试配置
version: '3'
services:
nginx:
image: nginx:1.21.6
container_name: my-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf/conf.d:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
- ./nginx/logs:/var/log/nginx
restart: unless-stopped
networks:
- frontend
networks:
frontend:
driver: bridge
FROM nginx:1.21.6
# 移除默认配置
RUN rm /etc/nginx/conf.d/default.conf
# 复制自定义配置
COPY nginx.conf /etc/nginx/nginx.conf
COPY conf.d/ /etc/nginx/conf.d/
# 复制网站文件
COPY html/ /usr/share/nginx/html/
# 暴露端口
EXPOSE 80 443
# 启动命令
CMD ["nginx", "-g", "daemon off;"]
通过以上步骤,你可以在CentOS7上成功部署和运行Docker化的Nginx服务,并根据需要进行定制化配置。