使用 Docker 和 Nginx 简化 Web 应用程序部署的最佳实践 (使用docker volume子命令查看卷的详细信息的)
随着容器化技术的兴起,使用 Docker 部署 Web 应用程序已成为一种惯例。Docker 为创建、部署和管理容器提供了轻量级且可移植的平台,使其成为简化 Web应用程序部署的理想选择。
在本文中,我们将探讨使用 Docker 和 Nginx 简化 Web 应用程序部署的最佳实践。我们将涵盖容器化应用程序的好处、最佳实践、常见问题以及高级技巧,以帮助您优化部署流程。
容器化应用程序的好处
使用 Docker 容器化 Web 应用程序提供了以下好处:- 隔离:容器提供了一个隔离的环境,应用程序与其底层基础设施和彼此隔离,防止冲突和故障。
- 可移植性:容器打包了应用程序及其所有依赖项,使其可在不同环境(例如本地、开发和生产)中轻松部署。
- 可伸缩性:容器可以轻松地按需扩展或缩减,以满足不断变化的流量需求。
- 持续部署:容器使持续部署成为可能,允许您频繁地更新应用程序,而不会中断服务。
最佳实践
以下是使用 Docker 和 Nginx 简化 Web 应用程序部署的一些最佳实践:创建自定义 Docker 镜像
创建自定义 Docker 镜像可让您优化应用程序的部署。该镜像应仅包含应用程序及其运行所需的最少依赖项。这有助于减小镜像大小、提高启动时间并增强安全性。使用 Nginx 作为反向代理服务器
Nginx 是一个高性能的反向代理服务器,可以用于处理应用程序的入站请求。通过使用 Nginx,您可以启用负载均衡、HTTPS、缓存和访问控制等功能。自动化构建和部署
自动化构建和部署流程可减少错误并提高效率。使用 CI/CD 工具,例如 Jenkins 或 Travis CI,可以自动构建、测试和部署应用程序。监控和日志记录
持续监控和日志记录对于确保应用程序的健康至关重要。使用 Prometheus 或 ELK Stack 等工具来监控应用程序指标和日志,以便快速识别问题并进行故障排除。使用 Docker Volume 来存储持久数据
Web 应用程序通常需要存储持久数据,例如数据库或缓存。Docker Volume 提供了一种在容器外部管理和持久化数据的机制。使用 Docker Volume 子命令查看卷的详细信息
docker volume 子命令允许您查看有关 Docker 卷的详细信息。以下是 docker volume 子命令的一些常用选项:- docker volume ls:列出所有卷。
- docker volume inspect:检查指定卷的详细信息。
- docker volume prune:删除所有未使用的卷。
示例
以下示例展示了如何使用 docker voluume 子命令查看卷详细信息的示例,以帮助您解决常见问题并更深入地了解 Docker Volume 的功能。Dockerfile 中的Volume有什么意义,光用docker run
VOLUME命令主要是在开发环境下非常有用:编辑代码的时候,直接在宿主机里进行编辑,然后在 docker 里同步跑,无需反复启动关闭,这能发挥开发环境的最高性能。 对于 VOLUME 我更喜欢使用 docker-compose 进行指定:db:image: postgresweb:build: : python runserver 0.0.0.0:8000volumes:- .:/codeports:- 8000:8000links:- dbdocker-compose 可以将多个服务进行捆绑了跑,上面的示例就是 web 服务和 db 服务分开来跑,非常适合组建复杂的环境。
Docker 占用资源膨胀那么快,你知道怎么清理?
如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。
在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。这需要综合使用不同的命令来完成。 docker container ls :默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。 docker image ls :列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。 docker volume ls :列出数据卷。 docker network ls :列出 network。 docker info :显示系统级别的信息,比如容器和镜像的数量等。
通过这些命令查看 docker 使用的资源情况后,相信你已经决定要清理 docker 占用的一些资源了!让我们先从那些未被使用的资源开始。
Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:
<preCourier New !important; font-size: 12px !important;>$ docker system prune</pre>
安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令:
<preCourier New !important; font-size: 12px !important;>$ docker system prune --all --force --volumns</pre>
这次不仅会删除数据卷,而且连确认的过程都没有了!注意,使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。 这里有必要解释一下何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images:
在本地的镜像更新之后,就会出现类似图中红框内的 <none> 镜像。这表示旧的镜像已经不再被引用了,此时它们就变成了 dangling images。如果使用 -a 参数,你还会发现另外一种类型的 <none> 镜像,它们的 repository 和 tag 列都表现为 <none>:
这些镜像被称为 intermediate 镜像(就是其它镜像依赖的层)。
我们还可在不同在子命令下执行 prune,这样删除的就是某类资源: docker container prune# 删除所有退出状态的容器 docker volume prune# 删除未被使用的数据卷 docker image prune# 删除 dangling 或所有未被使用的镜像
这里的 安装时的状态 指资源占用情况而不是 docker 的相关配置。这也是一种比较常见的用例,比如笔者就需要在一个干净的 docker 环境中自动化的还原出某天的一个生产环境(使用生产环境的备份数据)用于 bug 调查。让我们一起来看看都需要做些什么? 回想我们前面介绍的 docker system prune --all --force --volumns 命令,如果在执行这个命令前系统中所有的容器都已停止,那么这个命令就会移除所有的资源!好,现在让我们想办法停掉系统中的所有容器。 docker container stop 命令可以停止一个或多个容器,我们只需要把系统中所有在运行的容器罗列出来就可以了。由于 docker 并不介意我们再次停止一个已经停止了的容器,干脆简单粗暴点,直接列出所有的容器(包括已经停止的)!
<preCourier New !important; font-size: 12px !important;>$ docker container ls -a -q</pre>
-a 显示所有的容器,-q 只显示数字形式的容器 ID。 然后把这里命令执行的结果作为 docker container stop 命令的参数:
<preCourier New !important; font-size: 12px !important;>(docker container ls -a -q)</pre>
完整的恢复 docker 环境的命令如下:
<preCourier New !important; font-size: 12px !important;>(docker container ls -a -q) && docker system prune --all --force --volumns</pre>
和前面的 prune 命令类似,也可以完全删除某一类资源: 删除容器 :docker container rm (docker image ls -a -q) 删除数据卷 :docker volume rm (docker network ls -q)
上面的命令可以完成任务但是却很繁琐,我们可以通过 shell 的别名功能来简化这些命令的执行。
<preCourier New !important; font-size: 12px !important;>alias docker-clean-unused=docker system prune --all --force --volumes alias docker-clean-all=docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes</pre>
把上面的命令写入到用户的 ~/ 文件中就可以了!
执行一次清理任务:
经常清理系统资源不仅能够让系统运行的更流畅,也利于我们把精力集中在相关的重点资源上面。所以建议大家能够使用相关的资源清理命令,让 docker 保持清爽和高效。
参考: Clean out your Docker images, containers and volumes with single commands
Python 零基础入门课程 此课程为面授班和网络班,一共 15 个课时,每周上一个全天,历时4个月。附加:录播视频+笔记+答疑2019-6月份开课
Python 自动化运维进阶课程 此课程为面授班和网络班,一共 15 个课时,每周上一个全天,历时4个月。附加:录播视频+笔记+答疑2019-4月份开课
Docker+K8s 课程 此课程为网络班,一共 150个课时,每周上一个全天,历时4个月。附加:录播视频+笔记+答疑现已开课 现在报名即可享受早鸟价
golang 课程
早报名可享受早鸟价 想要详细了解和报名的同学可以扫码添加好友私聊
Docker(5)——废品清理
docker会产生一些废品,有哪些废品,1.镜像废品,容器废品,其它缓存废品,数据卷废品,构建缓存废品
清除docker镜像缓存 为什么就一个命令也要单开一个博客记录 因为坑死我了,打了一早上镜像一直有问题,搞到最后是缓存的锅 佛了!
命令 docker system prune --volumes 1 该命令清除:
所有停止的容器 所有不被任何一个容器使用的网络 所有不被任何一个容器使用的volume 所有无实例的镜像
可以通过将-a选项传递给docker container ls命令来获得所有活动容器和非活动容器的列表: docker container ls -a
知道要删除的容器的CONTAINER ID后,请将其传递给docker container rm命令。例如,要删除上面输出中列出的前两个容器,请运行: docker container rm cc3f2ff51cab cd20b396a061 docker rm cc3f2ff51cab cd20b396a061
停止容器 docker container stop cc3f2ff51cab
删除所有已停止的容器 docker container prune
查看docker的镜像 docker image ls
删除docker镜像 注意:要删除图像,必须先删除对应的容器。 docker image rm a67d134 2a4cca5ac898 docker rmi a67d134 2a4cca5ac898
实际上,当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中指定的标签,并不会影响原始的那个镜像文件。如果某个镜像不存在多个标签,当且仅当只有一个标签时,执行删除命令时,这会彻底删除镜像
在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理: docker image prune -a
查看docker卷 docker volume ls
删除docker卷 docker volume rm 4e12af8913af
删除所有未使用的卷 docker volume prune
docker system是用于管理磁盘空间的命令,docker system df,类似于df命令,专门用来查看docker的磁盘使用情况。
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 让电脑在正确的时间进入睡眠状态:利用电脑定时关机功能保护硬件 (怎么把电脑调到最佳状态)
- 远离夜间电力浪费:使用定时关机功能优化能源消耗
- 为忙碌的专业人士量身打造:使用电脑定时关机工具管理时间 (忙碌的工作为了什么)
- 释放帝国时代3:亚洲王朝的无限可能性,用秘籍创造属于你的帝国 (释放帝国时代的游戏)
- 征服帝国时代3:亚洲王朝,掌握秘籍,取得压倒性胜利 (征服帝国时代怎么玩)
- 解锁帝国时代3:亚洲王朝的无限潜力,用秘籍征服世界 (帝国时代解码)
- 用帝国时代3:亚洲王朝的秘籍提升你的游戏技巧,成为终极战略家 (帝国时代3pc)
- 帝国时代3:亚洲王朝秘籍大揭秘,了解隐藏的优势 (帝国时代3决定版)
- 帝国时代3:亚洲王朝秘籍之王,称霸游戏世界 (帝国时代3秘籍)
- 掌握帝国时代3:亚洲王朝的秘籍,释放你的统治力 (掌握帝国时代的游戏)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~