告别Docker Desktop:用Colima在macOS上优雅运行Docker容器
📅 2025-03-07
在过去的这些年中,我一直在探索和优化自己的开发环境配置。从最初的VSCode配合Remote Ubuntu Server的设置,到现在升级使用更智能的Cursor,我的开发环境经历了一个渐进式的演变。目前,我主要采用以下三种配置方案:
...在过去的这些年中,我一直在探索和优化自己的开发环境配置。从最初的VSCode配合Remote Ubuntu Server的设置,到现在升级使用更智能的Cursor,我的开发环境经历了一个渐进式的演变。目前,我主要采用以下三种配置方案:
...话说Kubernetes都要弃用Dockershim了,因此是时候学习Containerd了。 本文先简单整理一下Kubernetes、Docker、Containerd之间的渊源和纠葛。
这里略过早期Docker的发展历史,大概就是在docker如日中天的时候,社区要搞容器化标准,成立了OCI(Open Container Initiaiv),OCI主要包含两个规范,一个是容器运行时规范(runtime-spec),一个是容器镜像规范(image-spec)。
docker的公司也在OCI中,这里略过在推动标准化过程中各大厂各自心里的"小算盘"和"利益考虑",docker在这个过程中由一个庞然大物逐渐拆分出了containerd
、runc
等项目,
docker公司将runc捐赠给了OCI,后来将containerd捐赠给了CNCF。
最近测试环境Kubernetes集群的两台主机重启后,发现这两台主机上(CentOS 7.3)的Pod无法删除。 发现这个问题的经过如下:
某个服务的自动发布触发后,监控系统告警有Pod处于Terminated状态,具体去查看发现前面重启过的两台主机上因为服务发布需要被删掉的Pod一直处于Terminated: ExitCode
状态。因为是测试环境,开始没有特别关注,而是直接使用kubectl delete pod <podname> --namespace=<namspacer> --grace-period=0 --force
尝试将有问题Pod强制删除,结果强制删除不起作用。马上觉得问题可能没有那么简单,于是分别登录到这两台主机上通过docker ps -a
查看对应docker容器的状态,发现这两个Pod的docker容器处于Dead状态。使用docker rm <container id>
,提示Device is Busy
,无法删除。
通过前面对Ansible的学习,我们已经对Ansible的Playbook和Role有了初步的认识,接下来我们将在实践中慢慢把Ansible引入到我们的配置管理工作中来。 本篇是在我们的测试环境中使用Ansible安装Docker的记录。
我们创建了一个名称为docker
的Ansible role:
本当记录按照Docker官方swarm-tutoria文档,配置和体验Docker Swarm Mode的过程。
主机:
Docker Engine > 1.12
开放端口2377 tcp端口, 7946 4789 tcp udp 端口
在manager1上执行docker swarm init --advertise-addr 192.168.61.10
命令初始化集群:
Docker 1.13在去年年底发布,是一个重要的版本。以下是Top 10新增功能:
官方的安装文档在内容也做了更新。
...更新:直接参考Docker官方文档HTTP/HTTPS proxy即可
受限于网络环境,有的时候需要透过代理服务器pull docker镜像。
修改Docker的systemd文件,添加http代理配置。
修改/lib/systemd/system/docker.service
...因为没有公网ip和域名,所以这里修改/etc/pki/tls/openssl.cnf以生成带SAN 扩展的证书。 在openssl.cnf文件中修改以下内容:
1[ v3_ca ]
2#指定ip
3subjectAltName=IP:192.168.61.100
创建证书目录:
...Docker使用Linux Cgroups限制容器对CPU、内存等资源的使用,防止由于某个容器对资源的过度使用而导致主机上其他容器无法正常运行。 Cgroup是control group的简称,是Linux内核提供的一个特性,用于限制和隔离一组进程对系统资源的使用,包括CPU、内存、block I/O、网络带宽。
...