Docker安装Nginx(最完整的安装方式)
首先介绍一下docker安装的nginx的文件目录解析
一、容器内的默认路径
-
核心配置文件
- 主配置文件:
/etc/nginx/nginx.conf
- 子配置文件:
/etc/nginx/conf.d/
(存放*.conf
扩展配置)
- 主配置文件:
-
静态资源目录
- 默认HTML文件路径:
/usr/share/nginx/html
- 默认HTML文件路径:
-
日志文件
- 访问日志和错误日志:
/var/log/nginx/
- 访问日志和错误日志:
-
二进制文件位置
- Nginx可执行文件:
/usr/sbin/nginx
- Nginx可执行文件:
二、如何查看路径
1.进入容器内部查看
# 查找容器ID
docker ps
# 进入容器Shell
docker exec -it <容器ID或名称> /bin/bash
# 查看Nginx相关路径
whereis nginx # 显示二进制文件路径
ls /etc/nginx # 查看配置文件目录 :ml-citation{ref="6,7" data="citationList"}
2.通过临时容器提取默认配置
# 启动临时容器
docker run --name tmp-nginx -d nginx
# 拷贝默认配置到宿主机
docker cp tmp-nginx:/etc/nginx/nginx.conf /宿主机/目标目录 :ml-citation{ref="5" data="citationList"}
三、自定义挂载路径
1.创建宿主机目录
mkdir -p /宿主机/目录/{conf,html,logs}
2.挂载运行容器
docker run -d --name my-nginx \-v /宿主机/目录/conf:/etc/nginx \ # 映射配置目录-v /宿主机/目录/html:/usr/share/nginx/html \ # 映射静态资源-v /宿主机/目录/logs:/var/log/nginx \ # 映射日志目录-p 80:80 nginx :ml-citation{ref="4,5" data="citationList"}
- 此时容器内路径会被宿主机目录覆盖,修改宿主机文件可直接生效。
四、注意事项
-
首次挂载空目录问题
- 若宿主机挂载目录为空,Docker会直接将容器内对应目录内容复制到宿主机(仅首次挂载时)。
-
权限配置
- 确保宿主机目录权限与容器内Nginx用户(默认
nginx
用户)匹配,避免读写失败。
- 确保宿主机目录权限与容器内Nginx用户(默认
Docker安装Nginx
一.拉取官方的Nginx镜像
docker pull nginx
二.使用 Nginx 默认的配置来启动一个 Nginx 容器实例:
docker run --rm --name
nginx-test -p 8080:80 -d nginx
参数的含义如下:
--rm:容器终止运行后,自动删除容器文件
--name nginx-test:容器的名字叫做Nginx-test,名字自己定义
-p: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口
-d:容器启动后,在后台运行
三.Nginx 服务部署,映射本地目录到Nginx容器
mkdir -p /opt/nginx/www /opt/nginx/conf
参数:
www: 目录将映射为 nginx 容器配置的虚拟目录。
conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
四.拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器ID可以查看 docker ps 命令输入中的第一列
五.部署命令
docker run --rm -d -p 8081:80 --name nginx-test-web \-v /opt/nginx/www:/usr/share/nginx/html \-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \nginx
命令说明:
--rm:容器终止运行后,自动删除容器文件。
-p 8081:80: 将容器的 80 端口映射到主机的 8081 端口.
--name nginx-test-web:将容器命名为 Nginx-test-web
-v /home/Nginx/www:/usr/share/Nginx/html:将我们自己创建的 www 目录挂载到容器的
/usr/share/Nginx/html。
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂
载到容器的 /etc/nginx/nginx.conf。
Docker常用命令及案例说明
Docker 基本命令概述
- Docker 简介:Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。
- Docker 命令分类:包括镜像管理、容器管理、网络管理、数据卷管理等。
镜像管理命令
docker pull
:从 Docker Hub 或其他镜像仓库拉取镜像。docker images
:列出本地所有的镜像。docker rmi
:删除本地的一个或多个镜像。docker build
:通过 Dockerfile 构建镜像。
容器管理命令
docker run
:创建并启动一个新容器。docker ps
:列出正在运行的容器。docker stop
:停止一个或多个正在运行的容器。docker start
:启动一个或多个已停止的容器。docker rm
:删除一个或多个容器。docker exec
:在运行的容器中执行命令。
网络管理命令
docker network create
:创建一个新的网络。docker network ls
:列出所有的网络。docker network inspect
:查看网络的详细信息。docker network connect
:将容器连接到指定网络。docker network disconnect
:将容器从指定网络断开。
数据卷管理命令
docker volume create
:创建一个新的数据卷。docker volume ls
:列出所有的数据卷。docker volume inspect
:查看数据卷的详细信息。docker volume rm
:删除一个或多个数据卷。
Docker Compose 命令
docker-compose up
:根据docker-compose.yml
文件启动服务。docker-compose down
:停止并删除由docker-compose up
创建的所有容器、网络、数据卷等。docker-compose ps
:列出由docker-compose
管理的所有容器。docker-compose logs
:查看由docker-compose
管理的容器的日志。
案例分析:使用 Docker 部署一个简单的 Web 应用
- 案例背景:部署一个基于 Flask 的简单 Web 应用。
- 步骤:
- 编写 Dockerfile 文件,定义应用的环境和依赖。
- 使用
docker build
命令构建镜像。 - 使用
docker run
命令启动容器,并映射端口。 - 使用
docker ps
命令查看容器状态。 - 使用
docker logs
命令查看容器日志。 - 使用
docker stop
和docker rm
命令停止并删除容器。
案例分析:使用 Docker Compose 部署多容器应用
- 案例背景:部署一个包含 Web 应用和数据库的多容器应用。
- 步骤:
- 编写
docker-compose.yml
文件,定义服务和网络。 - 使用
docker-compose up
命令启动所有服务。 - 使用
docker-compose ps
命令查看服务状态。 - 使用
docker-compose logs
命令查看服务日志。 - 使用
docker-compose down
命令停止并删除所有服务。
- 编写
Docker命令具体案例实现
基础环境准备
- 安装Docker(Linux/Windows/macOS)。
- 验证安装成功:
docker --version
- 启动Docker服务并设置开机自启(Linux示例):
sudo systemctl start docker
sudo systemctl enable docker
镜像操作案例
- 拉取官方Nginx镜像:
docker pull nginx:latest
- 查看本地镜像列表:
docker images
- 删除指定镜像:
docker rmi nginx:latest
容器生命周期管理案例
- 运行一个交互式Ubuntu容器:
docker run -it ubuntu /bin/bash
- 后台运行Nginx容器并映射端口:
docker run -d -p 8080:80 nginx
- 查看运行中的容器:
docker ps
- 停止并删除容器:
docker stop <CONTAINER_ID>
docker rm <CONTAINER_ID>
数据持久化案例
- 挂载主机目录到容器:
docker run -v /host/path:/container/path -d nginx
- 创建并使用数据卷:
docker volume create my_volume
docker run -v my_volume:/data -d alpine
网络配置案例
- 创建自定义网络并运行容器:
docker network create my_network
docker run --network=my_network -d nginx
- 查看容器网络详情:
docker inspect <CONTAINER_ID> | grep IPAddress
Dockerfile实战案例
- 编写Dockerfile构建自定义镜像(以Python应用为例):
FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
- 构建并运行镜像:
docker build -t my_python_app .
docker run -d -p 5000:5000 my_python_app
常用运维命令案例
- 查看容器日志:
docker logs <CONTAINER_ID>
- 进入运行中的容器:
docker exec -it <CONTAINER_ID> /bin/bash
- 资源使用统计:
docker stats
总结
- 回顾关键命令及其应用场景。
- 推荐进一步学习Docker Compose和Swarm等进阶工具。
常见问题与解决方案
- 镜像拉取失败:检查网络连接,确保镜像名称正确。
- 容器启动失败:查看容器日志,检查端口冲突或配置错误。
- 网络连接问题:检查网络配置,确保容器在同一网络中。
- 数据卷丢失:确保数据卷正确挂载,避免误删数据卷。
总结
- Docker 命令的灵活性和强大功能使得容器化应用的部署和管理变得更加高效。
- 通过实际案例的分析,可以更好地理解和掌握 Docker 的使用方法。
- 在实际应用中,结合 Docker Compose 可以更轻松地管理多容器应用。