【M1 Mac】Docker開発環境を整える(Ruby on Rails, MySQL, Elasticsearch)
最近(本当は結構前です)会社から新PCが支給されたので改めて開発環境を構築する必要がありました。
すでにこの辺りに関する情報は多く出回っているのですが、個人的に備忘録として残していたものを記事に起こしておこうと思います。
DockerをM1に対応させる
Ruby on Rails、MySQL
開発にはDockerをしているのですが、
以前使用していたままの状態だとうまく起動しませんでした。
調べてみると、platformの指定が必要とのこと。
docker-compose.yml
1 2 3 4 5 6 7 8 |
services: rails: (....省略) platform: linux/amd64 mysql: (....省略) platform: linux/amd64 |
指定せずに起動させようとすると、PC自体のCPUアーキテクチャが自動的に指定されます。
M1はarm64
、旧PCはamd64
と異なるCPUアーキテクチャためエラーが出て怒られてしまいます。
明示的にplatformで指定することで対応するイメージをビルドすることができるということですね。
Elasticsearch
Elasticsearchには公式で配布されているイメージを使用します。
以前に使っていたイメージのバージョンがarm64に対応していなかったため、最新のバージョンを使用します。
(現時点の最新バージョンは8.0.1です)
1 |
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.1 |
どちらのアーキテクチャに対応しているかはこちらから確認できます。
https://hub.docker.com/_/elasticsearch?tab=tags
これで開発環境のセットアップは完了です。
以下最終的なdocker-compose.yml
の内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
version: '3' services: rails: build: . command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/app ports: - "3000:3000" depends_on: - mysql - elasticsearch environment: - NODE_PATH=/app/node_modules stdin_open: true tty: true mysql: image: mysql:5.6 command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: "" MYSQL_ALLOW_EMPTY_PASSWORD: "yes" volumes: - mysql-volume:/usr/data:delegated - ./docker/mysql/my.cnf:/etc/mysql/my.cnf ports: - 3306:3306 elasticsearch: build: ./docker/elasticsearch environment: - node.name=es01 - discovery.type=single-node - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 ports: - 9200:9200 - 9300:9300 volumes: - elasticsearch-volume:/usr/share/elasticsearch/data:delegated |
まとめ
今回は環境構築に時間がかかってしまって勉強不足を痛感しました。。
サクサク開発できて新PCの支給に非常に感謝します!
また新たに開発をする場合でも、platformや使用するイメージのバージョンに気をつければ基本的には問題なさそうです!
次は一から開発環境構築に改めて挑戦してみたいと思います!
それでは、ハッピーコーディング!