12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker】アーキテクチャの違いでつまづいたので調べてみた

Last updated at Posted at 2024-01-16

どうもこんにちは。

今回は、Dockerを使用してRailsの環境構築をしていた時につまづいた、「x86_64」「amd64」「arm64」の違いについて調べてみました。

私が使用しているPCはApple Silicon M2チップのMacBookProです。

アーキテクチャについて

x86_64/amd64

この二つのアーキテクチャは、呼び方が異なるだけで同じアーキテクチャを指しているようです。

主にデスクトップやサーバー向けのアプリケーションで使用されています。

arm64

ARMベースのデバイスやサーバーで使用されるアーキテクチャで、特に省電力性や効率性が求められる環境での使用に適しています。

Dockerコンテナへの記述

ARMアーキテクチャを採用しているPCの場合、docker-compose buildを実行した時にアーキテクチャが違いますとエラーが出ることがあります。

その場合、docker-compose.ymlにplatformを指定することで解決できます。

db:
    image: mysql:8.0
    platform: linux/x86_64   # platform: linux/amd64 でもOK
    ports:
        - "3306:3306"
    volumes:
        - ./tmp/volumes/db:/var/lib/mysql
    environment:
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

補足

ARMアーキテクチャを使用している場合、以下のGemが動作しません。

gem 'listen'

理由として、listenというGemの内部で動作しているinotifyというシステムコールを使用して動作しているのですが、これがARMアーキテクチャではサポートされていないのが問題のようです。

その場合、listenを使用しているコードはコメントアウトするとうまく行きます。

以下に例を示しておきます。

I18nJS.listen

# I18nJS.listen

に変えてください。

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?