M1 MacでDocker動かしてみた

この記事はM1Mac触ってみたの5日目のエントリです(3, 4日目は別ネタにするかスキップしますw)

MacBook Airが届いてセットアップができたので動作検証も兼ねて開発環境を整えて開発作業をしてみました。

supernove.hatenadiary.jp

supernove.hatenadiary.jp

最近自分でWebアプリを開発するときには、もっぱらDockerで環境構築をして仮想環境上で開発をすることが多いです。

特にDB周りはコンテナでまとめたほうが作り直しや掃除が簡単なので、めちゃめちゃ重宝してます。

そんなDockerですが、先日M1 Macで正式にサポートされるようになりました

forest.watch.impress.co.jp

これもあったのでM1のMacを買っても大丈夫だろうと革新をしていたわけです。

というわけで今回はM1 MacにDockerを入れて動かしてみたのでそのレビューです。

インストール

インストールは以下のURLからできます。

www.docker.com

ダウンロードボタンにカーソルを当てると各OSに合わせたインストーラーを選択できるようになっているのでDownload for Mac - Apple Chipを選択してダウンロードします。

f:id:KMiura:20210503154853p:plain

ダウンロードしたインストーラでインストールします。

とりあえず動かしてみた

ダウンロードが終わり初回起動すると出てくるコマンドを実行してみます。

docker run -dp 80:80 docker/getting-started

ブラウザでlocalhostを開くとページがちゃんと開きました。

f:id:KMiura:20210503162153p:plain

開発環境を構築してみた

以下のコンテナを組みわせてDjangoの環境構築を構築してみました。

本当はMySQLを使おうとしましたがAppleシリコンだとオプションを入れてセットアップしないといけないっぽいので面倒だと感じたのでAppleシリコンでも使えるmariadbで代用しました。

設定やポートはMySQLと同じものが使えたので良かったです。

構築はdocker-composeをつかってやってみました。

参考までにyamlファイルはこんな感じです。

version: '3' 
services:
  db:
    image: mariadb:10.1
    ports: 
      - "3306:3306"
    environment:
      MYSQL_DATABASE: app-db
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: admin
      TZ: 'Asia/Tokyo'
  
  app:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./app:/code
    ports:  
      - "8000:8000"
    depends_on:
      - db

後、アプリ側のDockerfileはこんな感じです。

# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

これらを用意してdocker-compose buildしてからdocker-compose upすると普通にアプリが起動できました。

ただ、これはDockerの挙動が原因かコンテナの挙動が原因かわかりませんが、アプリの動作が重く感じました。

リクエスト投げてもレスポンスが遅かったのが気になりました。

Djangoを使っているので仕方ないのかもしれませんね…

まぁあくまで開発環境なのでそこまで気にすることではないかと(と信じたい)