Dockerによるコンテナ作成手順
webアプリをdocker化する方法について、Dockerfileを用いる場合とdocker composeで行う場合それぞれ記載します。
Docker Desktopを既にインストール済みで起動している場合を想定しています。
まだDocker Desktopをインストールしていない場合はインストールしてから拝読ください。
Dockerfileを用いる場合
getting-started リポジトリ からアプリをダウンロードしてください。
次に下記コマンドでDockerfileを作成してください。
$ cd getting-started
$ touch Dockerfile
Dockerfileを下記のように編集します。
Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Dockerfileからコンテナを立ち上げる
まず、docker buildコマンドを使ってコンテナイメージを構築します。
docker build -t getting-started .
下記コマンドでホストとコンテナのポートをそれぞれ3000に指定してコンテナを立ち上げます。
ウェブブラウザで http://localhost:3000 にアクセスするとダウンロードしたアプリが表示されます。
$ docker run -dp 3000:3000 getting-started
Docker Composeを用いる場合
まずRailsアプリを用意し、Railsアプリが配置されているディレクトリにcdコマンド等で移動してください。
Docker Composeは、複数のコンテナを用いるアプリケーションでDockerイメージのビルドやコンテナの起動、停止の操作をより簡単に行えるようにするツールです。
Docker Desktopをインストールしている場合すでに存在しています。
Dockerfileを作成
まずは下記のようにRailsアプリの直下のディレクトリ(Gemfile等と同じ階層)にDockerfileを作成します。
# Docker Hubからイメージを取得
FROM ruby:3.0.2
# ワーキングディレクトリを指定
WORKDIR /Myapp
# aptを更新し、必要なパッケージをインストールする
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
# ホストのGemfileとGemfile.lockをコンテナの/Myappにコピー
COPY Gemfile /Myapp
COPY Gemfile.lock /Myapp
# Gemをインストール
RUN gem install bundler -v 2.3.0
RUN gem update --system
# ホストのpackage.jsonとyarn.lockをコンテナ内にコピーする
COPY package.json yarn.lock /src/
# yarnをインストール
RUN yarn install
RUN bundle install
$ touch docker-compose.yml
version: '3'
services:
db:
image: postgres
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
# ホストのポートとコンテナのポートを紐づけ
ports:
- "3000:3000"
depends_on:
- db
Gemfileを編集
Gemfileに以下のコードを記載することでrailsでPostgreSQLを使うことが可能になります。
gem 'pg', '~> 0.18.4'
config/database.ymlを編集
データベースとWebアプリを接続するため、database.ymlを下記のように編集します。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: postgres
port: 5432
pool: 5
コンテナを作成して起動
下記コマンドでコンテナを作成し、http://localhost:3000 にアクセスすることでRailsのページが表示されます。
docker compose up -d
参考