Lazydocker 在 ARM 设备上用 Docker 运行:arm32v6/arm32v7/arm64v8 镜像怎么构建
Lazydocker 在 ARM 设备上用 Docker 运行arm32v6/arm32v7/arm64v8 镜像怎么构建【免费下载链接】lazydockerThe lazier way to manage everything docker项目地址: https://gitcode.com/GitHub_Trending/la/lazydockerlazydocker 提供了用 Docker 运行的方式但默认镜像构建面向 amd64 架构。如果你的设备是 ARM 架构32 位 v6、32 位 v7 或 64 位 v8直接构建会得到跑不起来的镜像需要在构建时为不同的架构传入对应的 builder 基础镜像和 Go 交叉编译参数。README 的 Docker 安装章节 给出了三种架构各自的构建命令构建完成后再通过挂载 docker socket 启动容器即可在 ARM 设备上使用 lazydocker。选择与你设备匹配的构建参数README 按架构划分了三种构建参数组合BASE_IMAGE_BUILDER指定 builder 阶段使用的多架构 golang 基础镜像GOARCH/GOARM控制 Go 的编译目标设备架构BASE_IMAGE_BUILDERGOARCHGOARMARM 32 bit v6arm32v6/golangarm6ARM 32 bit v7arm32v7/golangarm7ARM 64 bit v8arm64v8/golangarm64不传Dockerfile 中这三个参数的默认值是BASE_IMAGE_BUILDERgolang、GOARCHamd64不传 build-arg 时构建的就是 amd64 版本所以 ARM 设备必须显式传入上表参数。构建 ARM 镜像以下三条命令来自 README.md只执行与你设备架构对应的那一条。构建上下文是仓库的 git 地址不需要先本地 cloneARM 32 bit v6 设备docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDERarm32v6/golang \ --build-arg GOARCHarm \ --build-arg GOARM6 \ https://github.com/jesseduffield/lazydocker.gitARM 32 bit v7 设备docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDERarm32v7/golang \ --build-arg GOARCHarm \ --build-arg GOARM7 \ https://github.com/jesseduffield/lazydocker.gitARM 64 bit v8 设备docker build -t lazyteam/lazydocker \ --build-arg BASE_IMAGE_BUILDERarm64v8/golang \ --build-arg GOARCHarm64 \ https://github.com/jesseduffield/lazydocker.git三条命令都把产物打名为lazyteam/lazydocker后续运行步骤直接引用这个 tag。运行构建好的镜像构建完成后按 README 的 “Run the container” 步骤启动docker run --rm -it -v \ /var/run/docker.sock:/var/run/docker.sock \ -v /yourpath:/.config/jesseduffield/lazydocker \ lazyteam/lazydocker两处挂载的作用/var/run/docker.sock挂载进容器让 lazydocker 能访问本机的 Docker 守护进程/yourpath是需要替换的占位符改成一个你在宿主机上创建好的实际目录用来存放 lazydocker 的配置README 原文明确提醒要改成实际路径。带-it参数运行后终端会进入 lazydocker 的交互式界面退出后--rm会清理该容器实例。如果你经常使用这个容器README 给了一个可选的 zsh alias 写法。注意这条命令会把 alias 追加写入~/.zshrc且其中的/yourpath/config同样要替换成你的实际配置目录echo alias lzddocker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /yourpath/config:/.config/jesseduffield/lazydocker lazyteam/lazydocker ~/.zshrc可选用 docker-compose 代替手动构建README 指出也可以使用仓库自带的 docker-compose.yml。该文件默认构建参数是 amd64build: context: https://github.com/jesseduffield/lazydocker.git args: BASE_IMAGE_BUILDER: golang GOARCH: amd64 GOARM:在 ARM 设备上使用时把args改成上一节表格中与你架构对应的值例如 v7 设备改为BASE_IMAGE_BUILDER: arm32v7/golang、GOARCH: arm、GOARM: 7构建出的镜像 tag 同样是lazyteam/lazydocker。这个 compose 文件把宿主机的./config目录挂载为/.config/jesseduffield/lazydocker并开启了stdin_open和tty等价于手动docker run的挂载和交互配置。构建参数在镜像内部如何生效理解 Dockerfile 的结构有助于核对构建行为它分三个阶段builder 阶段FROM ${BASE_IMAGE_BUILDER}:${GO_VERSION}-alpine${ALPINE_VERSION}默认版本为GO_VERSION1.23、ALPINE_VERSION3.20。传入BASE_IMAGE_BUILDERarm32v6/golang后builder 实际拉取的就是arm32v6/golang:1.23-alpine3.20。编译使用CGO_ENABLED0 GOOSlinux GOARCH${GOARCH} GOARM${GOARM} go build -a -modvendor产物是静态的lazydocker二进制。docker-builder 阶段从源码编译 Docker CLI 并随镜像分发默认DOCKER_VERSIONv27.0.3GOARCH/GOARM与上面的构建参数保持一致。最终阶段FROM scratch把 lazydocker 放到/bin/lazydocker并设为ENTRYPOINTDocker CLI 放在/bin/docker。也就是说BASE_IMAGE_BUILDER决定编译器和工具链运行在哪个架构的基础镜像上GOARCH/GOARM决定编译出的二进制目标架构两者需要按上面的表格成对使用。bundled docker 二进制出现兼容性问题时镜像里自带了一个 Docker CLI 二进制README 给出了一个已知的兼容性问题及处理方式如果 bundled 的 Docker 二进制与宿主机版本出现兼容性问题用下面的 build-arg 重新构建使内置 docker 与宿主机 docker 版本一致--build-arg DOCKER_VERSIONv$(docker -v | cut -d -f3 | rev | cut -c 2- | rev)把它追加到你所在架构的docker build命令上重新构建即可。以上步骤完成并成功运行容器后lazydocker 即以终端界面形式管理本机 Docker 环境配置持久化在挂载的宿主机目录中后续升级时重新执行对应架构的构建命令替换本地lazyteam/lazydocker镜像即可。【免费下载链接】lazydockerThe lazier way to manage everything docker项目地址: https://gitcode.com/GitHub_Trending/la/lazydocker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →