docker build 的替代品 build ah

简介: docker build 的替代品 build ah

什么是buildah


buildah工具是用来构建容器镜像,该容器镜像符合OCI规范(一帮大佬在docker出现后,定义的容器规范,按照这个规范搞事情,就能搞成事情),相比于docker buildbuildah不仅能够直接使用dockerfile,还可以从头直接使用命令行构建镜像,或则基于镜像或容器创建镜像。


docker现在是容器领域的扛把子,任何一个有关容器的工具出现后,都在对标docker甚至比docker“更好”,毕竟docker的市场份额在那里。



buildahdocker 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


查看版本

image.png


使用源码安装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查看版本

image.png



使用buildah构建镜像


前提

我们还是使用最早的那个阅读量的案例,go代码如下

该代码作用为: 访问reader路由,阅读量逐步叠加并返回给客户端

image.png


dockerfile构建镜像

我们查看当时dockerfile ,我们直接用dockerfile构建镜像

dockerfile如下

image.png


我们需要提前使用go build将上述案例代码编译为可执行文件

image.png



查看镜像

image.png



验证镜像正确性

image.png





感想


和之前podman一样,buildah几乎和docker build一致,甚至于,你可以为buildah建立别名,我们来想想,为什么会一样? 因为很简单,podman如果不和docker基本用法一样,可能它就“死”了,因为学习成本会很高,后面我们再看看buildah的特性。


还是想说,docker依然是容器界的扛把子,最近有小伙伴向我咨询容器相关技术,介于没有学过容器的,建议还是先去看看docker,完了再看podman之类的补充就行,不要一开始就上来玩podman,因为你会很吃力,原因是它很多对标产品就是docker,所以有些docker有了的东西,它会一带而过,所以基于上述原因,建议先看docker,然后再看其他相关的。各位前端大佬们,要加油呀。




相关文章
|
前端开发 Docker 容器
Docker - build 命令后点号 & .dockerignore 文件
Docker - build 命令后点号 & .dockerignore 文件
714 0
Docker - build 命令后点号 & .dockerignore 文件
|
3月前
|
Docker 容器
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
|
4月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
864 1
|
7月前
|
Docker 容器
docker build -t和docker build -f区别
参数用于指定要使用的Dockerfile的路径,允许你在不同的位置使用不同的Dockerfile来构建镜像。
120 0
|
7月前
|
缓存 Docker 容器
Docker build 命令详解
Docker build 命令详解
96 0
|
容器
竟有人因为docker-compose build参数搞垮了1星期
事情是这样的。 我从上星期开始,修改项目的源代码,然而提交了多次,容器代码并没有改变 后来在一遍文章上发现,还是要重新build,本以为找到了救星了。 奈何发现执行docker-compose build,容器并没有重写,明明我是写了的,为什么会这样呢?
120 0
|
Serverless Docker 容器
FC Build 遇到了启动 Docker 失败的问题
FC Build 遇到了启动 Docker 失败的问题
80 2
|
缓存 Docker 容器
Docker build 命令详解
Docker build 命令详解
311 0
|
存储 缓存 开发工具
42-Docker-Docker命令详解-docker build
42-Docker-Docker命令详解-docker build
|
Ubuntu Linux 开发工具
docker build stress命令
stress 可以对linux机器做压力测试,是一个比较好用的命令
138 0