什么是buildah
buildah
工具是用来构建容器镜像,该容器镜像符合OCI
规范(一帮大佬在docker
出现后,定义的容器规范,按照这个规范搞事情,就能搞成事情),相比于docker build
,buildah
不仅能够直接使用dockerfile
,还可以从头直接使用命令行构建镜像,或则基于镜像或容器创建镜像。
docker
现在是容器领域的扛把子,任何一个有关容器的工具出现后,都在对标docker
甚至比docker
“更好”,毕竟docker
的市场份额在那里。
buildah
和 docker build
差异
buildah
无需守护进程运行
和docker run
一样,docker build
需要docker server
才能运行,言外之意为它的权限单一,安全性得不到保障,而buildah
无需守护进程也能运行。
buildah
可以利用交互式构建镜像
buildah
可以使用交互式命令来构建镜像,也可以通过文件来构建,而docker
只能从dockerfile
或则进入容器中生成内容,再利用docker commit
生成镜像,相比之下,buildah
显得更加灵活有效。
buildah
可以将容器的根目录挂载到宿主机上
这玩意到底有啥用? 这可以将容器的根目录挂载到宿主机上,这可以使用宿主机工具,而不需要将这些工具打包进镜像中,从而减少了镜像的大小。
buildah
安装
我们还是和之前分享的所有工具一样,我们分为源码安装 和 yum 安装
使用yum
安装buildah
安装
直接使用yum
安装即可
命令: yum install buildah -y
查看版本
使用源码安装buildah
我们还是依照惯例,从release
中下载源码
安装依赖
yum -y install \ make \ golang \ bats \ btrfs-progs-devel \ device-mapper-devel \ glib2-devel \ gpgme-devel \ libassuan-devel \ libseccomp-devel \ git \ bzip2 \ go-md2man \ runc \ skopeo-containers
下载源码
目前release
版本为1.23.4
,我们就checkout
到该版本就可以了
git clone https://github.com/containers/buildah.git git checkout v1.23.4
编译
make
查看版本
使用命令: buildah version
查看版本
使用buildah
构建镜像
前提
我们还是使用最早的那个阅读量的案例,go
代码如下
该代码作用为: 访问reader
路由,阅读量逐步叠加并返回给客户端
从dockerfile
构建镜像
我们查看当时dockerfile
,我们直接用dockerfile
构建镜像
dockerfile如下
我们需要提前使用go build
将上述案例代码编译为可执行文件
查看镜像
验证镜像正确性
感想
和之前podman
一样,buildah
几乎和docker build
一致,甚至于,你可以为buildah
建立别名,我们来想想,为什么会一样? 因为很简单,podman
如果不和docker
基本用法一样,可能它就“死”了,因为学习成本会很高,后面我们再看看buildah
的特性。
还是想说,docker
依然是容器界的扛把子,最近有小伙伴向我咨询容器相关技术,介于没有学过容器的,建议还是先去看看docker
,完了再看podman
之类的补充就行,不要一开始就上来玩podman
,因为你会很吃力,原因是它很多对标产品就是docker
,所以有些docker
有了的东西,它会一带而过,所以基于上述原因,建议先看docker
,然后再看其他相关的。各位前端大佬们,要加油呀。