PaRaD1SE

Docker使用心得

发布时间: 2021/9/21 访问量: 5568

分类: 

开发

Docker个人使用心得

Docker概要

在我编写我的网站到了需要多个服务框架的时候,Docker出现在了我的谷歌搜索结果里。 那么Docker是什么,他的图标,一条满载集装箱的船非常形象的对此做出了解释。
bg2018020901.png

工厂能建好一条船,工厂就能建好无数条船。——不知道谁说的

它是把一个项目用到的多个服务组合起来的工具, 同时他也相当于一份应用程序结构设计图,多么复杂的应用结构,都能通过一条命令就自动安装好并正常启动。 当一个项目用到的不同服务越来越多时,Docker就变得不可或缺了。 不管是什么应用程序或者五花八门的硬件软件配置,我们只需要在一开始解决如何在服务器上正确安装Docker,接下来就舒服了。

一些基本名词

Image

Image,镜像是一个应用中其中一个服务的设计图,多个镜像组合起来变成一个完整的设计图。 我们会把项目中相对独立的一个部分定义为一个服务,并用Dockerfile配置好这个服务的Image

Dockerfile

这是构建Docker镜像的脚本,在构建镜像的时候会执行里面的命令,例如安装一些服务需要的依赖库。 或者复制我们的代码文件到镜像里。

Container

在我们构建好镜像后,就可以启动服务了。 这时候使用一条命令即可实例化这个镜像,这会创建一个容器container,服务此时就运行在这个容器中。 我们可以用docker exec <容器名>命令直接在容器内执行shell命令。

Docker Compose

但是,我们的应用程序用到了多个服务,我们需要运行很多条命令才能把所有的服务都启动。 有时候我们还需要给启动命令添加一些复杂的参数,例如添加数据卷volume,绑定端口ports, 又或者添加环境变量environment才能让容器正确运行。 这时我们可以用docker-compose工具,可以将所有配置好的镜像, 以及这些启动时需要执行的代码都写在一份.yml配置文件里面,然后用一条命令就能直接部署整个应用程序。

经验之谈

关于Docker的使用方法,全都能从官方文档里找到,一些基本的经验之谈也能从各大论坛和搜索引擎找到。 我这里只补充记录一下我自己在开发和运维上总结的实用方法,供大家参考。

关于Dockerfile编写,每一条RUN命令都会创建一个新的镜像层,更多的镜像层会导致更多的空间占用, 因此应该秉承一个尽量少用的理念, 用&&将多个RUN命令合并为一个。 但是,在你后期更新你的应用程序,添加新功能甚至是修复bug的时候,都需要重新构建镜像, 这些RUN命令又会重新跑一次,不仅浪费带宽,而且浪费时间。 而且,如果一层镜像发生改变,这层以后的镜像的缓存都会失效,导致重新构建。

如果你会比较频繁地在生产环境中更新新功能的话, 更优雅的做法是,不要过度追求减少镜像层,而是将最不容易发生改变的, 而且最花时间的命令尽可能放到最前,例如安装一些一些底层依赖包。 然后将改变最频繁而且不需要占用网络资源的东西放到最后,例如复制代码文件。 这样,那些花时间的部分就会只在必要的时候重新执行,心急着上线看看效果的我们就不需要去装模作样泡杯咖啡了。

最后送大家一句话,

除非你知道你在做什么,否则基础镜像不要用Alpine Linux,变小一时爽,调试火葬场。

标签:

Docker
开发

上一篇

下一篇