0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

webアプリをdocker化する方法

Last updated at Posted at 2025-03-11

1.はじめに

これからwebアプリをdockerとdocker composeでwebアプリをdocker化する方法をについて紹介します。
今回はGitHabにあるtemplateを使ったdocker化の方法を見ていきましょう。
大まかな流れは以下になります。
  1. rails_docker_tempateリポジトリ(https://github.com/ihatov08/rails7_docker_template)を使ってリポジトリを作る。
  2. git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORYコマンドを実行してローカルクローンを作成する。
  3. Dockerfileとdocker-compose.ymlを作成する
  4. Dockerfile、docker-compose.yml、database.ymlを編集する
  5. docker-compose upを実行後、別のターミナルで、docker-compose run web rake db:migrateを実行する。
  6. Rails上でアプリが起動する

この手順でdocker化をしていきます。

2.git cloneしてみよう!

git cloneすることで既存のrailsアプリを自分のローカルリポジトリに持ってくることができます。やり方はすごく簡単です。
rails_docker_tempateに移動して

Use this templateを選択して Create a new repository
を押してください。

レポジトリテンプレ.png

すると、リポジトリの作成画面が出てくるのでRepository name*のところに名前を入力してリポジトリを作成してください。
作成したらリポジトリに移動してcodeを押してHTTPSのところのURLをコピーします。そして、ターミナルに移動してgit clone と入力してその後にURLを貼り付けます(このように、[git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY]になっていればOK!)

git clone イメージ.png

実行するとローカルリポジトリにtemplateがクローンされます。
rails-dockerリポジトリに移動してlsコマンドで全てファイルがクローンされていれば成功です。

3.必要なファイルを作成して編集しよう!

まず、touchコマンドでDockerfileとdocker-compose.ymlを作成します。
そして、Dockerfileの内容を以下のように編集します。
Dockerfile
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /rails-docker
WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install
ADD . /rails-docker

Dockerfileを書くときに気をつけることはrubyのバージョンです。
バージョンが古いと上手くdocker-imageが作られずにコンテナが起動できないといったことが起きるので注意が必要です。

次にDocker-compose.ymlの編集です。

Docker-compose.yml
 services:
  db:
    image: postgres:12
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/rails-docker
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
    tty: true
    stdin_open: true 
    ports:
      - "3000:3000"
    depends_on:
      - db

ここで気をつけることは、dbのeniromentに- POSTGRES_PASSWORD=postgresを追加してパスワードを指定することです。Web側だけ指定していてもエラーが出るので両方に指定しましょう。

次にdatabase.ymlの編集です。

database.yml
 default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: postgres
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
  <<: *default
  database: postgres
test:
  <<: *default
  database: postgres
production:
  <<: *default
  database: postgres
  username: rails-docker
  password: <%= ENV["RAILSDOCKER_DATABASE_PASSWORD"] %>

ここで気をつけることはデータベースの接続設定を追加することとデータベースの名前の設定です。データベースの接続設定を追加しないとアプリが動きません。
また、データベースの名前を一致させることでdocker-compose upをするとデータベースが作られます。ここでデータベースができていなかった場合はlocalhost:3000の画面にエラーが出てcreateボタンが表示されます。(docker-compose up コマンドを実行するとlocalhost:3000にアクセスできます。)

db create エラー.png

ボタンを押すとデータベースは作成されますが、docker-compose up を実行した段階ではデータベースは作成されていません。
データベースを作成するには、名前を一致させることが必要です。

4.rails上でwebアプリを起動させよう!

まず、docker-compose upコマンドをターミナルで実行します。
検索の欄にlocalhost:3000と入力します。すると

migrate エラー.png

になると思いますが、この後にターミナルを別で開いて、docker-compose run web rake db:migrateを実行すると

rails アプリ top.png
アプリが開きます! New taskをクリックすると

railsアプリ add.png

taskの作成画面が開きます。
編集や削除も簡単にできるので実際に操作して体験してみてください!

5.最後に

初めてDockerを触ってDockerfileからコンテナやイメージを作った時はエラーの連続で解決しないんじゃないかと思うエラーもたくさんありました。その時はdockerのエラー文に修正箇所や内容が丁寧に記載されているので読んでみてください。慣れてくるとだんだんエラーの内容も具体的にすぐ分かるようになってきます。私が使っていて驚いたのはrailsとrubyのバージョンを指定していて互換性がない時は、変更するべきバージョンまでエラーに書いてくれているのがすごく助かりました。これからもDockerを使っていく中でエラーがたくさん出ると思いますが、一つずつ丁寧に解決していきます。皆さんもDockerをインストールしてDockerの便利さを体感してみてください!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?