LoginSignup
12
9

More than 3 years have passed since last update.

Dockerを体験してみるハンズオン Part2

Last updated at Posted at 2015-10-26

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 pullgit 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:
* http://dev.classmethod.jp/cloud/docker-registry-recipes/
* https://hub.docker.com/_/registry/


今日はここまで。 また今度Part3を書きます。

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9