Dockerには基本となる3つの要素「コンテナ」「イメージ」「DockerFile」があります。
最初に基本要素を学ぶことで、Dockerの仕組み、コマンドの意味、サービス構築の手順が容易に理解できるようになります。初心者はまず、この基本要素を学びましょう。
・Dockerを構成する基本要素の仕組み
・コンテナが作成される流れ
Dockerで抑えるべき基本3要素
Dockerの基本要素とは次の3つです
①コンテナ
②イメージ
③Dockerfile
結論から言うと、
・「DockerFile」から「イメージ」作られる。
・「イメージ」から「コンテナ」作られる。
といような流れなっています。
この流れを理解すること、それぞれの手順やDockerコマンドを理解することが最も重要です。
まず最初のこの3要素の流れを覚えることが、Dockerを使いこなすための最短ルートとなります。
コンテナはイメージから作られる
まずは復習。コンテナとは何か覚えているでしょうか?
コンテナとはホストマシン上で、隔離された領域にアプリケーション一式が入ったものです。
コンテナは隔離されているため、コンテナ間で影響し合うことはありません。そして、Docker Engineがある環境ならば、どんな環境でも動作します。
そして、コンテナは軽量であるため配布が容易です。ホストマシン上では、コンテナは1つのプロセスとして扱われます。
そして、コンテナで押さえておくべき重要なポイントは次のこと。
コンテナはイメージから作られる
docker container createコマンド、または
docker container runコマンドで、イメージからコンテナが作成されます。
※docker create、docker runコマンドも同義
docker container create <イメージ名>
または、
docker container run <イメージ>
・docker container createコマンド、または
docker container runコマンドで、イメージからコンテナを作成する。
イメージはDockerfileから作成される
続いて、イメージとは、コンテナの素になるテンプレートのことです。
コンテナはLinux上の1プロセスとして動作しますが、イメージはファイルなので、何も動作しません。
そして、イメージはレイヤー構造で、
・ベースは何か?
・どんなアプリケーションをインストールするか?
・環境変数・設定ファイルをどこに配置するか?
といった情報が含まれています。
イメージを作成、または取得する方法は2通りあります。
- Docker Hubから取得する
- Dockerfileから作成する
Docker Hubからイメージを取得する
Docker Hubとは作成済みのイメージが公開されている場所のこと、レジストリサービスです。
主要なアプリケーションのイメージはDocker Hubで公開されています。通常はDocker Hubからイメージを取得することが多いでしょう。
docker image pullコマンドで、ubuntuコンテナの取得を行う様子を見てみましょう。
DockerHubからダウンロードしている様子がわかります。
DockerFileからイメージを作成する
もう一つのイメージ作成方法は、Dockerfileからイメージを作成する方法です。
「Dockerfile」とは、イメージの元となる情報を記述したテキストファイルです。
既存のイメージをベースとして、その上にインストールするアプリケーション、環境変数、設定ファイル、コンテナ起動時に実行するコマンドなどを記述します。
docker image buildコマンドで、イメージを作成します。
docker image build
・イメージは、DockerHubから取得する、またはDockerFileから作成する。
・docker image buildコマンドで、DockerFileからイメージを作成する。
コンテナ構築の流れ
これまでの話を整理すると、次のようになります。
まず、コンテナ、イメージ、Dockerfileとは、次のようなもの。
- コンテナはアプリケーション一式が入った隔離された領域、実行プロセス
- イメージはコンテナの元となるテンプレート
- Dockerfileはアプリケーションの情報、環境変数や設定を記述したもの
そして、コンテナ、イメージ、Dockerfileは関連している
①コンテナはイメージから作られる。
docker container create <イメージ>
または
docker container run <イメージ>
②イメージはDockerfileから作られる。
docker image build
「Dockerfile → イメージ → コンテナ」の関係をしっかり理解しましょう。