Dockerは、開発者とシステム管理者が軽量のコンテナーとしてどこにいてもアプリケーションを構築、パッケージ化、実行するためのオープンプラットフォームを提供するオープンソースプロジェクトです。 Dockerは、ソフトウェアコンテナ内のアプリケーションのデプロイを自動化します。
Ruby on Rails(RoR)は、MITライセンスの下で公開されているオープンソースのWebアプリケーションフレームワークです。これは、MVC(Model-View-Controller)の概念に従ったサーバー側のWebアプリケーションフレームワークです。
このチュートリアルでは、DockerとDockercomposeを使用してRubyonRailsアプリケーションの開発環境をセットアップする方法を説明します。ホストオペレーティングシステムとしてUbuntu18.04を使用し、RailsプロジェクトにPostgreSQLデータベースを使用します。
私たちが行うこと:
- DockerとDockerComposeをインストールする
- Railsプロジェクトを生成する
- Railsプロジェクトを設定する
- Docker作成スクリプトを作成する
- プロジェクトを構築する
- Railsで基本的なCRUDを作成するテスト
私たちがしなければならない最初のステップは、dockerとdockercompose自体をインストールすることです。公式のdockerリポジトリからdockerをインストールし、公式のdockerGitHubプロジェクトからdocker-composeをインストールします。
Dockerパッケージをインストールする前に、以下のaptコマンドを実行してパッケージの依存関係をインストールしてください。
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
次に、DockerキーとDockerリポジトリを追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
このコマンドは、システム上のすべてのリポジトリを自動的に更新します。完了したら、docker-ceパッケージをインストールします。
sudo apt install -y docker-ce
docker-ceがインストールされるのを待ってから、dockerサービスを開始し、起動時間に追加します。
sudo systemctl start docker
sudo systemctl enable docker
Dockerはシステム上で稼働しています。
次に、dockerGitHubリポジトリからバイナリファイルを直接ダウンロードしてdocker-composeをインストールします。
docker-composeバイナリファイルを「/usr/ local / bin /」ディレクトリにダウンロードし、実行可能にします。
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
dockerとdocker-composeがシステムにインストールされています。以下のコマンドを使用して、バージョンを確認してください。
docker version
docker-compose version
結果は以下のとおりです。
コアパッケージdockerとdocker-composeをシステムにインストールした後、新しいユーザーを作成し、dockerイメージを使用してRailsプロジェクトを生成します。
'hakase'という名前のユーザーを追加し、そのユーザーにパスワードを与えます。
useradd -m -s /bin/bash hakase
passwd hakase
ユーザーを「sudo」および「docker」グループに追加し、「hakase」ユーザーシェルにログインします。
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
これで、「hakase」ユーザーはdockerコマンドを実行して実行できます。
次に、RubyonRailsプロジェクト用の新しいディレクトリ「rails」を作成します。
'rails'ディレクトリを作成して移動します。
mkdir -p ~/rails
cd ~/rails/
次に、以下の「dockerrun」コマンドを実行します。
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
このコマンドは、ruby:alpineイメージに基づいて一時コンテナを実行し、ローカルディレクトリをコンテナ内の「/ usr / src」ディレクトリにマウントしてから、「sh」シェルコマンドを実行して「app」ディレクトリに移動します。
コンテナ内に、「build-base」パッケージをインストールします。
apk add build-base
次に、RubyonRailsを一時コンテナー内にインストールします。
gem install -N rails
そして、データベースとしてPostgreSQLを使用して「app」という名前の新しいRailsプロジェクトを生成し、コンテナから終了/ログアウトします。
rails new app --database=postgresql --skip-bundle
exit
そして、Railsプロジェクトディレクトリ「app」に移動します。
次に、「app」プロジェクトディレクトリの所有者を「hakase」ユーザーに変更します。
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
また、RubyonRailsプロジェクトは一時的なDockerコンテナを介して生成されています。
このステップでは、Railsアプリケーション用の新しいDockerfileを作成します。
'rails'ディレクトリ内で、vimを使用して新しいDockerfileを作成します。
vim Dockerfile
以下に構成を貼り付けます。
FROM ruby:alpine RUN apk update RUN apk add build-base nodejs postgresql-dev tzdata RUN gem install -N rails RUN mkdir -p /app WORKDIR /app COPY ./app/Gemfile /app COPY ./app/Gemfile.lock /app RUN bundle install --binstubs
保存して終了します。
RubyAlpineLinuxをベースにした新しいDockerイメージを作成しています。 Railsインストール用の新しいパッケージをインストールし、新しい/ appディレクトリを作成し、アプリのローカルディレクトリからGemfileとGemfile.lockをコピーして、Gemfileに基づいてすべてのパッケージをインストールします。
次に、「app」ディレクトリに移動し、新しいファイルGemfile.lockを作成します。
cd app/
touch Gemfile.lock
'database.yml'ファイルを編集します。
vim config/database.yml
デフォルトのデータベース構成を変更し、以下のように詳細を変更します。
default: &default adapter: postgresql encoding: unicode host: db username: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
保存して終了します。
Railsプロジェクトの構成が完了しました。
このステップでは、Railsアプリケーション用の新しいdocker-composeファイルを作成します。 2つのサービスdbデータベースPostgreSQLのみを作成し、webはrailsアプリケーション自体です。
'rails'ディレクトリ内に新しいファイル'docker-compose.yml'を作成します。
vim docker-compose.yml
そして、以下の構成を貼り付けます。
version: '3.6' services: db: image: postgres:alpine volumes: - ./postgresql:/var/lib/postgresql/data web: build: . volumes: - ./app:/app working_dir: /app command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - 80:3000 depends_on: - db
保存して終了します。
次に、「rails」プロジェクト内に「postgresql」ディレクトリを作成します。
mkdir -p ~/rails/postgresql
これで、Railsプロジェクトを構築する準備が整いました。
以下のdocker-composeコマンドを使用してRailsdockerイメージをビルドします。
docker-compose build
このコマンドは、Ruby Alpine Linuxイメージをダウンロードし、Dockerfileに基づいて必要に応じてカスタムイメージをビルドします。
プロジェクトのPostgreSQLデータベースを生成します。
docker-compose run web rake db:create
次に、「db」サービスと「web」サービスを起動します。
docker-compose up -d
Railsサービスが稼働しているので、以下のdocker-composeコマンドを使用して確認してください。
docker-compose ps
サービス「web」がホストのポート「80」で実行されていることがわかります。
次に、システムでDockerイメージを確認します。
docker-compose images
そして、以下のような結果が得られます。
次に、Webブラウザーを開き、サーバーのIPアドレスまたはドメイン名を入力します。私のは:
http://rails.hakase-labs.io/
そして、デフォルトのRailsページアプリケーションが表示されます。
これで、Railsプロジェクトを開発する準備が整いました。
'web'コンテナサービス内でrailsコマンドを実行して、レール上に単純なCRUDを生成します。
docker-compose exec web rails g scaffold Post title:string body:text
次に、データベースを生成します。
docker-compose exec web rake db:migrate
次に、Webブラウザーを開き、アドレスバーにパス「/posts」を使用してサーバーのIPアドレスを入力します。私のは:
http://rails.hakase-labs.io/posts
そして、以下のような簡単なCRUDページが表示されます。
投稿を入力して、[投稿を作成]ボタンをクリックします。
そして、以下のような結果が得られます。
DockerおよびDockerComposeを使用したRubyonRailsの開発環境のセットアップが正常に完了しました。