#前提条件
・すでにDockerはインストール済み。
・Rubyのバージョンは2.6.3を使用する。
・Railsのバージョンは5.2.4を使用する。
・ディレクトリ名はvb_appとする。
#DockerHubからRubyのDockerイメージを入手
$ docker pull ruby:2.6.3
Digest: sha256:358f16e92d0f66599103318f7a8528d449b0973fd89e46a1a5c47cec7479f09b
Status: Downloaded newer image for ruby:2.6.3
docker.io/library/ruby:2.6.3
Gemfileを生成する為にbundle initを実行。
・Gemfile生成
$ docker run --rm -v "$PWD":/usr/src/vb_app -w /usr/src/vb_app ruby:2.6.3 bundle init
#オプションについて
docker run オプション image名:タグ名 実行コマンド
--rm: 実行後のコンテナを削除。指定しない場合はコンテナが残ってしまう。
-v: ホストのディレクトリをコンテナ内のディレクトリにマウント。
"$PWD"はカレントディレクトリのこと。
-w: ワーキングディレクトリを指定。
中身を編集
Gemfile
source "https://rubygems.org"
gem 'rails', '5.2.4'
イメージ内にgemを埋め込む為に、Gemfile.lockを生成しておく。
$ touch Gemfile.lock
ここでさらに編集
Dockerfile
FROM ruby:2.6.3
ENV APP_ROOT /usr/src/vb_app
WORKDIR $APP_ROOT
RUN apt-get update && \
apt-get install -y nodejs \
postgresql-client \
sqlite3 \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
FROM: 親イメージの指定
ENV: 環境変数の設定
WORKDIR: ワーキングディレクトリの指定
COPY: ファイルをイメージにコピー
RUN: コマンド実行
$ docker build -t 開発者名/vb_app .
docker build .: カレントディレクトリのDockerfileをビルド
-t: 開発者名/vb_app
でイメージ名が作成される
イメージができているか確認は下記で行う。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
開発者名/vb_app latest 4f5e7b33d235 58 seconds ago 965MB
ruby 2.6.3 8fe6e1f7b421 9 months ago 840MB
イメージの作成が完了する。次にrailsの雛形をrails new . で生成。Gemfileがコンフリクト起こすのでYを選択して上書きをする。
$ docker run --rm -it -v "$PWD":/usr/src/vb_app 開発者名/vb_app rails new . -BT
exist
identical README.rdoc
identical Rakefile
identical config.ru
identical .gitignore
conflict Gemfile
Overwrite /usr/src/vb_app/Gemfile? (enter "h" for help) [Ynaqdh] Y
-it: コンテナのプロセスに対してttyを割り当てる
-BT: bundle install 無し、Minitest無し
Railsアプリイメージの構築
アプリケーションのイメージを作る。
デフォルトでwebサーバーの起動が行えるようにDockerfileを修正する。
Dockerfile
FROM ruby:2.6.3
ENV APP_ROOT /usr/src/vb_app
WORKDIR $APP_ROOT
RUN apt-get update && \
apt-get install -y nodejs \
postgresql-client \
sqlite3 \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
COPY Gemfile $APP_ROOT
COPY Gemfile.lock $APP_ROOT
RUN \
echo 'gem: --no-document' >> ~/.gemrc && \
cp ~/.gemrc /etc/gemrc && \
chmod uog+r /etc/gemrc && \
bundle config --global build.nokogiri --use-system-libraries && \
bundle config --global jobs 4 && \
bundle install && \
rm -rf ~/.gem
COPY . $APP_ROOT
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
ビルドしてイメージを再作成する。
$ docker build -t 開発者名/vb_app .
#Docker-composeの作成
次にDockerfileを管理するためのDocker-composeを作成していく。
Docker-compose.yml
version: '3'
services:
app:
build: .
environment:
RAILS_ENV: development
ports:
- '3000:3000'
volumes:
- .:/usr/src/vb_app
docker-compose.ymlができたら再ビルド。
$ docker-compose build
$ docker-compose up -d
コンテナが起動し、さらに起動時にrailsも起動していることがわかる。