目录

Docker-基础命令-以-Nginx-实战总结

Docker 基础命令 - 以 Nginx 实战总结

前言

  • 操作镜像 :Nginx
  • 操作环境 :CentOS 7 64
  • Docker版本 :1.13.1

1. 在宿主机安装 Docker 软件

可以博主写的另外一篇博客,地址:

2.Docker 基本命令

2.1 拉取 Nginx 镜像

# 搜索镜像
docker search nginx
# 拉取 Nginx 镜像(latest版本)
docker pull nginx
# 拉取指定版本的 Nginx 镜像
docker pull nginx:1.13.1

https://i-blog.csdnimg.cn/direct/40d6586968de4dc3bf84ac1d365b8b80.png

2.2 查看本地镜像

# 列出本地存储的所有镜像
docker images
# 删除镜像
docker rmi nginx

https://i-blog.csdnimg.cn/direct/0e2a8082c9a64a6cae3eede3cd307cae.png

2.3 运行 Nginx 容器

# 运行 Nginx 容器
# docker run -d -p 8080:80 --name <自己自定义的镜像名称> <镜像>
docker run -d -p 8080:80 --name my_test_nginx nginx

命令解析: docker run

  • 作用 :创建并启动一个心得容器
  • 参数
    • -d :表示容器在后台运行(守护模式)。

    • -p 8080:80 :将容器的 80 的端口映射到宿主机的 8080端口。这样,你可以通过访问宿主机的 8080 端口来访问容器内 Nginx 的服务。

    • --name my_test_nginx :为容器指定一个自定义名称。如果不指定,Docker 会自动生成一个随机名称。

    • nginx :指定使用的镜像名称。这里使用的是官方的 Nginx镜像(默认为最新版本 latest

      https://i-blog.csdnimg.cn/direct/a97e01d06c4f405d96b294c488ee3dea.png

2.4 验证容器是否运行成功

2.4.1 查看容器状态

# 查看运行中的容器
docker ps
# 查看所有容器,包括已停止的
docker ps -a

如果看到 my_test_nginx 容器处于 Up 状态,说明容器运行成功。

PORTS 列显示了端口映射关系: 0.0.0.0:8080->80/tcp ,表示宿主机的 8080 端口映射到了容器的 80 端口。

https://i-blog.csdnimg.cn/direct/711e3436d48e4f938ba441209881a520.png

2.4.2 访问 Nginx 服务

打开浏览器,访问 http://localhost:8080http://<宿主机IP>:8080 ,你应该会看到 Nginx 的默认欢迎页面。

# 注意不要输入https
http://127.0.0.1:8080

https://i-blog.csdnimg.cn/direct/36fcd789502346f3a6012419db5b9c77.png

2.4.3 查看 Nginx 版本

# docker exec <容器名称或ID>  nginx -v
docker exec my_test_nginx nginx -v
命令解析: docker exec
  • 作用 :在运行中的容器内部执行命令。
  • 参数
    • my_test_nginx :容器的名称或容器ID。这个是之前通过 docker run 创建的容器名称。
    • nginx -v :在容器内部执行的命令,用于查看 Nginx 的版本

https://i-blog.csdnimg.cn/direct/a3cb6cf7755249e88a5d2b03e9e71e7e.png

2.4.4 查看 Nginx 容器日志

# docker logs <容器名称或ID>
docker logs my_test_nginx

https://i-blog.csdnimg.cn/direct/98ae70b8f8464bea91506d916f1fac20.png

2.4.5 进入 Nginx 容器内部

如果你想进入容器内部进行操作(例如修改配置文件或查看文件系统),可以运行:

# docker exec -it <容器名称或ID>  /bin/bash
docker exec -it my_test_nginx /bin/bash
命令解析:docker exec
  • 作用 :在运行中的 Docker 容器内部执行命令。
  • 参数
    • -it :两个选项的组合:

      • -i :(interactive):保持 STDIN
      • -t :(tty):分配一个伪终端,让你能够像操作普通终端一样操作容器内部的命令行。
    • my_test_nginx :容器的名称或 ID。这是之前通过 doker

    • /bin/bash :在容器内部执行的命令,这里指启动一个 Bash 终端

      这将打开一个交互式的 Bash 终端,让你可以在容器内部执行命令。

https://i-blog.csdnimg.cn/direct/b9fb5773c8434cfd97e480c70f928232.png

2.4.6 停止和删除

2.4.6.1 停止容器
# docker stop <容器名称或ID>
docker stop my_test_nginx 

https://i-blog.csdnimg.cn/direct/9714e31494aa4e14982f15df877a5e8a.png

2.4.6.2 删除容器
# docker rm <容器名称或ID>
docker rm my_test_nginx

https://i-blog.csdnimg.cn/direct/e172bf510dd14b45bbe568684d2f68f0.png

3. 使用自定义文件配置数据卷

使用 Docker 部署 Nginx 时,合理配置数据卷(Volumes)可以实现配置文件、静态资源和日志的持久化,同时便于管理和更新。

3.1 创建数据卷文件

3.1.1 创建 Docker 数据卷

# 在使用 docker volume create 创建的数据卷(Volumes)默认存储在 Docker 的内部目录中,而不是直接映射到宿主机的某个特定路径
docker volume create nginx-config   # 配置文件
docker volume create nginx-html     # 静态资源
docker volume create nginx-logs     # 日志文件

https://i-blog.csdnimg.cn/direct/1e833860879d4125803cb4e06d456449.png

3.1.2 查看 Docker 数据卷内部路径

可以通过 docker volume inspect 命令查看数据卷的详细信息,包括其在宿主机上的实际存储路径。

# 查看数据卷的存储路径
docker volume inspect nginx-config

https://i-blog.csdnimg.cn/direct/a336fc782dbd4b9d848a4988878c7bbc.png

3.2 准备宿主机上的文件

在宿主机上准备需要挂载的文件和目录:

  1. 配置文件 :将 Nginx 的配置文件(如 nginx.confdefault.conf )放在宿主机的某个目录中,例如 /home/user/nginx/nginx-config

  2. 静态资源 :将静态文件(如 HTML、图片等)放在 /home/user/nginx/nginx-html 目录中。

  3. 日志目录 :创建一个日志目录 /home/user/nginx/nginx-logs ,用于存储 Nginx 的日志文件。

    https://i-blog.csdnimg.cn/direct/7096bf8402c7410990eb0e95ce10c5b9.png

3.3 将文件复制到数据卷

将本地文件复制到 Nginx 容器内部的原因主要有以下几点,这些原因涉及配置管理、数据持久化、开发便利性以及安全性等多个方面。以下是一些具体场景和原因:

3.3.1. 配置管理

Nginx 的行为主要由其配置文件(如 nginx.conf 和站点配置文件)控制。在开发和部署过程中,你可能需要频繁修改这些配置文件以适应不同的需求。将本地配置文件复制到容器内部,可以实现以下目标:

  • 快速更新配置 :无需重新构建镜像,直接通过 docker cp 将修改后的配置文件复制到容器中,并重新加载 Nginx 服务即可生效。
  • 版本控制 :将配置文件存储在宿主机上,便于使用版本控制系统(如 Git)管理配置文件的变更历史。
  • 一致性 :确保开发环境和生产环境使用相同的配置文件,减少因环境差异导致的问题。
3.3.1.1 首先启动容器并绑定数据卷nginx-config
# 
docker run -d -p 8080:80 --name my_test_nginx -v nginx-config:/etc/nginx nginx tail -f /dev/null
3.3.1.2 复制配置文件:nginx.conf和default.conf
# 将宿主机本地的文件nginx.conf复制到docker里面
docker cp /home/dgs/nginx/nginx-config/nginx.conf  my_test_nginx:/etc/nginx/nginx.conf

docker cp /home/dgs/nginx/nginx-config/default.conf my_test_nginx:/etc/nginx/conf.d/default.conf
3.3.1.3 重启 nginx 容器
# docker exec -it <容器名称> nginx -s reload
docker exec -it my_test_nginx nginx -s reload

https://i-blog.csdnimg.cn/direct/886619651978458a920abe790112ff9e.png

3.3.2. 静态资源管理

Nginx 通常用于提供静态资源(如 HTML 文件、图片、CSS 文件等)。将本地静态资源复制到容器内部,可以实现以下目标:

  • 快速部署 :直接将静态资源复制到容器的 /usr/share/nginx/html 目录中,无需重新构建镜像,即可快速更新网站内容。
  • 开发便利性 :在开发过程中,你可以直接在宿主机上修改静态资源,然后通过 docker cp 将其复制到容器中,立即看到效果。
  • 数据持久化 :通过挂载数据卷,即使容器被删除,静态资源也不会丢失,便于长期维护。
3.3.2.1 首先启动容器并绑定数据卷nginx-html
docker run -d -p 8080:80 -v nginx-html:/usr/share/nginx/html --name my_test_nginx nginx
3.3.2.2 自定义首页:index.html
echo "<h1>hello dgs , docker nginx</h1>" index.html
3.3.2.3 复制 index.html 文件到 docker 容器内
docker cp /home/dgs/nginx/nginx-html/index.html my_test_nginx:/usr/share/nginx/html/index.html
3.3.2.4 重启 nginx 容器
# docker exec -it <容器名称> nginx -s reload
docker exec -it my_test_nginx nginx -s reload

https://i-blog.csdnimg.cn/direct/aece7fba126847308a3ac5f749cf579a.png

https://i-blog.csdnimg.cn/direct/74ce533613ca41599a5c548a88b5a94e.png


3.3.3. 日志管理

Nginx 的日志文件(如 access.logerror.log )通常存储在 /var/log/nginx 目录中。将日志文件存储在宿主机上,可以实现以下目标:

  • 持久化日志 :即使容器被删除,日志文件仍然保留在宿主机上,便于后续分析和审计。
  • 集中管理 :将日志文件存储在宿主机的某个目录中,便于使用日志管理工具(如 logrotate )进行集中管理和轮转。
  • 安全审计 :日志文件是安全审计的重要依据,将其存储在宿主机上可以提高安全性。
3.3.3.1 首先启动容器并绑定数据卷nginx-logs
docker run -d -p 8080:80 -v nginx-logs:/var/log/nginx --name my_test_nginx nginx
3.3.2.3 复制 docker 容器内日志到宿主机
docker cp my_test_nginx:/var/log/nginx /home/dgs/nginx/nginx-logs

https://i-blog.csdnimg.cn/direct/5e18ffecd63644e581cb335f4ef1767d.png

3.4 命令启动总结

启动 Nginx 容器时,将数据卷挂载到容器的相应目录:

docker run -d --name my_test_nginx \
  -p 8080:80 \
  -v nginx-config:/etc/nginx \
  -v nginx-html:/usr/share/nginx/html \
  -v nginx-logs:/var/log/nginx \
  nginx

4 重点总结

通过本次学习,我们全面掌握了 Docker 的基础命令,从镜像的拉取与管理,到容器的创建、启动、停止与删除,再到日志与数据的管理以及配置文件的操作。以 Nginx 为例的实践操作,让我们能够将理论知识应用到实际场景中,为后续的开发与部署工作打下了坚实的基础。Docker 的这些基础命令是日常开发和运维工作中最常用的工具,熟练掌握它们将大大提高我们的工作效率。

  • 搜索镜像: docker search nginx :用于在 Docker Hub 上搜索 Nginx 镜像。
  • 拉取镜像: docker pull nginx :从 Docker Hub 拉取官方的 Nginx 镜像。
  • 查看本地镜像: docker images :列出本地存储的所有镜像。
  • 删除镜像: docker rmi nginx :删除本地的 Nginx 镜像。
  • 运行容器: docker run -d -p 8080:80 --name my_test_nginx nginx :在后台运行一个 Nginx 容器,并将容器的 80 端口映射到宿主机的 8080 端口。
  • 查看运行中的容器: docker ps :列出当前正在运行的容器。
  • 查看所有容器: docker ps -a :列出所有容器,包括已停止的。
  • 停止容器: docker stop my_test_nginx :停止名为 my_test_nginx 的容器。
  • 启动容器: docker start my_test_nginx :启动已停止的容器。
  • 删除容器: docker rm my_test_nginx :删除容器。
  • 进入容器: docker exec -it my_test_nginx /bin/bash :进入正在运行的容器并启动交互式 Bash 终端。
  • 查看容器日志: docker logs my_test_nginx :查看 Nginx 容器的日志输出。
  • 将日志复制到宿主机: docker cp my_test_nginx:/var/log/nginx/access.log /path/to/destination/access.log :将容器内的日志文件复制到宿主机指定路径。
  • 使用数据卷挂载日志目录: docker run -d --name my_test_nginx -v /home/user/nginx-logs:/var/log/nginx nginx :将容器的日志目录挂载到宿主机的指定目录。
  • 创建独立的数据卷并指定文件: docker volume create nginx-config :创建一个名为 nginx-config 的数据卷用于存储 Nginx 配置文件。
  • 将配置文件复制到数据卷: docker cp /home/user/nginx-config/nginx.conf my_test_nginx:/etc/nginx/nginx.conf :将宿主机上的配置文件复制到数据卷中。
  • 挂载配置文件数据卷: docker run -d --name my_test_nginx -v nginx-config:/etc/nginx nginx :运行容器时挂载配置文件数据卷。
  • 直接在容器中替换:进入容器后,使用 docker cp 命令将新的 index.html 文件复制到容器的 /usr/share/nginx/html 目录。
  • 使用数据卷挂载:在启动容器时挂载包含新 index.html 文件的目录到 /usr/share/nginx/html