Dockerを使った環境構築について

Dockerを使って環境構築することの意味がよくわからなくなったので、ざっくりまとめてみた。

Dockerを使った環境構築は何がうれしい?

Dockerを使うことで以下のメリットがある。

  1. アプリケーションが動作する環境を手軽に作成できる
    Dockerfileもしくはdocker-compose.ymlに設定情報を記載してDocker起動するだけで、環境構築が完了する。 Dockerを使わない場合、サーバー(Linux)やミドルウェアApache)、プログラミング言語の実行環境を自分で構築する必要がある。

  2. メンバー間や環境(本番、評価、開発)間での環境差異をなくすことができる
    環境の情報がDockerfileもしくはdocker-compose.ymlにまとめられるため、これを配布することで同じ環境を簡単に作ることができる。

  3. ローカル環境を汚さない
    環境構築のために必要なものをローカルにインストールして使用するわけではないため、例えば別の作業でローカルのファイルに変更があった際に、開発環境への悪影響がない。

「環境差異をなくす」とは

ここでの環境とは、開発環境というより実行環境のイメージ。
実行環境とは、プログラムを動かすにあたって必要なものが揃った場所のこと。

つまり、開発段階で動作確認する時の環境と、評価や本番で動かす環境の条件(使用しているプログラミング言語のライブラリのバージョンなど)を揃えるということ。

dockerコマンドとdocker composeコマンド

dockerコマンド
Dockerfileで単独のコンテナを起動する。

docker composeコマンド
docker-compose.ymlで複数のコンテナを起動する。

アプリケーションを実行するためには、基本的に複数のコンポーネント(Webサーバー、DBサーバーなど)が必要になる。そのため、アプリケーションの開発ではdocker composeを用いることが多い。さらに、コンテナ起動時に必要な環境変数やディスクのマウント、ポートの設定などをdocker-compose.ymlに書いておくことで、コマンド実行時にオプションを指定する必要がないため、dockerコマンドに比べると実行するコマンドが簡潔に済むというメリットもある。

また、Dockerfileとdocker-compose.ymlは併用も可能。Dockerfileをビルドする設定をdocker-compose.ymlに書いておくことで、Dockerfileでカスタマイズしたimageをビルドして使うこともできる。

参考

Dockerで環境構築するための最低限の概念理解 - Qiita

[Django] Dockerファイルとdocker-compose.ymlの違い

docker-compose.ymlとDocker fileの使い分けについて

【初心者向け・図解】Docker Composeとは?Dockerとの違いを現役エンジニアがわかりやすく解説 – エンジニア女子の自習室