最近、触り始めているRubyonRailsをdocker,awsと合わせて勉強していきたいと思っている今日この頃でございます。まず今回は、railsをdocker環境で動かすための、docker+rails環境構築を記事にしていきます。
【構成】
Ruby 2.5.1
Rails 5.2.1
MySQL 5.7
プロジェクトディレクトリを作成
この記事では、rails_dockerプロジェクトを作成します
$ mkdir rails_docker
Dockerfileを作成
$ cd rails_docker $ mkdir Dockerfile $ vi Dockerfile
FROM ruby:2.5.1 # RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejsを実行 RUN apt-get update -qq RUN apt-get install -y build-essential RUN apt-get install -y libpq-dev RUN apt-get install -y nodejs # ワークディレクトリの設定 RUN mkdir /myapp WORKDIR /myapp # gemfileを追加する ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock # gemfileのinstall RUN bundle install ADD . /myapp
Gemfile, Gemfile.lockの作成
$ touch Gemfile $ vi Gemfile
source 'https://rubygems.org' gem 'rails', '5.2.1'
次に空のGemfile.lockを作成
$ touch Gemfile.lock
docker-compose.ymlの作成
$ touch docker-compose.yml $ vi docker-compose.yml
version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" links: - db
・version
Composeファイルのバージョンを指定できます。
・image
ベースイメージを指定します。
・volumes
ホストマシンとDockerコンテナ内のファイルをSyncする。
[ホストのパス]:[Dockerコンテナ内のパス]
・ports
ホスト側とコンテナ側の両方のポートを指定できます。(ホスト:コンテナ)
コンテナポートのみを指定した場合は、ホスト側のポートはランダムで指定されます。
rails newでプロジェクトを作成
docker-compose runコマンドでwebコンテナの中でrails newコマンドを実行します。
ここでdatabaseにMySQLを指定します。
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
config/database.ymlの編集
default: &default adapter: mysql2 encoding: utf8 pool: 5 username: root password: root # docker-compose.ymlのMYSQL_ROOT_PASSWORD host: db # docker-compose.ymlのサービス名
起動
# コンテナをビルド $ docker-compose build # コンテナの一斉起動 $ docker-compose up
「Completed 200 OK」がでたらコンテナが立ち上がったのでOK。Ctrl+Cをおすと止まってしまうので、次のコマンドは違うコンソールを立ち上げてコマンドを実行していきます。
DB作成
$ docker-compose run web rails db:create
動作確認
以下にアクセスして動作確認
http://localhost:3000/
コメント