Docker浅记
Docker
很早以前就听过 docker 的大名,那时候未曾深入了解,给人的印象就是一个迷你虚拟机罢了。VMWare 已经足够好用了,只是有些笨重。
开发者最头疼的环境问题,每一次配置,都感觉是对生命的浪费。
初识
一开始认识其实是从 docker-compose 开始的,而非 docker。是为了部署阅读的服务器版本,从 docker-compose 开始认识到容器的组合, 不过很快就被 yml 文件打败了。不是被格式(尽管我不太喜欢 yml),而是被 docker 版本不同,语法不一致的问题搞得很头大。
在我看来,如果是大的版本更新,要么像 Python2 和 Python3 一样直接不兼容,要么就必须向下兼容(代码上做冗余处理)。
这算是一个不太好的开始。靡不有初,鲜克有终,会一语成谶吗?
相知
真正令人惊叹的是使用起来如此的简单,快捷,方便。使用 Linux 也这么多年了,为数不多几次惊艳。
一次是 Kali Linux 五花八门的渗透测试工具,小小的满足了年少的黑客梦,只不过很快就碎了一地。
一次是在 Ubuntu 里使用 VSCode,直接命令行 code 启动, 实在是太优雅了。
相比于 docker 听到更多的是 k8s,可是那是企业级应用和个人开发者基本没有关系。
痴迷于其简单的使用,于是开始尝试自己编写 Dockerfile,谁能想象一个连 docker ps -a 命令都不知道的人,就这么大张旗鼓开始写 Dockerfile 了呢? 第一次写 Dockerfile 可是吃进了苦头,对于开发者来说 build start stop rm 频繁修改构建,真的让人抓狂,而这仅仅只是个开始。几乎无一例外, 随便找一个 Dockerfile,大概率会看到 alpine 这个字样。作为 Ubuntu 的坚定支持者(Debian),不喜欢 CentOS。
作为一个新手自然入乡随俗,使用 alpine,也接受了 apk 而不是 apt。事实证明,alpine 并不好用,因为连一个简单的设置时区都需要额外安装包。 即便如此,也算是忍了,毕竟大家都这么用。直到有一次,发现 sh 和 bash 在语法上还是有区别的,在写 shell 脚本时候并未注意,调试时候才发现的, 不知怎地,突然就破防了。这 TMD 破系统。
后来因为喜欢玩三国杀,发现了无名杀(noname)。自从入门 docker 后,通常都直奔仓库的 Dockerfile,按照官方的构建后发现问题很大,build 实在是 太大了,因为 npm (一堆屎一样的依赖),而且无法满足特定需求,这怎么能接受呢?于是乎就直接使用 Dockerfile 使用 Python Web 服务构建。
为了解决构建的镜像过大的问题,逐渐学会了使用轻量级系统(ubuntu slim),RUN 命令合并减少层数,了解到使用多阶段构建的 builder 并不会进入镜像, 避免了担心 builder 过程准备的开发工具也进入镜像增大体积。
相熟
在尝试了多个 Dockerfile 构建后,其实也并非什么难事,不过却有了更深刻的认识。
在尝试构建 Python 程序时候,发现了一个奇怪的库 opencc 居然需要使用 cmake 构建。一直以来,都认为 pip install xxx,和 c 没什么关系。 原来有些也是需要 cmake 构建,以前无论是 windows 和 mac 甚至 linux 也从未出现过,直到使用镜像才发现原来要安装这些额外的工具!
在 web 服务器选择上,一直都是 nginx,以前也听过 caddy,但是听了这么多年也没用,直到发现 caddy 可以自动申请证书(太好了)。虽然,直接使用 acme.sh 申请也并不麻烦,几行命令就能搞定,但是 caddy 可以更懒,为何不用呢?
docker 直接部署 caddy 简直不要太方便了。折腾了很久,才发现 caddy 依赖于主机 80,443 端口,自行申请证书,这点反复测试了多次,才意识到。 一直依赖都喜欢用主机的其他端口映射,所以启动 caddy 也是使用的其他端口映射到 caddy 的 80 443,谁曾想这竟然是个问题。
厌倦
对于使用者来说,它足够方便。 对于开发者来说,调试实在是有些头疼。
随随便便弄点什么东西,它就很大。 资源管理,监控和日志都不太好用。
有些服务不太适合使用 docker 部署,宿主机更合适。
大概是万物皆可 docker,疯狂之后的平静,它没想象中那么好,它也没那么差。
平淡
一如既往,喜欢在很多星的项目中找 Dockerfile,保持随时编写 Dockerfile 的能力。
docker 的最大意义,就是将使用成本几乎降到了零,当一件事情的成本足够低廉,那么它存活的时间就可以很长。
人生还有如此多的时间,倒也不必急于一时。
幽香浅浅湿未透。 认雪底、思来始有。 翦裁尚觉琼瑶皱。 苦寒中、越恁骨清肌瘦。 东风气象园林旧。 又去年、而今时候。 急宜小摘当尊酒。 选一枝、且付玉人纤手。
docker
docker ps -a
docker exec -it sh
docker exec -it sh “cat /var/error.log”
docker buildx build –platform linux/amd64,linux/arm64 xxx
docker images
docker network create my-network