Docker를 사용하여 Rails 환경 구축

11493 단어 DockerRails

입문


Docker를 사용하여 Rails 환경을 구축했습니다.
공식 환경에 가까운 환경에서 개발하는 연습을 하고 싶어서 이번에 Docker를 사용했습니다.
이 글은 Docker를 설치한 사람을 대상으로 작성되었습니다.
Docker 설치 방법은 입니다여기

단계 1


우선 뭐든지 할 수 있으니 목록을 만들어라!
예: rails_docker

단계 2


단계 1에서 만든 디렉토리에 다음 파일을 제공합니다.
・Dockerfile
Dockerfile은 Docker의 이미지를 만드는 파일입니다.이번에는 Rails 환경을 구축하기 때문에 Rails 응용 프로그램을 사용하는 데 필요한 파일 등을 정의해야 합니다.
[참조]Docker 시작(처음)~ Docker가 뭐야, 뭐가 좋아~
Gemfile
Gem이 설치된 파일 정의
・Gemfile.lock
・docker-compose.yml
여러 컨테이너 시작
$ ls
Dockerfile      
Gemfile                 
docker-compose.yml
Gemfile.lock        

단계 3


이제 Dockerfile을 정의합니다.
FROM ruby:2.7.0
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

・ 여기에서 루비의 버전을 지정합니다.
· RUN Rails 액션을 설치하는 데 필요한 패키지입니다.
・ RUN 앱 디렉토리 만들기
・WORKDIR 작업 디렉토리 설정
・ COPY Gemfile과 Gemfile.lock 복사
・ Run bundle install 설정, 애플리케이션 실행
・ COPY Docker 파일의 내용을 모두 컨테이너에 복사

4단계(Gemflie, Gemfile.lock)


Gemfile 및 Gemfilelock의 내용입니다.
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 5.2.4'
Gemfile.lock

Gemfile.lockは空で大丈夫です。

단계 5(docker-compose.yml 설정)

docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
    tty: true
    stdin_open: true
  db:
    image: mysql:5.7
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
volumes:
  db-volume:
パラメータ名 説明
version docker-compose.ymlのバージョン
web Railsのコンテナの定義
build .はdocker-compose.ymlと同じディレクトリ内という意味で、buildでdockerのイメージを作成します。
command railsサーバ起動。デフォルト値を設定してます。
volumes ディレクトリを/appディレクトリにマウント設定。これでpc上で変更を加えても即座にコンテナ上に変更が反映されます。
ports 公開用のポート。(ホスト側:コンテナ側)
depends_on サービスの依存関係を指定。dbと設定することで、先にdbを起動できます。
tty コンテナに擬似TTYの割り当
stdin_open コンテナの標準入力をオープンしたままにします。
db MySQLサーバコンテナの定義
image 使用するdbのイメージ
volumes ディレクトリを/var/lib/mysqlにマウント設定。これでDBのデータなどを残せます。
environment 環境変数の保持

단계 6

ファイルの定義が終わりましたので、Railsのプロジェクトを起動します。

$ cd rails_docker
$ docker-compose run web rails new . --force --database=mysql

docker-compose run webでwebサービスをコンテナで実行します。

正常にプロジェクトが作成できたら、新規で作成したファイルをコンテナに取り込むために再度buildします。

$ docker-compose build

次にconfin/database.ymlを編集します。
編集する箇所としてはpasswordとhostの部分を以下のように設定します。

confin/database.yml
# MySQL. Versions 5.1.10 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

development:
  <<: *default
  database: app_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: app_test

# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default
  database: app_production
  username: app
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>

保存後次のコマンドを入力します。

$ docker-compose up 

これでコンテナが起動します。

ただし、まだ開発用のDBを作成していないので下記コマンドを打ちます。

$  docker-compose run web bundle exec rake db:create

DBを作成したら以下のコマンドを打ち

$ docker-compose up 

ためしにhttp://localhost:3000/
を打ち込んで見ましょう。

まだ何も記述をしていないので初期画面がでますが、これで無事にDockerを使ってRailsの環境を構築ができました!!

<참조>

今回は下記記事を参考にしました。
ありがとうございました。

https://knowledge.sakura.ad.jp/4786/
http://docs.docker.jp/compose/toc.html
https://qiita.com/kodai_0122/items/795438d738386c2c1966

좋은 웹페이지 즐겨찾기