この記事でお話しすること
この記事では、DockerでのRails開発を始めるに当たって、知っておきべき基礎知識を解説していきます。
具体的には以下の4つについてお話しします。
- 仮想環境
- コンテナ
- Dockerイメージ
- Dockerfile
なお、「分かりやすく伝える」ことを最優先にしているため、突っ込んだ知識は除外し、できるだけ簡潔に説明しています。
Dockerとは何か?
Dockerとは、パソコン上に仮想環境を作れるツールです。
仮想環境とは
- 物理的なハードウェアを持たず
- 仮想的にOSを動かし、
- アプリケーションを実行させる環境
を言います。
Dockerを使った仮想環境の具体例
通常の開発環境(画像: 左)
通常、Mac上に作られたRailsアプリケーションは、Mac上のRubyに依存します。
MacのRubyをバージョンアップした場合、依存したRailsアプリは動かなくなります。
動かすためにはRailsのGemfileを書き換え、対応するRubyのバージョンを合わせる必要があります。
Dockerを使った開発環境(画像: 右)
Dockerを使えば、Macとは別のOS上に新たにRubyをインストールし、そのRubyに対応したRailsアプリを作ることができます。
もちろん仮想環境でRubyをインストールしているため、Mac上のRuby本体やRailsアプリには何ら影響ありません。
このDocker上に作られた仮想環境をコンテナと呼びます。
コンテナとは
Docker上に作られた仮想環境のこと。
Dockerの優れた移植性
Dockerの最大の特徴は、その移植性にあります。
Dockerが動く環境さえあれば、他のパソコン上でも同じ環境のコンテナを動かすことができます。
このコンテナのもととなるデータをDockerイメージと呼びます。
このイメージを受け渡すことで同じ環境(コンテナ)を実現します。
Dockerイメージとは
仮想環境(コンテナ)のもととなるデータをひとまとめにしたもの。
DockerイメージはDockerfileをもとに作られる
Dockerイメージは、Dockerfileの情報をもとに作られます。
Dockerfileには「コンテナがどのような構成になるのか」の情報をコードで記述します。
そして$docker build
コマンドを実行することでDockerイメージが作成され、そのイメージをもとにコンテナが起動します。
Dockerfileのサンプル
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
今後、Dockerfileを作成することがあれば「あ、これはDockerイメージの構成を書き込んでいるんだな」とお考えください。
Dockerfileとは
Dockerイメージの構成情報を記述するファイルのこと。
まとめ
最後にここまで学んだことを整理しておきましょう。
- Dockerとは、パソコン上に仮想環境を作れるツール
- 仮想環境とは、物理的なハードウェアを持たず、仮想的にOSを動かす環境
- コンテナとは、Docker上に作られた仮想環境のこと
- Dockerイメージとは、コンテナのもととなるデータをひとまとめにしたもの
- Dockerfileとは、Dockerイメージの構成情報を記述するファイル
まずはこれだけ知っておけば、Dockerの理解がスムーズになります。
あとは手を動かして覚えましょう。
おしまい。
さて、次回は?
次回はDockerでのWebアプリケーション開発に必須な「Docker Compose」について説明していきます。
それでは。