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?

dockerとdocker composeでwebアプリをdocker化する

Last updated at Posted at 2025-07-12

dockerとは「アプリケーションを箱に詰めて、どこでも同じように動かせる技術」です。
MacやWindowsなどのOSの違いを考えないで実行することができるようになるので、OS間の違いを気にしなくて良いためとても便利な技術です。
通常は「箱」ではなくて「コンテナ」と表現します。

docker化するためには、Dockerfileというファイルにインストールする内容や実行する内容を書いていき、その内容をdocker imageに変換してからdockerコンテナにします。

以下はrailsをdocker化する際に書いたDockerfileの内容です。

FROM ruby:3.2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    postgresql-client \
    yarn
WORKDIR /rails-docker
COPY Gemfile Gemfile.lock /rails-docker/
RUN bundle install

Dockerfile作成後、ターミナルでdocker build <各々のbuild context>と打つことでdocker imageに変換できます。

更にdocker run <各々のdocker image>と打つことでdockerコンテナが作成されます。
コンテナにすることで各サービスを使える状態になりました。

docker化する方法は以上なのですが、今回の場合だとこれだけでは動きません。

このrailsを使うためにはデータベースが必要なためです。
そのために必要なのがdocker composeです。

コンテナは1つにつき1つのサービスしか書けません。
docker composeはrailsのコンテナとデータベースのコンテナの2つが必要な際に役立ちます。(もちろん3つ以上でも大丈夫です。)

docker composeを使わないと、1つのサービスに対してDockerfileを1つずつ作成していき、dockerコンテナを使用するときにdocker runで1つずつ起動していかないといけない面倒な状態になってしまうからです。
そのため複数のサービスを使用する際はdocker composeを使用した方が良いでしょう。

docker composeの中に起動するサービスごとに内容を書いていきます。
※下記ではwebとdbが該当

volumes:
  db-data:

services:
  web:
    build: .
    ports:
      - 3000:3000
    volumes:
      - .:/rails-docker
    environment:
      - DATABASE_PASSWORD=postgres
    tty: true
    stdin_open: true
    depends_on:
      - db

  db:
    image: postgres:12
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres

ここまで書いたらターミナルにコマンドを打てば起動しますが、docker composeの場合はdocker runではなくdocker-compose upになります。
コマンドは異なりますが、やっていることは同じでdockerを起動しているだけです。

これで2つのコンテナが同時に起動している状態です。
あとは作業に応じてコンテナを
docker-compose exec <サービス名> <bashやshなど>で実行中にすれば通常通りに各サービスが使えるようになります。

Dockerfileやアプリ起動後の操作はお使いのアプリにより変わってくるので省いていますが、webアプリをdockerとdocker composeで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?