Part1の続きです。
前回はdockerをとりあえず動かして見ようぜということを書いたのですが、今回は寄り細かい動作原理的なことにフォーカスします。
ここで使用しているソースコードはこちらに格納してあります。
https://github.com/NewGyu/docker-demo
readme.mdにもある程度のことを書いてあるので参考にしてください。
Dockerイメージの管理
イメージとコンテナ
まず用語の整理です。
用語 | 意味 |
---|---|
イメージ | オブジェクト指向で言うクラス。イメージを元にして具体化されたコンテナが生成される |
コンテナ | イメージから作られた実行プロセス |
前回、以下のようなコマンドでコンテナを実行したかと思います。
$ docker run -d -p 80:80 newgyu/docker-sample:1.0.0
これはnewgyu/docker-sample:1.0.0
という名前のイメージを元にしてコンテナを作って実行するという意味になります。
DockerHub
さて、newgyu/docker-sample:1.0.0
という名前のイメージは一体どこにあるのでしょう?
その答えはDockerHubというDockerが運営するサービス上にあります。
https://hub.docker.com/r/newgyu/docker-sample/tags/
これは私が事前にdocker build
でイメージを作成し、docker push
でDockerHubにイメージをアップロードしたものです。
build,pushの話はまた別の機会にしたいと思いますので今回はコマンドリファレンスだけ示しておきます。
- https://docs.docker.com/reference/commandline/build/
- https://docs.docker.com/reference/commandline/push/
docker pull
DockerHub周りの概念はgitに影響を受けています。docker pull
はgit pull
と同じようにリモートリポジトリからローカルリポジトリに持ってくるということをします。
pullする前にdocker images
を実行してみましょう。ローカルリポジトリにあるイメージを一覧出来ます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
newgyu/docker-sample 1.0.0 38a291398a18 31 hours ago 640.9 MB
Part1を実施した後であればnewgyu/docker-sample:1.0.0
というイメージがローカルリポジトリにすでに入っていると思います。
次のようにコマンドを実行してみましょう。
$ docker pull busybox
latest: Pulling from busybox
bf0f46991aed: Pull complete
3d5bcd78e074: Pull complete
Digest: sha256:5551dbdfc48d66734d0f01cafee0952cb6e8eeecd1e2492240bf2fd9640c2279
Status: Downloaded newer image for busybox:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
newgyu/docker-sample 1.0.0 38a291398a18 31 hours ago 640.9 MB
busybox latest 3d5bcd78e074 5 days ago 1.113 MB
これによってbusyboxというごく小さなdockerイメージをpullしてきます。ローカルリポジトリに追加されましたね。
docker runで指定したイメージは勝手にpullされる
さて、Part1の手順ではdocker pull
はしていません。なぜローカルリポジトリにnewgyu/docker-sample:1.0.0
という名前のイメージがあるのでしょうか?
Part1で初めてdocker run
した時のコンソール出力を振り返ってみましょう。
Unable to find image 'newgyu/docker-sample:1.0.0' locally
1.0.0: Pulling from newgyu/docker-sample
e2a4fb18da48: Pulling fs layer
58016a5acc80: Pulling fs layer
:
Digest: sha256:3137e6df67b07bd3f19ec08bdec7c9049a50a07900a45d1f2febfe9b256822a3
Status: Downloaded newer image for newgyu/docker-sample:1.0.0
pullした時と同じような出力でしたね。
docker run
は、ローカルにリポジトリに対象のイメージがなければ勝手にpullしてくるのでした。
と、言うことで
- DockerイメージはDockerHubに置かれている
- runやpullでローカルリポジトリに持ってきて使う
ということでした。
プライベートリモートリポジトリ
- DockerイメージはDockerHubに置かれている
「弊社独自のイメージをDockerHubで皆さんに公開するわけにはいかん!」という企業は多いと思います。
会社業務で作ったシステムをGithubに上げられないのと同じ悩みですね。
(実はDockerHub enterpriseというものがあるのですが、ここではそれは置いておきます)
GitのプライベートリモートリポジトリをGitlabなどで構築するように、Dockerにもプライベートリモートリポジトリを構築できるものがあります。
これはdocker build
,docker push
する過程で扱わないと使い方がよくわからないと思うので今回はリンクを示すだけにして、また別途書きたいと思います。
See:
今日はここまで。 また今度Part3を書きます。