dockerとdocker hubの操作と概念

82
黒い画面が大好きなヒト向け コマンドで学ぶ Docker Docker Hub 概念と操作 Engineer / Technology Evangelist @ zembutsu 前佛 雅人 ZEMBUTSU Masahito JAWS - UG コンテナ支部 入門編 #4 2017 3 30 ( )

Upload: masahito-zembutsu

Post on 11-Apr-2017

3.491 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: DockerとDocker Hubの操作と概念

黒い画面が大好きなヒト向け

コマンドで学ぶ

DockerとDockerHubの

概念と操作

Engineer / Technology Evangelist@zembutsu 前佛 雅人 ZEMBUTSU Masahito

JAWS-UG コンテナ支部 入門編 #4 2017年3月30日(木)

Page 2: DockerとDocker Hubの操作と概念

http://docs.docker.jp/

2

このドキュメントの翻訳をしているヒト

Page 3: DockerとDocker Hubの操作と概念

誰?

• 運用系(サーバ) … データセンタの運用・サポート対応

• HashiCorp / Munin / Zabbix / Docker などに興味

• エンジニアのためのプレゼン研究会

• ドキュメント翻訳

• 稲作農家(富山県滑川市出身)

• インターネットの力で普通の人が価値を高められる社会

3

Software Degisn 2017年2月号→

Authorized Docker Trainer (2016.6~)

Page 4: DockerとDocker Hubの操作と概念

今日お伝えすること

コンテナは技術、Dockerは仕様

Docker Hubが中継点

コマンドでコンテナとイメージを操作

Page 5: DockerとDocker Hubの操作と概念

技術と仕様

Page 6: DockerとDocker Hubの操作と概念

6

技術と仕様Technology Specificationコンテナ Docker

Page 7: DockerとDocker Hubの操作と概念

7

サービスを提供したい

開発環境

テスト環境

準備環境

本番環境

都度、環境構築課題 異なるOS環境課題

都度、プロビジョニング課題 動かない課題

時間がかかる課題 遅い課題 面倒課題アプリを動かしたい

コンテナ開発 テスト 準備 本番

Page 8: DockerとDocker Hubの操作と概念

“Docker allows you to package an application

with all of its dependencies into a standardized

unit for software development.”

www.docker.com

8

全ての依存関係をパッケージ化して、コンテナとして動かす

Page 9: DockerとDocker Hubの操作と概念

9

コンテナ

20世紀最大の発明

Page 10: DockerとDocker Hubの操作と概念

10

Page 11: DockerとDocker Hubの操作と概念

11

技術と仕様Technology Specificationコンテナ Docker

Page 12: DockerとDocker Hubの操作と概念

12

Linux kernelのコンテナ化技術

• 名前空間とコントロール・グループの制御により、•

プロセス環境を分離し、リソースも制限できる

• この技術をDocker Engine (dockerd) で制御

namespace control group (cgroup)

isolate

Page 13: DockerとDocker Hubの操作と概念

13

Docker Engine とデーモンの変遷

Docker Engine

Linux Kernel・namespaces・cgroups

LXC libcontainer runC

containerd

v0.9~

v1.11~

Version 7 Unixchroot

jail

dockerd

v1.12~

デーモン

ライブラリランタイム

docker daemon

Docker: the container engine

v1.11~

Page 14: DockerとDocker Hubの操作と概念

14

Page 15: DockerとDocker Hubの操作と概念

15

Docker はサーバ・クライアント型モデル

OS ( Linux )

物理/仮想サーバ

Docker エンジン( dockerd デーモン )

Linux kernel

コンテナ コンテナ コンテナ

リモートAPI

dockerクライアント TCP あるいは

Unix ソケットドメイン

containerdRuntime: runC (OCI規格準拠)

・docker コマンドLinux, Mac OS X, Windows

・Kitematic (GUI)Mac OS X, Windows

・Docker Compose

・Docker Swarm

Page 16: DockerとDocker Hubの操作と概念

16

httpdPID 1

コンテナA コンテナB

rubyPID 1

chris.rbPID 2

/sbin/initPID 1

containerdPID 5

httpdPID 6

rubyPID 7

chris.rbPID 8

alicePID 2

bobPID 3

PPID 1 PPID 1

PPID 4

PPID 5 PPID 5

PPID 7

PPID 1

dockerdPID 4

コンテナのプロセス

Page 17: DockerとDocker Hubの操作と概念

17

コンテナAのファイルシステム

… …

コンテナBのファイルシステム

/etc /bin /etc /bin

/ /

/

/etc /data

/data/ubuntu /data/centos

/bin

コンテナのファイルシステム

Page 18: DockerとDocker Hubの操作と概念

18コンテナAの

ファイルシステム

… …

コンテナBのファイルシステム

/etc(/data/ubuntu/etc)

/bin(/data/ubuntu/bin)

/etc(/data/centos/etc)

/bin(/data/centos/bin)

/ /

httpdPID 1

プロセスA プロセスB

rubyPID 1

chris.rbPID 2

コンテナA コンテナB

名前空間の isolate・プロセス・ファイルシステム・ネットワーク・ホスト名・UID・GID

リソース制限・CPU・メモリ・I/O・ディスク・クォータ

コンテナの実行

Page 19: DockerとDocker Hubの操作と概念

19

技術と仕様Technology Specificationコンテナ Docker

Page 20: DockerとDocker Hubの操作と概念

20

Dockerイメージ• イメージ・レイヤの積み重ね

• 読み込み専用

Dockerコンテナ• イメージ・レイヤを1つのファイルシステムとみなす

• 読み書き可能なイメージ・レイヤを持つ

Page 21: DockerとDocker Hubの操作と概念

21

$ docker image pull ubuntuUsing default tag: latestlatest: Pulling from library/ubuntu203137e8afd5: Pull complet2ff1bbbe9310: Pull complete933ae2486129: Pull completea3ed95caeb02: Pull completeDigest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814Status: Downloaded newer image for ubuntu:latest/

Page 22: DockerとDocker Hubの操作と概念

22

$ docker pull wordpressUsing default tag: latestlatest: Pulling from library/wordpressfdd5d7827f33: Already existsa3ed95caeb02: Download complete8c80f2e38113: Download complete2da85bfb1ac0: Download complete1da50ec818af: Download completeb2799c7ad5c9: Downloading 1.113 MB/2.844 MB4893554c0107: Download completeb1d739e1b940: Waitingbd103e3f6195: Waitingaa560ff33ce6: Waiting1deabfa10759: Waiting91e6991f7a34: Waiting7234c82b998e: Waiting6bf8bdf2e550: Waitinga5c7e6ead07c: Waitingfe011342f195: Waitingc6dd706ba27e: Waiting35d564cafd69: Waiting730edfa5d07f: Waiting

Digest: sha256:bfd7e102741d73cce4ec58b2d937586c670f31df1c80aeaf4d5c525eb3c6ac06Status: Downloaded newer image for wordpress:latest

Page 23: DockerとDocker Hubの操作と概念

ベース・イメージ(公式のubuntu等)

イメージ層読み込み専用(Read Only)

Docker コンテナの実行とは

Page 24: DockerとDocker Hubの操作と概念

ベース・イメージ(公式のubuntu等)

イメージ層読み込み専用(Read Only)

・新しいイメージ・レイヤの自動的な割り当て

・イメージ内のプログラムを独立したプロセスで実行(コンテナ化された状態)

Docker コンテナの実行とは

Page 25: DockerとDocker Hubの操作と概念

25

Page 26: DockerとDocker Hubの操作と概念

26

ここまでのまとめ

技術で

の を

して実行

Page 27: DockerとDocker Hubの操作と概念

27

ここまでのまとめ

Docker Engine

Linux Kernel

技術で

ファイル

Docker イメージ

コンテナ化

して実行

Page 28: DockerとDocker Hubの操作と概念

28

技術と仕様Technology Specificationコンテナ Docker

Page 29: DockerとDocker Hubの操作と概念

29

でも、コンテナって前からあったよね?

Page 30: DockerとDocker Hubの操作と概念

Docker Hub

Page 31: DockerとDocker Hubの操作と概念

31

Page 32: DockerとDocker Hubの操作と概念

32

Page 33: DockerとDocker Hubの操作と概念

33

Page 34: DockerとDocker Hubの操作と概念

34

Page 35: DockerとDocker Hubの操作と概念

35

Page 36: DockerとDocker Hubの操作と概念

36

構築・移動・実行Build Ship Run

Page 37: DockerとDocker Hubの操作と概念

37

Dockerと愉快な仲間達

Build Run開発 ・構築 移動 実行

Ship

“Build, Ship, Run, Any App Anywhere”

Docker Engine for Linux / Commercial SupportDocker for Mac, Windows, Windows Server 2016

Docker Trusted Registry

Docker Hub

Universal Control Plane

Toolbox

Kitematic

Dev(開発)

Ops(運用)

Page 38: DockerとDocker Hubの操作と概念

38

Docker Hub

Dockerイメージの保管と共有をするためのリポジトリ(倉庫)

Page 39: DockerとDocker Hubの操作と概念

docker クライアント docker エンジン

docker container run hello-world

OSに対してdocker プログラムの実行を伝える

Docker に対してコンテナに読み込むイメージの情報を伝える

Docker コンテナを作成・実行するためのサブコマンド

$ docker container run hello-world

run

Page 40: DockerとDocker Hubの操作と概念

docker クライアント docker エンジン

$ docker container run hello-world

run

Docker Hub

pull

レジストリ

latest

イメージ

タグ

hello-world レポジトリ

latest

イメージ

タグ

latest

コンテナ化したhello-worldの実行

Hello from Docker.This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.3. The Docker daemon created a new container from that image which runs the

executable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent it

to your terminal.

To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:https://hub.docker.com

For more examples and ideas, visit:https://docs.docker.com/userguide/

Page 41: DockerとDocker Hubの操作と概念

$ docker container run hello-worldUnable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-world03f4658f8b78: Pull completea3ed95caeb02: Pull completeDigest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7Status: Downloaded newer image for hello-world:latest

Hello from Docker.This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.(省略)Share images, automate workflows, and more with a free Docker Hub account:https://hub.docker.com

For more examples and ideas, visit:https://docs.docker.com/userguide/

ローカルにhello-worldイメージがない

公式イメージlibraryにある”hello-world”を取得

最新の”hello-world:latest”イメージを取得完了

hello-worldイメージを使ったコンテナの実行(run)を命令

Page 42: DockerとDocker Hubの操作と概念

42

https://hub.docker.com

Page 43: DockerとDocker Hubの操作と概念

43

イメージの自動構築機能

webhook

Page 44: DockerとDocker Hubの操作と概念

コマンドでコンテナ操作

Page 45: DockerとDocker Hubの操作と概念

45

Dockerイメージ操作コマンド

docker images

イメージ・レイヤ(読み込み専用)

コンテナ・レイヤ(読み書き可能)

イメージ1のリポジトリ

イメージ2のリポジトリ

イメージnのリポジトリ

…docker save

docker load

tartar

docker import

docker commit

Dockerfile

docker build

docker tag

docker rmi

削除したレイヤ

docker inspect

docker history

レジストリ(Docker Hub)

リポジトリ docker pull

docker push

旧体系

Page 46: DockerとDocker Hubの操作と概念

46

Dockerイメージ操作コマンド

docker images

イメージ・レイヤ(読み込み専用)

コンテナ・レイヤ(読み書き可能)

イメージ1のリポジトリ

イメージ2のリポジトリ

イメージnのリポジトリ

…docker save

docker load

tartar

docker import

docker commit

Dockerfile

docker build

docker tag

docker rmi

削除したレイヤ

docker inspect

docker history

レジストリ(Docker Hub)

リポジトリ docker pull

docker push

旧体系

v1.13~

docker image ls

docker image push

docker image pull

docker image build

docker image import docker image save

docker image load

docker image commitdocker image tag

docker image inspect

docker image history

docker image rm / prune

Page 47: DockerとDocker Hubの操作と概念

47

Dockerコンテナ操作コマンド

start

イメージ・レイヤ(読み込み専用)

コンテナ・レイヤ(読み書き可能)

削除したレイヤ

イメージのリポジトリ

コンテナ用レイヤ作成 親子

関係

create

diff

プロセス(PID1)

コンテナ内のプロセスやファイルシステム

追加プロセス

pause

stop

kill

exec

ps

stats

top

attach

logs

inspect

port

restartrun

ホスト上のコンテナ

全体を管理

ホストから各コンテナを管理・操作

docker events

コンテナのPID1を操作

rm

pull

レジストリ

旧体系

Page 48: DockerとDocker Hubの操作と概念

48

Dockerコンテナ操作コマンド

start

イメージ・レイヤ(読み込み専用)

コンテナ・レイヤ(読み書き可能)

削除したレイヤ

イメージのリポジトリ

コンテナ用レイヤ作成 親子

関係

create

diff

プロセス(PID1)

コンテナ内のプロセスやファイルシステム

追加プロセス

pause

stop

kill

exec

ps

stats

top

attach

logs

inspect

port

restartrun

ホスト上のコンテナ

全体を管理

ホストから各コンテナを管理・操作

docker events

コンテナのPID1を操作

rm

pull

レジストリ

旧体系

v1.13~

docker container top

docker container inspect

docker container attach

docker container logsdocker container run

docker container start

docker container create

docker image pulldocker container diff

docker container pause

docker container stop

docker container kill

docker container restart

docker container rm / prune

docker container exec

docker container ls

docker container port

docker container stats

docker events

Page 49: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

コンテナとイメージの典型的なライフサイクル

Page 50: DockerとDocker Hubの操作と概念

docker pull … イメージの取得

Page 51: DockerとDocker Hubの操作と概念

docker pull … イメージの取得

docker image pull( docker pull )

イメージをリポジトリから取得

Page 52: DockerとDocker Hubの操作と概念

docker pull … イメージの取得

docker image ls( docker images )

ローカルのイメージを一覧表示

$ docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest 690ed74de00f 6 months ago 960 B

Page 53: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker pull … イメージの取得

docker run … コンテナの実行

docker container run( docker run )

イメージをコンテナとして実行

Page 54: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker pull … イメージの取得

docker run … コンテナの実行

Page 55: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker pull … イメージの取得

docker run … コンテナの実行

docker container ls( docker ps )

コンテナの状態を一覧表示

Page 56: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker commit … イメージの作成

docker build… イメージの自動構築(自動commit)

Page 57: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker commit … イメージの作成

docker build… イメージの自動構築(自動commit)

docker image build( docker build )

イメージの自動構築(ビルド)

Page 58: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker commit … イメージの作成

docker build… イメージの自動構築(自動commit)

docker container commit( docker commit )

コンテナ用レイヤをイメージ化

Page 59: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker history … イメージの履歴表示

docker diff… 元イメージとコンテナの差分表示

docker inspect… コンテナやイメージの調査

Page 60: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker history … イメージの履歴表示

docker diff… 元イメージとコンテナの差分表示

docker inspect… コンテナやイメージの調査

docker container inspect( docker inspect )

コンテナの詳細情報を表示

docker image inspect( docker inspect )

イメージの詳細情報を表示

Page 61: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker history … イメージの履歴表示

docker diff… 元イメージとコンテナの差分表示

docker inspect… コンテナやイメージの調査

docker container diff( docker diff )

イメージとの差分を表示

Page 62: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker history … イメージの履歴表示

docker diff… 元イメージとコンテナの差分表示

docker inspect… コンテナやイメージの調査

docker image history( docker history )

イメージ・レイヤと履歴の表示

Page 63: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker push … Dockerイメージの送信

docker login … ログイン

docker tag … イメージをタグ付け

docker search … 検索

Page 64: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker push … Dockerイメージの送信

docker login … ログイン

docker tag … イメージをタグ付け

docker search … 検索

docker login

Docker Hubにログイン

Page 65: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker push … Dockerイメージの送信

docker login … ログイン

docker tag … イメージをタグ付け

docker search … 検索

イメージを送信

docker image push( docker push )

Page 66: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

Page 67: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

コンテナを削除

docker container rm( docker rm )

Page 68: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

イメージを削除

docker image rm( docker rmi )

Page 69: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

不要なコンテナを削除

docker container prune

不要なイメージを削除

docker image prune

Page 70: DockerとDocker Hubの操作と概念

イメージRead Only

コンテナ用レイヤ読み書き可

docker ps … コンテナ一覧や状態の表示

docker rmi … コンテナイメージ削除

docker rm … コンテナ削除

docker images … 一覧

不要なコンテナ、イメージ、ネットワーク、ボリューム削除

docker system prune

# docker system pruneWARNING! This will remove:

- all stopped containers- all volumes not used by at least one container- all networks not used by at least one container- all dangling images

Are you sure you want to continue? [y/N] yDeleted Containers:6612edf483662725e4b1147c16f5842c780d702f1ee2d3605cb6d2c49603f45608c57b9fdb25db0705f20a6a4aaafd5ab2e367b5adbfe62b3a88e3d83327615f(snip)

Total reclaimed space: 0 B

Page 71: DockerとDocker Hubの操作と概念

71

バージョン情報等の表示docker system info

バージョン情報等の表示docker system df

# docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLEImages 4 4 1.345 GB 123 MB (9%)Containers 5 1 621.1 kB 0 B (0%)Local Volumes 3 3 432.6 MB 0 B (0%)

Page 72: DockerとDocker Hubの操作と概念

72

詳しくはウェブで…! https://qiita.com/zembutsu

Page 73: DockerとDocker Hubの操作と概念

その他、運用面

Page 74: DockerとDocker Hubの操作と概念

Copy on Write(コピー・オン・ライト)

読み込み専用(Read Only)

• Read Only のイメージ層上のファイルに対する変更は、必ずコピー作業を行う

• 内部実装はストレージ・ドライバに依存する(パフォーマンスに影響が出る)

• CoWを回避するにはボリュームを使う

書き込む前にコピーしてから

コンテナのレイヤ上に変更を反映

捕 捉

イメージ、コンテナ、ストレージ・ドライバの理解http://docs.docker.jp/engine/userguide/storagedriver/imagesandcontainers.html

Page 75: DockerとDocker Hubの操作と概念

AUFS

AUFS ストレージ・ドライバを使う— Docker-docs-ja 1.10.0b ドキュメントhttp://docs.docker.jp/engine/userguide/storagedriver/aufs-driver.html

Page 76: DockerとDocker Hubの操作と概念

devicemapper

Device Mapper ストレージ・ドライバを使う— Docker-docs-ja 1.10.0b ドキュメントhttp://docs.docker.jp/engine/userguide/storagedriver/device-mapper-driver.html

Page 77: DockerとDocker Hubの操作と概念

https://docs.docker.com/engine/userguide/storagedriver/selectadriver/

Page 78: DockerとDocker Hubの操作と概念

ボリュームはコンテナ用のレイヤとは分離

イメージRead Only

コンテナ用レイヤ読み書き可

• イメージ・レイヤの仕様(Copy on Write)を回避できる

• docker commit してもボリューム内容は反映されない。

• 複数のコンテナでボリュームを共有できる

• ホスト側のファイルやディレクトリをマウント可能

捕 捉

コンテナでデータを管理するhttp://docs.docker.jp/engine/userguide/containers/dockervolumes.html

Page 79: DockerとDocker Hubの操作と概念

79

用途に応じた技術選択が鍵

1. 利用者は誰で、用途は何か?

2. インフラをどうするのか?

3. OSを何にするのか?

4. ディストリビューションを何にするのか?

5. ストレージ・ドライバを何にするのか?

6. ベースイメージは何にするのか?

7. セキュリティをどのように考慮すべきか?

8. 性能をどのように担保するのか?

Page 80: DockerとDocker Hubの操作と概念

振り返り

Page 81: DockerとDocker Hubの操作と概念

今日お伝えしたかったこと

コンテナは技術、Dockerは仕様

Docker Hubが中継点

コマンドでコンテナとイメージを操作

Page 82: DockerとDocker Hubの操作と概念

何か気になる所がありますか?

ご参考:Docker 日本語ドキュメント

http://docs.docker.jp/

http://slideshare.net/zembutsu

twitter: @zembutsu