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作れたんだけども。
この記事が気に入ったらサポートをしてみませんか?