Docker+既存Rails(+Puppeteer) やっぱりdockerで環境作るのを諦められなかった話

はじめに

昨日の記事で、dockerで環境作ろうとしたら出来なくて諦めてVagrantで作ったと書きました。

Vagrantの環境が出来上がった後で、よく考えてみると依存ライブラリ入れてなかったり環境変数が足りなかったりしただけで、dockerでもやっぱり作れるんじゃなかろうかと思い直して再挑戦。

環境

MacBook Pro (macOS Mojave)
Docker version 18.09.2, build 6247962
docker-compose version 1.23.2, build 1110ad01

ディレクトリ構成

ローカルにgithubから既存Railsプロジェクトがworkディレクトリにcloneされている前提。
work以下がgitで管理されているが、Dockerfileとdocker-compose.ymlは他のメンバーが使うわけではないので除外したくてこんな構成。

.
├── work
│   ├── app
│   ├── bin
│   ├── config
│   ├── db
│   ├── lib
│   ├── log
│   ├── package-lock.json
│   ├── package.json
│   ├── public
│   ├── scripts
├── Dockerfile
└── docker-compose.yml

Dockerfile

FROM ruby:2.4.3
ENV LANG C.UTF-8

ENV ROOT_PATH /work
RUN mkdir -p $ROOT_PATH
WORKDIR $ROOT_PATH

RUN echo "deb http://deb.debian.org/debian jessie main" > /etc/apt/sources.list &&\
    echo "deb http://security.debian.org jessie/updates main" >> /etc/apt/sources.list &&\
    apt-get update -qq && apt-get install -y libpq-dev libappindicator1 fonts-liberation libappindicator3-1 libasound2 libnspr4 libnss3 libxss1 xdg-utils mysql-client
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -y nodejs build-essential
RUN rm -rf /var/lib/apt/lists/*

ADD ./work/Gemfile $ROOT_PATH/Gemfile
ADD ./work/Gemfile.lock $ROOT_PATH/Gemfile.lock

RUN gem install bundler
RUN bundle install
RUN npm install

ADD ./work $ROOT_PATH

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: root
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
    ports:
      - "3306:3306"

  web:
    build: .
    command: bundle exec rails s -p 3000 -b 0.0.0.0
    environment:
      LOCAL_APP_HOST: localhost:3000
      DATABASE_HOST: db
    volumes:
      - ./work:/work:cached
    ports:
      - "3000:3000"
    links:
      - db

起動

docker-compose build
docker-compose exec web rails db:create db:migrate db:seed
docker-compose up

これだけ。

動いちゃった、、逆にショック。
昨日のVagrantに書けた5時間ぐらいは何だったのか。
昨日のがあったからサクッとDockerfile作れたんだけども。

この記事が気に入ったらサポートをしてみませんか?