初めに!
Dockerは軽量で高速に動作するコンテナ型仮想環境用ツールです。
従来の開発ではアプケーション開発と並行して環境構築を1から行う必要がありました。
しかしDockerを利用することで環境の一括管理することができ、大幅な効率化が図れます。
さらにDockerを利用することで他の開発者と環境を共有やバージョン管理を行うことで開発環境の標準化が行えるようになります。
よってDockerは現代の開発環境に必要不可欠な存在となっているのです。
目的
- dockerとdocker-composeを使用してRailsアプリケーションとPostgressを簡単にセットアップし、実行していきます。
前提条件
- まずはDockerとDocker Hubがインストールされていることが前提で進めていきます。
まだの方は公式サイトインストールを行なってください。
大まかな方針
- Railsで記述したファイルを自分の環境に用意する。
- Dockerfileとdocker-compose.ymlの準備。
- database.ymlの追記。
- アプリケーションの実行。
手順
Railsで記述したファイルを自分の環境に用意する。
docker化するアプケーションを用意していきましょう!
私は以下のものcloneしてwebアプリを用意しました。
$ git clone https://github.com/ihatov08/rails7_docker_template
Dockerfileとdocker-compose.ymlの準備。
- 今回はRailsとPostgresSQLの2つのコンテナを使用するので
docker-compose.ymlを使用します。
Dockerfile
FROM ruby:3.2.2 RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ nodejs \ postgresql-client \ yarn WORKDIR /workdir ADD Gemfile Gemfile.lock /workdir/Gemfile RUN bundle install ADD . /workdir/
docker-compose.yml
version: '12' services: db: image: postgres environment: POSTGRES_PASSWORD: trust web: build: . command: /bin/sh -c "rm -f tmp/pids/server.pid && rails db:migrate && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/workdir ports: - "3000:3000" depends_on: - db tty: true stdin_open: true
- 今回はPOSTGRES_PASSWORD:trustにしているが本来はPOSTGRES_PASSWORD:値にはきちんとパスワードを入力した方が良い。
テータベースに接続
docker-compose.ymlのサービスの定義を合わせるためにconfig/database.ymlを変更していきます。
config/database.ymlはデータベース設定についての詳細が記載されているファイル。
config/database.yml
default: &default adapter: postgresql encoding: unicode host: db username: postgres password: pool: 5
データベースを作成する。
- 初回のみ実行する。
$ docker-compose run web rake db:create
- dbの中に新たなデータベースが作成される。
アプリケーションの起動
$ docker-compose up
- ブラウザにてhttp://localhost:3000/を入力するとアプリケーションが立ち上がります。
結語
複数のコンテナを利用してアプリケーションを立ち上げる場合はdocker-composeを利用する。
docker-compose.ymlにはサービス定義部分に必要な数のコンテナ名を記述する。
アプリケーションとデータベースを接続を行うためにconfig/database.ymlを変更する。