Docker上でHanamiを動かす

GASHOO Inc. Advent Calendar 2017土曜日担当、23日目を飾ります、t-kusakabeです。 いよいよ僕の担当は最後です。頑張っていきます。

Hanamiをくじらの上で。

今回はGashooでも使われている、Docker上でHanamiを動かすということをしようと思います。 まだまだHanami & Dockerの記事がそんなにないので手順をまとめて見ました。 Docker。便利ですよね。

まずはDockerをinstall

Mac OSの方は以下のリンクからDLしてください。 Docker for Mac

Docker for MacだとDockerもdocker-composeもinstallできるので便利ですね。

まずはHanamiのスケルトンを作る

なにはともあれ hanami new です

hanami new hanami_on_docker

Hanamiのスケルトンが出来ました。

.
├── Dockerfile
├── Gemfile
├── README.md
├── Rakefile
├── apps
├── config
├── config.ru
├── db
├── lib
├── public
└── spec

Dockerfileを書く

ではDockerfileを書いていきます。 今回はRubyの2.4.2、ベースイメージにalpineを使おうと思います。

FROM ruby:2.4.2-alpine

ARG APP_ROOT=/home/hanami_on_docker
WORKDIR $APP_ROOT

RUN apk update && \
    apk add \
      build-base \
      curl-dev \
      libxml2-dev \
      libxslt-dev \
      linux-headers \
      mysql-dev \
      nodejs \
      ruby-dev \
      tzdata \
      yaml \
      yaml-dev

COPY . $APP_ROOT

RUN gem install bundler && \
    bundle install

/home以下にアプリケーションを置いてその中でgemをinstallします。 本的に必要になるライブラリだけ入れていますが、他にも必要なものがある場合は適宜追加してください。 (RMagickをつかっているのならImageMagickなど)

docker-compose.ymlを書く

次にdocker-compose.ymlを作成します。 DBにはMySQLを使おうと思います。

version: '3'
services:
  app:
    build: .
    container_name: "hanami_on_docker"
    ports:
      - "2300:2300"
    command: bundle exec hanami server --host 0.0.0.0
    volumes:
      - .:/home/gashoo_admin
    depends_on:
      - db
    tty: true
    stdin_open: true

  db:
    image: mysql:5.7
    container_name: "mysql"
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

volumes:
  mysql-data:

buildしてみる

それではbuildしてみましょう。

docker-compose build
docker images

で、 hanamiondocker というコンテナが出来て入ればOKです。

コンテナを起動してみる

それでは最後にコンテナを起動してみましょう。

docker-compose up

localhost:2300 にアクセスしてHanamiのトップ画面が表示されて入れば成功です!