如何使用Docker Buildx Bake构建适用于Linux/armv7和Linux/amd64的Docker Compose容器

3

我开发了一款主要基于树莓派的Python应用程序,该程序使用Redis作为本地缓存,因此我自然而然地转向使用docker compose来定义所有的服务,即Redis和我的应用程序。我使用Docker Hub私有仓库托管我的容器。但我不知道如何使用docker buildx bake命令以针对linux/armv7平台进行构建,因为--platform标志不是bake命令的一部分。

所有Docker团队展示的示例都使用简单的docker buildx命令,这不能用于compose文件。

我的docker-compose.yml文件被定义为:

version: '3.0'
services:
  redis:
    image: redis:alpine

  app:
    image: dockerhub/repository
    build: gateway
    restart: always

Dockerfile:

# set base image (Host OS)
FROM python:3.8-slim

# set the working directory in the container
WORKDIR /run

# copy the dependencies file to the working directory
COPY requirements.txt .

# install dependencies
RUN pip install -r requirements.txt

# copy the content of the local src directory to the working directory
COPY src/ .

# command to run on container start
CMD [ "python", "-u", "run.py" ]

非常感谢任何帮助。谢谢


使用 docker buildx 构建,推送到镜像仓库,并使用 docker-compose 运行(无需 build:)。 - Klaus D.
@KlausD。这是否需要我创建/复制我的docker-compose文件到树莓派?如果是的话,当尝试交叉编译时,是否没有运行依赖于多个其他服务的应用程序的方法? - m.umar
我预期你已经有了docker-compose文件,用于运行容器。理论上你可以只使用它来构建,但是这样restart就没有意义了。 - Klaus D.
@KlausD. 感谢您的指导,这是我第一次通过docker进行部署,所以我正在逐渐掌握要领。是的,我已经将compose文件复制到我的rpi上,并且它运行得很好。唯一的问题是,根据docker ps,redis容器现在作为一个单独的容器运行,而在我的开发机器上,它们都在一个容器中运行。我猜如果我在我的应用程序中提供redis配置文件,这将会引起麻烦。在这种情况下,这是否是预期的部署工作流程? - m.umar
docker-compose 中,服务在不同的容器中运行是完全正常的。如果您无法访问 redis,请为该服务设置 hostname: 并在配置中使用该主机名。 - Klaus D.
@KlausD. 感谢您的所有帮助,现在它运行得非常好! - m.umar
1个回答

1

您可以按照下面所述的方式在键“xbake”下提供平台参数。 (参考文档:https://docs.docker.com/engine/reference/commandline/buildx_bake/

# docker-compose.yml
services:
  addon:
    image: ct-addon:bar
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
        CT_ECR: foo
        CT_TAG: bar
      x-bake:
        tags:
          - ct-addon:foo
          - ct-addon:alp
        platforms:
          - linux/amd64
          - linux/arm64
        cache-from:
          - user/app:cache
          - type=local,src=path/to/cache
        cache-to: type=local,dest=path/to/cache
        pull: true

  aws:
    image: ct-fake-aws:bar
    build:
      dockerfile: ./aws.Dockerfile
      args:
        CT_ECR: foo
        CT_TAG: bar
      x-bake:
        secret:
          - id=mysecret,src=./secret
          - id=mysecret2,src=./secret2
        platforms: linux/arm64
        output: type=docker
        no-cache: true

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接