Docker 初学 ~imageとcontainer~


Docker 初学 ~ imageとcontainer~

Dockerについて学習したのでDocker imageとcontainerについての知見を深めるために、
自分が学んだことをアウトプットしていきます。

Dockerとは

Dockerとはコンテナ型仮想化技術を実現したプロダクトです。
簡単にいうと、自分のローカル端末の環境を他の人に簡単に渡せるようになるという感じです。
コンテナ型仮想化技術についての詳細はここでは割愛します。
Dockerの基礎的な動作は「Docker image」と「Docker container」に分けられます。

「Docker image」と「Docker container」の関係性

imageとcontainerがどんな関連性を持つか簡単なイメージを作成しました。

Docker image
実行するアプリケーションやOSなどの設定をまとめたもので、コンテナを作成するもとになるものです。
Docker container
imageをもとにcontainerを作成して、アプリケーションやOSを実行状態にしたものです。

まとめ
すごく簡単にいうとimageはあくまで設定をまとめたもので、containerはimageを実行している状態のものです。
補足情報
一つのimageから複数のcontainerを作成することができます。

Docker imageについて

「Docker image」の作成は、とてもシンプルです。「Docker File」と言われる定義ファイルにOSなどを設定していけば「Docker image」を作成できます。

ここで簡単なDockerfileを作成してみます。ファイル名は「Dockerfile」です。拡張子もいりません。

Dockerfile
# From句 必須項目 DockerHubから元となるイメージを取得する。
# Dockerfileは必ずFrom句から始まります。そして、DockerHubからイメージをダウンロードしてきます。
From debian:stable-slim
# CMD句 任意項目 Docker image 作成時に実行するコマンドを定義する。
CMD ["echo","Hello World!"]

何をしているかというと、DockerHubにあるdebianのimageをもとにDockeriamgeを作成しているだけです。
(OSを設定しているだけでアプリケーションは乗せてないです。)

そして、以下のコマンドを実行すると、Dockerimageができると思います。

docker image build -t example/echo:latest .

Docker imageが作成できた確認として以下のコマンドを実行してください。

docker images
# example/echoとdebianのimageが表示されるはずです。

今回作成した「Docker image」のイメージ図は以下の感じです。
debianを内包しているような感じです。

ここにjavaだとかgoとか様々なアプリをカスタマイズしていきます。
(プログラミング言語を内包したDockerimageは公式として提供されているケースが多いです。)
まとめ
Dockerfileを作成して「Docker image」を作成する。
自作の「Docker image」は別の「Docker image」に依存するケースがある。
(From 句でscrachと指定されているのは違いますが、話が難しくなるので割愛します。)

Docker containerについて

それでは、イメージからコンテナを作成してみましょう。

docker container run example/echo

Hello Worldと出力されたと思います。

今回作成したコンテナはコマンド実行だけですが、httpリクエスト受付やできることが
もっとありますので、今度試してみたいと思います。