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

SSc*_*tti 3 mysql wkhtmltopdf docker docker-compose

我有一个 docker-compose.yml,它构建了大约 8 个容器,主要由 mysql、postgres、php-nginx 和其他一些自定义构建的包组成。生产版本在 UBUNTU 主机上运行,​​我的开发包在带有 Intel 芯片的 Mac OS Catalina 上运行。整个事情也保存在 Github 上的一个私人仓库中。

一位合作者拥有一台 M1 Mac,我可能很快就会升级到 M1 Mac,要么是 MacBook Pro,要么是 27 英寸 iMac(可能在今年晚些时候发布)。

我们尝试在他的 M1 Mac 上安装该软件包,但遇到了一些问题,甚至可能更多。

一个问题似乎与 compose 文件中的 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
Run Code Online (Sandbox Code Playgroud)

看起来有几种方法可以解决这个问题,如下所示:

Docker(Apple Silicon/M1 预览版)MySQL“清单列表条目中没有 linux/arm64/v8 的匹配清单”

和这里:

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

通过在 CLI 上指定 --platform linux/amd64 或在 compose 文件中指定 platform: linux/amd64 。

在我的 DockerFiles 之一中,我还有:

COPY wkhtmltox_0.12.6-1.buster_amd64.deb /
RUN dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb
Run Code Online (Sandbox Code Playgroud)

这是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-b​​uilds-dockerfile-cross-compilation-guide/

就我而言,.deb 包变体可能是唯一需要修复的其他项目,也许我可以使用 apt-get 来代替,但我可能会失去 QT 支持。

Bom*_*123 6

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

services:
  mysql_db:
    platform: linux/x86_64
    image: mysql:8.0.26
Run Code Online (Sandbox Code Playgroud)

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

  • *不要*使用 MariaDB 作为 MySQL 5.7+ 的替代品。从 MySQL 5.7 开始,当然在以后的版本中,这两个数据库已经分开太多了,这会让你头疼。在生产和开发中坚持其中之一,否则在部署到生产时您会遇到意想不到的问题。 (2认同)

Dar*_*ryn 6

较新的答案:现在有一个arm64镜像

DockerHub 上现在有 MySQL 8 的 arm64 映像:
https://hub.docker.com/r/arm64v8/mysql/

为什么不使用linux/x86_64平台?

以前的答案是没有官方的arm64 MySQL 8镜像,解决方法是指定platform: linux/x86_64

然而,它通过仿真在arm64 M1上运行x86代码,
所以如果你仍然使用这种方式,你的性能就会受到影响。