4
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?

More than 1 year has passed since last update.

Dockerとは 開発環境やファイルについて解説

Last updated at Posted at 2022-04-04

はじめに

Dockerの開発環境とはどのようなものか、Dockerでの環境構築の際に作成するファイルについてまとめました。
*この記事は環境構築のやり方を解説した記事ではないため、この記事を参考にして環境構築した場合の動作の保証は一切しません。

Dockerの開発環境

Dockerのソフトウェアをインストールすると、Moby LinuxというLinuxの軽量な仮想マシンが裏で作成されます。
そして、DockerでRubyの実行環境を立ち上げると、Moby Linux上にコンテナという仮想環境が作成されます(RubyのコンテナはDockser HubというサイトにあるファイルをDLして作成される)。
コンテナのもとになるファイルをまとめたものをイメージと呼びます。Rubyのイメージには、RubyそのもののプログラムやRubyに関するライブラリが含まれています。また、Linuxとして動作するために最低限必要なファイルも含まれています。このコンテナにPC上のRails用のフォルダをマウントして開発を行う。これによって動作確認が行えるわけです。
image.png

Dockerfileについて

Dockerの新しいイメージを作成する際に使用します。この設定ファイルには、Railsアプリケーション実行に必要なファイルやパッケージをイメージに含めるための定義が書いてあります。このイメージをもとにコンテナが作成されます。

# Ruby3.1.1の実行環境のイメージをベースと します
FROM ruby:3.1.1

# 上記のイメージからコンテナを起動してコンテナ内で実行するコマンドを定義
# ubuntuの管理システムであるapt-getで、必要なパッケージをインストールします
RUN apt-get update -qq && apt-get install -y build-essential nodejs

# 作業ディレクトリをappディレクトリに変更
WORKDIR /app

# GemfileとGemfile.lockをコンテナ内の/appディレクトリ内にコピーしています(この2つのファイルは、Rubyのライブラリであるgemを管理するためのファイル)
COPY Gemfile Gemfile.lock /app/

# entrypoint.shをコンテナ内の/usr/bin/にコピー
# entrypoint.shにはコンテナ立ち上げ時に実行するスクリプトを書きます
COPY entrypoint.sh /usr/bin/

# EXPOSE ... コンテナがリッスン(待機)するポート番号を指定します
EXPOSE 3000

# CMD ... ソフトウェアを実行するコマンドです
CMD ["rails", "server", "-b", "0.0.0.0"]

Gemfile、Gemfile.lock

Gemfileは、インストールするgemを定義しておくためのファイルです。
Gemfileのあるディレクトリでbundle installコマンドを実行することで、Railsのgemがダウンロードされてインストールが実行されます。

Gemfile.lockは直接編集するものではなく、bundle installを実行した際に、実際にインストールしたgemのリストとバージョンが自動的に記載されます。
用途は、別の環境で同じRailsアプリを動かす場合に、同じgemをインストールするために使います。

docker-compose.yml

Dockerで、複数のコンテナを設定に従ってまとめて起動するために使用します。Railsを使用するコンテナとDBサーバーを実行するコンテナの2つを起動する定義を記載します。

version: "3"
# MySQLサーバコンテナの定義
services:
  db:
    image: mysql:5.7
    volumes:
      - db-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
volumes:
  db-volume:

# Railsコンテナの定義
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && \
                      bin/rails db:create && \ 
                      bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
    depends_on:
      - db

それぞれ解説します。

volumes:
      - db-volume:/var/lib/mysql

PC上にdb-volumeという名前で作成したボリューム(データ保持領域)をコンテナの/var/lib/mysqlディレクトリにマウントします。これを設定しないと、DBのデータは直にコンテナ上に保存されますが、コンテナが削除された場合にはデータも一緒に消えます。それを回避するためにPC上の領域にDBのデータを保存しておき、コンテナを作り直したとしてもデータが保持されるように設定します。

build: .

dokcer-compoe.ymlファイルと同じディレクトリにあるDockerfileをもとにイメージを作成して使用。buildとは、Dockerfileからイメージを作成することです。

command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"

コンテナを起動したときに、デフォルトで実行されるコマンドです(RailsのWEBサーバーを起動するコマンド)。
bundle execとすることで、gemfileでインストールしたRailsコマンドが実行できます。sはサーバー、pは公開するポート番号、bでバインドするIPアドレスを設定。
0.0.0.0とすることで、コンテナがもっているすべてのネットワーク・インターフェースにおいて3000番ポートに通信が来たらRailsサーバーが応答するようにしています。

volumes:
      - .:/myapp

PC上のディレクトリを、コンテナの/myappディレクトリにマウントします(PC上のdocker-compoes.ymlが置いてあるフォルダが、コンテナの/myappディレクトリに共有されるようになります)。これによって、PC上で修正したソースコードがコンテナ上でも反映され、即座に動作を確認しながら開発を行えます。

ports:
      - "3000:3000"

コンテナ外部に3000番ポートで公開します。これを設定しないと、PCからコンテナで動作しているRailsに通信できません。
[公開するポート番号]:[コンテナ内部の転送先ポート番号]

depends_on:
      - db

Railsサーバーが起動するまえにDBサーバーが起動するように設定します

参考サイト

4
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
4
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?