跳到主要内容

本地 Docker 环境越用越乱时,重置和清理要讲顺序

· 阅读需 3 分钟
一介布衣
全栈开发者

Docker 本地环境用久了以后,几乎都会经历一个阶段:旧容器没删干净,历史镜像堆了不少,没在用的 volume 和网络也越来越多。这个时候很多人为了图快,直接一通删除,结果把本来还想保留的数据库数据也一起带走了。环境清理这件事看似只是几条命令,其实很考验顺序感。

排查容器里的环境问题时,docker exec 比重启更有价值

· 阅读需 3 分钟
一介布衣
全栈开发者

有些容器问题并不是“起不来”,而是明明已经在运行,表现却和预期不一样。比如环境变量没生效、工作目录不对、配置文件路径错了、依赖包实际没有安装完整。这个时候如果只会不停重启容器,排查会非常低效。对这类问题来说,docker exec 往往比“再试一次”更有价值,因为它让你直接进入现场。

本地开发用 Docker 时,volume 和 bind mount 该怎么选

· 阅读需 3 分钟
一介布衣
全栈开发者

Docker 用到一定阶段后,几乎都会碰到一个问题:容器里的数据到底是保存在 volume,还是直接绑定宿主机目录。这个选择看起来像是命令层面的细节,实际上很影响本地开发效率。因为它决定了你改代码是否能实时生效、数据库数据是否好迁移、环境重建时会不会把重要内容一起清掉。

Docker 日志排查时,先把 follow、tail、since 这几个选项用顺手

· 阅读需 3 分钟
一介布衣
全栈开发者

本地容器一旦启动失败或者接口突然异常,很多人的第一反应都是先 docker exec 进去看看,或者直接把容器删掉重启。这样做当然有时候也能解决问题,但从排查效率看,并不总是最优。很多容器问题,其实靠 docker logs 就能先把大方向判断出来,尤其是把 followtailsince 这些选项用顺手以后,定位速度会快不少。

Docker 构建速度总是上不来?先看看镜像层和上下文

· 阅读需 3 分钟
一介布衣
全栈开发者

很多人第一次写 Dockerfile 时,只关心“能不能构建成功”。等到项目稍微变大一点,就会开始抱怨镜像构建太慢。这个时候常见的反应是去找加速源、换基础镜像、甚至怀疑 Docker 本身不稳定。但经验告诉我,真正拖慢本地构建速度的,很多时候不是网络,而是你自己把缓存层次和构建上下文写得太随意了。

Docker Compose 入门里最实用的一点:服务名就是网络地址

· 阅读需 3 分钟
一介布衣
全栈开发者

刚开始用 Docker Compose 做本地联调时,最容易犯的错误就是还在用宿主机思维理解容器之间的访问关系。比如 API 容器去连数据库时,配置里还写 127.0.0.1,结果明明数据库已经启动了,应用还是一直报连接失败。这个问题其实不是 Compose 配错了,而是没有建立起一个很关键的认知:同一个 Compose 网络里,服务名本身就是彼此访问时最方便的地址。

Mac 上用 Docker Desktop,本地开发前先看资源限制

· 阅读需 3 分钟
一介布衣
全栈开发者

很多人刚在 Mac 上装好 Docker Desktop,第一反应都是先拉镜像、起容器、跑服务。等到容器越来越多,才开始发现编译慢、数据库启动慢、桌面风扇狂转、系统内存被吃掉一大块。这个时候再怀疑镜像源、怀疑命令写法,往往已经偏题了。对 Mac 环境来说,资源限制配置本身就是本地开发体验的一部分。

Go 里用 slice 实现栈和队列时,别忽略这几个细节

· 阅读需 3 分钟
一介布衣
全栈开发者

用 slice 实现栈和队列几乎是 Go 入门练习里的必做题。因为语法不复杂,append 也足够顺手,所以很多人会觉得这类题没什么难度。但真正把它写进稍微像样一点的小程序里时,你会发现问题并不在“会不会写”,而在“有没有考虑清楚容量变化、出队后残留引用、空结构操作这些细节”。

Go 练习题里最值得反复写的一类:递归和二分查找

· 阅读需 4 分钟
一介布衣
全栈开发者

很多人刷算法题时喜欢挑复杂题,觉得这样更有挑战。但从练代码基本功的角度看,真正值得反复写的,往往是那些规则简单、边界丰富的小题。递归和二分查找就是这种题型的代表。它们不靠花哨技巧取胜,却非常适合训练你是不是能把停止条件、输入约束和函数职责写清楚。