M1芯片调整为docker-compose.yml?

Adjustment to docker-compose.yml for M1 chip?

我有一个 docker-compose.yml 构建了大约 8 个容器,主要由 mysql、postgres、php-nginx 和其他一些包组成定制构建。生产版本 运行s 在 UBUNTU 主机上,我的开发包 运行s 在 Mac OS Catalina 上,带有英特尔芯片。整个事情也在 Github.

上的私人仓库中维护

一位合作者有一台 M1 Mac,我可能会很快升级到 M1 Mac,MacBook Pro 或 27" iMac 可能会在今年晚些时候发布。

我们尝试在他的 M1 Mac 和 运行 上安装软件包遇到了一些问题,而且可能更多。

一个问题似乎与撰写文件中的 MySQL 构建有关(删除了一些项目)

  mysql_db:
    image: mysql:8.0.26
    container_name: mysql_db
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
      --max-allowed-packet=67108864
      #--general-log=TRUE
      #--general-log-file=/var/lib/mysql/mysql-log.log
    restart: unless-stopped
    ports:
      - "3333:3306"
    healthcheck:
      test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
    security_opt:
      - seccomp:unconfined
    tty: true
    environment:
      TZ: ""
      MYSQL_ROOT_PASSWORD: ''
      MYSQL_USER: ''
      MYSQL_PASSWORD: ''
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql

    volumes:

      - ./MySQL_DB:/var/lib/mysql/
      - ./mysql_init:/docker-entrypoint-initdb.d

看起来有几种方法可以按照此处的建议解决该问题:

这里:

https://dev.to/lakhansamani/create-docker-image-on-apple-silicon-m1-mac-2f75

通过在 CLI 或平台上指定 --platform linux/amd64:linux/amd64 在撰写文件中。

在我的一个 DockerFiles 中我还有:

COPY wkhtmltox_0.12.6-1.buster_amd64.deb /
RUN dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb

这是一个 wkhtmltopdf 的 debian 包(我认为 QT 支持)

这里有预构建包的下载:

https://wkhtmltopdf.org/downloads.html

那里有该软件包的 ARM64 版本。

只是想弄清楚如何配置构建(docker-compose.yml、DockerFiles 等),以便它基本上可以构建在任何架构上。

如果有一种方法可以检测 docker-compose.yml 和 DockerFiles 中的体系结构,那可能是最好的,这样它就可以构建正确的 mysql 包并使用whtmltopdf 的正确 debian 包。我怀疑我可能 运行 遇到 php、postgres 和 nginx 构建的其他问题,但我们还没有走到那一步。

合作者也有一台 Windows 机器,我认为它可以工作,但我很快就会转向 M1 Mac。

只是在寻找处理该问题的最佳方法,这样我们就不必为不同的体系结构保留单独的构建。

这个比较详细一点:

https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/

在我的例子中,.deb 包变体可能是唯一需要修复的其他项目,也许我可以使用 apt-get 代替它,但我会失去 QT 支持也许吧。

对于 M1 处理器,您必须指定平台

services:
  mysql_db:
    platform: linux/x86_64
    image: mysql:8.0.26

或者您可以使用 MariaDB 进行开发。