LoginSignup
0
1

More than 3 years have passed since last update.

Dockerで開発環境構築してみる。この前の続き 〜自分用〜

Last updated at Posted at 2020-05-14

前提条件

・すでに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も起動していることがわかる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1