こんにちは。新しい技術を学ぶとき、概念を表す単語でつまづくブログ主です。Dockerの用語がよくわからなかったのですが、Javaに例えると少しはわかるようになったので書いておきます。
Docker用語とJava用語の対比
かなりざっくりですが、以下のようにDockerとJavaのファイルの種類を対応付けました。
Docker用語 | java用語 | 説明 |
---|---|---|
Dockerfile | .javaファイル | コンピュータへの命令を人が読めるように書いたもの |
Dockerイメージ | jarファイル | Dockerfileまたは.javaファイルをDocker EngineまたはJava VMで実行できるようにまとめたファイル |
Dockerコンテ | Javaプロセス | イメージやjarファイルを実行したもの |
生成の関連図は以下のようになります。
Java↓
Docker↓
DockerfileはJavaの.javaファイル
Dockerfile
、.java
ファイルとも、コンピュータへの命令を人が読みやすいように書いたファイルです。
これらのファイルの中では、Javaで他の人が作成したライブラリ(jar
)を使用する(import
する)ことができるように、Dockerでも他の人が作成したイメージを使用する(FROM
コマンドを使用する)ことができます。
DockerイメージはJavaのjarファイル
Javaでは、.java
をコンパイルして作成された.class
ファイルと関連するリソースをまとめたjarファイルを作成することができます。
同様に、DockerfileをビルドすることでDockerfileと関連するファイルをまとめたDockerイメージを作成することができます。Dockerイメージの実態はtarファイルのようです。
DockerイメージはDocker Hubに登録すると他の人が使用することができます。 これは、javaでmavenリポジトリにjarファイルを登録すると他の人が使えるのに似ています。
DockerコンテナはJavaのプロセス
javaコマンドで実行するクラス名を指定するとjarファイルからコードが読み込まれ、プログラムが実行されます。
Dockerではrunコマンドでイメージを指定するとそのイメージが読み込まれ、コンテナが起動します。コンテナを起動すると、例えばnginxのイメージであれば、nginxがコンテナ内で起動します。
両者に共通するのは、jarファイル、Dockerイメージとも読み込み専用で、一旦それらのファイルを作成すればどのマシン(OS)でも動くということです。
DockerとJavaの違い
DockerとJavaの大きな違いは、Dockerではコンテナ内で作業した後の状態を、イメージとして保存できる点です。JavaではjarファイルからJavaプロセスを作成してもその状態をjarファイルに戻すことはありません。
あとがき
Dockerの勉強を始めたとき、Dockerのイメージとコンテナの違いがわからず検索したところ、この投稿に行き当たりました。
terminology - In Docker, what's the difference between a container and an image? - Stack Overflow
ここに、
コンテナはイメージのインスタンス
と書かれていて、一気に理解が進みました。"インスタンス"という言葉にはJavaで馴染みがあったからです。
仮想化技術のDockerとプログラミング言語のJavaを比べるのは少し無理があるかと思いましたが、新しい技術は既存の身近なものをとっかかりにしたほうが理解が進みます。自分の場合はJavaのおかげでDockerの理解が進みました。
Dockerの書籍はこちら↓