WebアプリをDocker化

この記事ではWebアプリをDocker化する方法を紹介していきたいと思います。
※今回の例はrubyrailsです。

まずはアプリケーションディレクトリ内にDockerfileを作成します Dockerfile内にはどういう内容でコンテナを作成するかを記載していきます。
既存プロジェクトがある場合はバージョン等は合わせて下さい。

FROM ruby:3.0.2

RUN mkdir /rails-app
WORKDIR /rails-app
COPY Gemfile /rails-app/Gemfile
COPY Gemfile.lock /rails-app/Gemfile.lock
RUN bundle install

COPY . /rails-app


次にdocker-compose.ymlを作成します
docker-composeは複数のコンテナを立ち上げる際にとても便利です。
下記ではWebDBのコンテナが2つ立ち上がるようになっています。

version: '3'

volumes:
  db-data:

services:
  db:
    image: postgres
    volumes:
      - 'db-data:/var/lib/postgresql/data'

  web:
    build: .

    command: bundle exec rails s -p 3000 -b '0.0.0.0'

    ports:
      - '3000:3000'

    # ホストのファイルシステムとコンテナのファイルシステムを同期
    volumes:
      - '.:/rails-app'

    environment:
      - 'DATABASE_PASSWORD=test'

    tty: true
    stdin_open: true

    depends_on:
      - db

余談ですが、DBを変更した場合(sqlitepostgresql)はdatabase関連のファイルを変更するように注意して下さい。


Dockerfileに基づいてコンテナイメージが作成されます

docker-compose build

ビルドされたイメージを使用してコンテナを起動

docker-compose up

DBの生成と初期化を行います

docker-compose run web rake db:create db:migrate

後はlocalhost:3000にアクセスすれば表示さればOK
railsはポート番号は3000なので3000になっていますが他の言語では違うので注意


以上でアプリのDocker化が完了です!