好吧,让我们打破这个Docker的进化,事情是如何改变的。
还记得当Docker感觉像是......打一只粗糙的鸭子吗? 这么多命令,这么多概念。构建,运行,推,拖,卷,网络...我的头脑在旋转。应该,但它总是感觉有点杂,有点......充满摩擦。我的终端历史只是一个混乱。docker ps -a
绝望地试图记住这个一个上周的指挥。
然后,慢慢地,事情开始点击,不是一个大的eureka时刻,而是一系列小小的“aha!”发现。小技巧,优化,工作流量调整。我如何做事.
以下是被困的游戏变更者:
终端代名词:保健节约者 ️
第一大胜利?Aliases.♂️ 為什麼我花了幾個月打字docker-compose up -d --build
或docker ps
一遍又一遍? 设置简单的代名词在我的.bashrc
或.zshrc
这是一个启示。
# My sanity savers
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcb='docker-compose build'
alias dcr='docker-compose run --rm' # For running one-off commands
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dip='docker image prune -f' # Prune dangling images
alias dvp='docker volume prune -f' # Prune unused volumes
alias dsp='docker system prune -af' # The big cleanup! 💥
只是打字dcu
哦,千秒节省了!听起来很微不足道,但每天以十几次来倍增......它增加了。我的手指感谢我。
从这里获取docker的最终Cheatsheet:黑客Cheatsheet
2、强者.dockerignore
檔案名稱: 減肥下樓
然後來了.dockerignore
另一个“duh”时刻. 我知道关于.gitignore
当然,但我一开始没有意识到至关重要的是.dockerignore
我的早期Docker构建是这么慢为什么?因为构建的背景是发送的一切回到Docker DAEMON。node_modules
,日志,临时文件,本地构建文物......一切!
创建一个合适的.dockerignore
文件,列出我不需要的所有垃圾内部图像构建过程? 突然,构建速度更快. 图像更小(有时大大大)。这个,忽略其余的。 更少的混乱,更快的反馈循环! 厨师的吻!
3、多阶段建筑:精细、中等生产机械➡️
Multi-stage builds...好吧,这个感觉起初有点先进。 这个概念很棒,尽管如此。
- 步骤 1:使用基于图像的所有构建工具、编译器、 SDK 和依赖程序,以创建应用程序文物(如编译的二进制或包装的 JavaScript)。
- 步骤 2:开始一个新的,干净的,最小基础图像(如山脉或不信任)。
- 复制:只将第一阶段的最终文物复制到这个清洁的第二阶段。
结果?小型生产图像!而不是使用构建工具和开发人员依赖(这也是安全风险!),我发送含有 lean 图像的图像只有它花了一点时间把我的头包围在语法上,但哇,图像大小和安全姿势的差异是巨大的。
《Docker Compose Overrides: Taming Environments》
让我们谈谈Docker Compose override
管理不同的环境曾经是痛苦的。开发者需要用于实时代码重新加载的卷,调试端口打开。Prod需要不同的环境变量,也许更严格的资源限制,也许是不同的入口点。docker-compose.yml
混乱,涉及评论部分或复杂if
以环境变量为基础。
发现docker-compose.override.yml
这是纯粹的幸福. 你有你的基础docker-compose.yml
使用通用配置. 然后,您创建docker-compose.override.yml
(通常通过Git忽略的.gitignore
)为您的本地开发调整 – 安装代码目录,暴露不同端口,添加调试工具。override
您甚至可以使用某些文件,如docker-compose.prod.yml
并使用该-f
国旗:docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
. 清洁的关切分离. 没有更多的偶然行为的 dev 设置! 哈利路亚!
常规清洁:保持系统清洁 ✨
最后,习惯regular cleanupDocker 可以积累那么多如果你不小心,那么危险的图像(以前的构建中未标记的层),未使用的卷,停止的容器,旧的构建缓存...我的磁盘空间曾经神秘消失。
进入定期跑步的节奏docker system prune -af
(攻击性的方法)或更有针对性的方法docker image prune
,docker volume prune
,docker network prune
,和docker builder prune
它使事情顺利运行,防止奇怪的缓存问题(“为什么我的变化不会出现?!”),并释放宝贵的千兆字节。dsp
(我的语为docker system prune -af
)现在是一个令人满意的,几乎是治疗的,例行。
所以是的,这些不再只是“黑客”了,它们是根深蒂固的,它们是肌肉记忆。.dockerignore
这是我创建的第一个文件之一. 多阶段构建是潜在生存的任何事物的默认设置。 组合覆盖处理环境差异顺利。
Docker从那种粗糙的鸭子变成了强大的、简化的助手,现在就走出了我的路,构建速度更快,部署更顺利,我的磁盘空间更开心,诚实地说,我是它不仅仅是关于Docker本身;它是关于如何掌握这些小细节平滑了我的整个开发和部署工作流程. 它肯定已经成为我的生活的一部分,或者至少我的数字生活。