前不久在单位收到一封邮件,要求卸载Docker Destop,因为它是商业软件,厂里已经收到维权函。
查了一下发现,好家伙,这确实是一个商业软件。以前以为它是开源的,有点披着羊皮的狼的意思……根据条款,超过250人的企业就需要买 license(AI回答未经求证),有点把韭菜养肥了割的意思啊。碍于尚未找替代品,项目活又多,就拖到今天。
本来对Docker Destop也没什么好感,docker 本来就是一些命令行工具,搞个 GUI 有什么鸟用呢?实际上,平时也都是在命令行下操作。本来想看看能不能用 brew 装一下命令行工具部分,结果发现好像只有一些 cli 工具,不包含引擎也用不起来,遂作罢。
AI告诉我说 Docker Destop 有几个替代品,大致看了一下,剩下 Colima 和 Podman 两个 PK :
|
Colima |
Podman |
原理 |
使用轻量级虚拟机,虚拟机运行docker |
使用轻量级虚拟机,虚拟机运行一个无守护进程的容器运行时 |
优势 |
跟docker一样,配置方便,上手难度低 |
性能较好,虚拟机性能损耗较小,安全性也有优势 |
劣势 |
性能损耗较大 |
虽兼容docker,但有些行为可能不太一样,需要懂点docker底层原理 |
对比过后,想都不用想,先试试 Podman 。我厂比较穷,开发机比较弱,咱要的就是性能,主打一个学无止境,给自己上点难度,哈哈哈~
Podman 同样可以通过 brew 来装:
这一步会下载 podman 和相关依赖包,如果网络不好的话,可能需要挂个代理。
安装完毕后,我们就可以看到 podman 命令了:
1
2
|
$ which podman
/usr/local/bin/podman
|
podman 命令的执行方式跟 docker 命令类似,比如可以执行 ps 子命令查看容器实例:
不过现在执行会报错,因为我们还没有跑虚拟机,需要先初始化一下:
初始化虚拟机时,可以需要将 macOS 下的相关目录挂载进去,以便 docker –volume 命令能够正常执行。详情请查询:【常见问题】容器无法挂载macOS本地文件
这个命令会初始化虚拟机,在初始化过程中,需要拉一个虚拟机镜像,大概是 1 GB :
1
2
3
4
5
6
7
8
9
10
11
|
Looking up Podman Machine image at quay.io/podman/machine-os:5.3 to create VM
Getting image source signatures
Copying blob 047caa9c4100 done |
Copying config 44136fa355 done |
Writing manifest to image destination
047caa9c410038075055e1e41d520fc975a09797838541174fa3066e58ebd8ea
Extracting compressed file: podman-machine-default-amd64.raw: done
Machine init complete
To start your machine run:
podman machine start
|
虚拟机初始化好后,我们就可以把它开起来:
如无意外,就可以看到以下输出,说明虚拟机已经成功开起来了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
Starting machine "podman-machine-default"
This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:
podman machine set --rootful
API forwarding listening on: /var/folders/mz/y8r9c0mj1g1dbsgwqs_ndwpw0000gn/T/podman/podman-machine-default-api.sock
The system helper service is not installed; the default Docker API socket
address can't be used by podman. If you would like to install it, run the following commands:
sudo /usr/local/Cellar/podman/5.3.1_1/bin/podman-mac-helper install
podman machine stop; podman machine start
You can still connect Docker API clients by setting DOCKER_HOST using the
following command in your terminal session:
export DOCKER_HOST='unix:///var/folders/mz/y8r9c0mj1g1dbsgwqs_ndwpw0000gn/T/podman/podman-machine-default-api.sock'
Machine "podman-machine-default" started successfully
|
接下来就可以执行 podman 命令了,比如查看容器实例:
1
2
|
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
再比如查看镜像:
1
2
|
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
|
因为 podman 刚安装,所以没有数据,但这个输出足以说明 podman 可以正常使用了。
虽然 podman 兼容 docker 命令,命令参数基本一样,但一些 shell 脚本可以还是需要 docker 命令。这时可以给 podman 取个别名 docker ,或者建个名为 docker 的软链:
1
2
3
4
5
|
# 别名
alias docker=podman
# 或者建个软链
cd /usr/local/bin/ && ln -s podman docker
|
常见问题
容器无法挂载macOS本地文件
如果执行 docker 命令挂载 macOS 文件系统时,有报错提示:no such file or directory
,则是 macOs 下相关文件目录未挂载到 podman 虚拟机导致的(虚拟机作为容器的宿主机)。
podman 虚拟机默认只挂载好 /Users 目录,如果需要用到其他目录,比如 /Volumes 则需要在初始化虚拟机时指定好:
1
|
podman machine init --volume /Users --volume /Volumes
|
如果虚拟机已经初始化好,甚至已经跑起来了,则需要先停止和删除重建:
1
2
3
4
5
|
# 停止虚拟机
podman machine stop
# 删除虚拟机
podman machine rm
|
更多虚拟机子命令和用法,可以执行 podman machine 查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$ podman machine
Manage a virtual machine
Description:
Manage a virtual machine. Virtual machines are used to run Podman.
Usage:
podman machine [command]
Available Commands:
info Display machine host info
init Initialize a virtual machine
inspect Inspect an existing machine
list List machines
os Manage a Podman virtual machine's OS
reset Remove all machines
rm Remove an existing machine
set Set a virtual machine setting
ssh SSH into an existing machine
start Start an existing machine
stop Stop an existing machine
Error: missing command 'podman machine COMMAND'
|
镜像源
docker 官方仓库经常被墙,这时就需要用国内的镜像源。使用 podman 时,需要进入 podman 虚拟机修改相关配置文件。执行一下命令进去 podman 虚拟机:
仓库镜像源可在 /etc/containers/registries.conf 配置文件里面指定
1
|
location = "https://mirrors.ustc.edu.cn/"
|
订阅更新,获取更多学习资料,请关注我们的公众号: