![](/img/trans.png)
[英]How to use docker buildx bake to build docker compose containers for both linux/armv7 and linux/amd64
[英]How to use docker buildx bake to replace docker-compose up?
所以我有这个 docker 命令可以在其他机器上正常工作,但由于我的是 M1 芯片,所以我遇到了问题。 我想使用buildx
和bake
来为多种架构运行 docker 容器。 这是命令,
PY_VER=xxxx IMAGE=xxxx DISTRO=xxxxx \
PHARUS_VERSION=$(cat xxxxx/xxxx/xxxxx | tail -1 | awk -F\' '{print $2}') \
DJLABBOOK_VERSION=$(cat package.json | grep \"version\" | awk -F\" '{print $4}') \
HOST_UID=$(id -u) \
docker-compose -f docker-compose-dev.yaml up
我有一个 Dockerfile 并且一切都设置好了,但这不适用于我的 M1 机器。
每当我运行这个命令时,docker buildx bake -f env.hcl app -f docker-bake.hcl 我得到这个 output。
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 32B 0.1s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 34B 0.0s
=> [internal] load metadata for docker.io/library/node:lts-buster-slim 0.4s
=> [internal] load metadata for docker.io/library/golang:alpine3.11 0.4s
=> [stage-1 1/11] FROM docker.io/library/node:lts-buster-slim@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 4.47kB 0.0s
=> [go_tmp 1/3] FROM docker.io/library/golang:alpine3.11@sha256:xxxxxxxxxxxxxxx 0.0s
=> https://raw.githubusercontent.com/datajoint/miniconda3-docker/master/utilities/startup.go 0.1s
=> CACHED [stage-1 2/11] RUN apt-get update && apt-get install wget -y 0.0s
=> CACHED [stage-1 3/11] WORKDIR /home/node 0.0s
=> CACHED [stage-1 4/11] COPY --chown=node:node ./package.json ./package-lock.json /home/node/ 0.0s
=> CACHED [stage-1 5/11] RUN npm install 0.0s
=> CACHED [go_tmp 2/3] ADD https://raw.githubusercontent.com/datajoint/miniconda3-docker/master/utilities/startup.go /startup 0.0s
=> CACHED [go_tmp 3/3] RUN cd / && go build startup.go 0.0s
=> CACHED [stage-1 6/11] COPY --from=go_tmp /startup /startup 0.0s
=> CACHED [stage-1 7/11] COPY ./docker-entrypoint.sh /docker-entrypoint.sh 0.0s
=> CACHED [stage-1 8/11] RUN chmod +x /docker-entrypoint.sh && chmod 4755 /startup 0.0s
=> CACHED [stage-1 9/11] COPY --chown=node:node ./tsconfig.json /home/node/ 0.0s
=> CACHED [stage-1 10/11] COPY --chown=node:node ./public /home/node/public 0.0s
=> CACHED [stage-1 11/11] COPY --chown=node:node ./src /home/node/src 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:xxxxxxxxxxxxxxxxx 0.0s
这是我的 env.hcl 文件的内容
PY_VER="3.8"
IMAGE="djbase"
DISTRO="alpine"
PHARUS_VERSION="$(cat pharus/pharus/version.py | tail -1 | awk -F\" '{print $2}')"
DJLABBOOK_VERSION="$(cat package.json | grep \"version\" | awk -F\" '{print $4}')"
HOST_UID="$(id -u)"
以及我的 docker-bake.hcl 的内容
variable "PY_VER" {
default = "xxx"
}
variable "IMAGE" {
default = "xxx"
}
variable "DISTRO" {
default = "xxxxx"
}
variable "PHARUS_VERSION" {
default = "$(cat xxxx/xxxx/xxxxn.py | tail -1 | awk -F\" '{print $2}')"
}
variable "DJLABBOOK_VERSION" {
default = "$(cat package.json | grep \"version\" | awk -F\" '{print $4}')"
}
variable "HOST_UID" {
default = "$(id -u)"
}
target "app" {
args = {
PY_VER = "${PY_VER}"
HOST_UID = "${HOST_UID}"
}
}
buildx bake
并不是要替换compose up
,而是用于构建 docker 图像。 所以它更类似于docker compose build
或只是docker build
。 您想使用 buildx 的地方是为了为多个架构构建映像。
您在使用 M1 芯片时遇到的问题可能是您的 docker 映像不打算在该架构( linux/arm64
)上运行,因为它可能是为 x86 ( linux/amd64
)构建的。
确保您已安装 Rosetta 2,并且您的系统应该能够模拟 x86 并运行您的图像。 在此处查看文档以获取更多信息。
在 docker 下运行模拟图像虽然很慢。 所以我一直在做的是使用 bulidx 为多种架构构建图像,然后您可以使用 docker 作曲家提取这些图像。
# docker-bake.hcl
variable "platforms" {
default = ["linux/amd64", "linux/arm64"]
}
group "default" {
targets = [
"my_image",
]
}
target "my_image" {
dockerfile = "myimage.Dockerfile"
tags = ["myrepo/myimage:latest"]
platforms = platforms
}
# Command
docker build bake --push
# docker-compose.yml
version: '3.9'
services:
dev:
image: myrepo/myimage:latest
现在,您将为两种架构推送一个 docker 映像,并且 docker 将自动 select 正确的映像,具体取决于它运行的系统。
您可能需要配置 buildx,查看docker 多架构文档了解更多信息。
buildx
和bake
构建您的图像。--load
参数或--push
分别放在您的案例之后。 如果您使用单一架构,只需docker-compose down
和docker-compose up --force-recreate
或任何您可以使用最新构建图像的命令。
在多平台的情况下,您必须从远程存储库中拉取 docker 映像并进行向下和向上组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.