8a1#19[はじめてのdocker] 公開版

104
April 24 , 2015 AP Communications Co., Ltd. System Infrastructure Engineering Div. Nobuchika Kamon 1

Upload: nobuchika-kamon

Post on 17-Jul-2015

1.475 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: 8a1#19[はじめてのdocker] 公開版

April 24 , 2015

AP Communications Co., Ltd. System Infrastructure Engineering Div.

Nobuchika Kamon

1

Page 2: 8a1#19[はじめてのdocker] 公開版

Question.

1.どちらかというとプログラマ的な仕事である。

2.どちらかというとサーバエンジニア的な仕事である。

3.あるいはネットワークエンジニアかデザイナなどの仕事である。

2

Page 3: 8a1#19[はじめてのdocker] 公開版

1. Dockerは普通に触ったことがある。

2. Dockerは触ったことがあんまりない。(ちょっとある)

3. 全くない。

Question.

3

Page 4: 8a1#19[はじめてのdocker] 公開版

1. いままで8a1に参加したことある。

2. 無い。

Question.

4

Page 5: 8a1#19[はじめてのdocker] 公開版

ご協力ありがとうございました。 進行の参考にさせていただきます。

Question.

5

Page 6: 8a1#19[はじめてのdocker] 公開版

今回の講座は、タイトルどおりに初心者向けです。 中上級者の方がいらっしゃった場合、つまらないという可能性が 大いにありますのでその点はご了承くださいませ。 資料は後日Slideshareにアップ予定。 質疑応答は懇親会の時にでもざっくばらんに声かけてください。 4649 !!

Question.

6

Page 7: 8a1#19[はじめてのdocker] 公開版

Who?

嘉門 延親(KAMON Nobuchika) ・ 独立系SIer歴 13年くらい(その前にも数社) ・ 基本的にインフラ屋として働いてます。 ・ Googleストリートビュー被写体経験あり

7

Page 8: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

8

Page 9: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

9

Page 10: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Dockerの概要

10

Page 11: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

元々は、dotCloudという会社(クラウドサービス)が、自社のPaaS環境を 実現する為につくったツールでした。 しかし今は、dotCloudは売却して、Docker,Inc になりました。

「Docker」 Linux上で動作するコンテナ型の仮想化ソフトウェア

11

ここは本日限り

Page 12: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

・AWS、Dockerコンテナ管理サービス「Amazon EC2 Container Service」などをリリース 2014/11/16 ・正式版「Docker 1.0」がリリース――Microsoft AzureもDocker利用を支援 2014/6/9 ・ Docker 向けCloud Foundry BOSHがリリース 2014/6/11 ・ Red HatがDocker中心のEnterprise LinuxディストリビューションAtomic Hostをリリース 2015/3/6 などなど・・・ ※現在の最新版は1.6です。

2014年に1.0がリリースし、大きく知名度向上&大ブレイク。

12

Page 13: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security このあたりの説明は後ほど。

基本的な機能はLinuxが元々持ってる機能を利用してます。

13

Page 14: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Virtual Machines

Vs

D o c k e r

14

Page 15: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Server

HOST OS

Hypervisor

GuestOS GuestOS

Bins/Libs

App A

Bins/Libs

App B

Virtual Machines

それぞれのアプリを動かすための実行環境として、わざわざ別のゲストOSを用意。

15

Page 16: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Server

HOST OS

Hypervisor

GuestOS GuestOS

Bins/Libs

App A

Bins/Libs

App B

Virtual Machines

ゲストOSだけではなく、 HyperVisorという謎の物体もある

16

Page 17: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Server

HOST OS

Docker Engine

Bins/Libs

App A

Bins/Libs

App B

Docker

ゲストOSいらず。 いきなりコンテナとしてアプリ実行環境をポコポコ作れる。 ハイパーバイザーもいらない。

17

Page 18: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

VirtualMachine vs Docker

Virtual Machine Docker

起動 数分は必要 1秒くらい

メモリ OS本体分の確保が必要 プロセスの分だけ

OSの自由度 OSそのものなので自由にできる 母艦ホストに依存

ディスク容量 OS分は必要 コンテナで使う分だけ

18

Page 19: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

身近な例に例えると….

19

Page 20: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

ひとつの土地にひとつのOSが入っている。一軒家構成。 = 従来の物理構成

Traditional Architecture

20

Page 21: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

それぞれの部屋に風呂とかキッチンは必要だけど、 敷地はひとつの “マンション” で良くね?

= 仮想化環境

Virtual Architecture

21

Page 22: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

つーか、玄関も風呂もキッチンも全部ひとつで良いよね。 要は最低限の自分の環境があればいいわ。

ファシリティ共通の ”シェアハウス” でいいよね。 = Docker 環境

22

Page 23: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

自由度: 一軒家 > マンション > シェアハウス

コストの高さ: 一軒家 > マンション > シェアハウス

引っ越しの大変さ: 一軒家 > マンション > シェアハウス

23

Page 24: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

何がベストかは用途次第ではありますが、 軽くて独立したアプリ実行環境を作れるというのがDockerの強みです。

24

Page 25: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

またDockerfileによる “Infrastructure as a code” の実現や、 ポータビリティの高さもその強みです。

25

Page 26: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Dockerfileの例 FROM centos:centos6 MAINTAINER KAMONNOBUCHIKA@APC RUN yum update -y RUN yum install -y mysql-server RUN yum install -y mysql-devel RUN chown -R mysql:mysql /var/lib/mysql EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]

# vi Dockerfile

CentOS6のイメージ上に、 Yum updateして、 Mysql-serverとdevelいれて ディレクトリ権限変えて 3306あけて 起動するっていうように書いておく

26

Page 27: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Dockerfileの例

# docker build -t kamon/mysql:0.1 .

Buildオプションで、イメージを作る。 ―t でイメージ名 kamon/mysql、タグ名を0.1とする。 んで、カレントディレクトリにあるDockerfileを指定。

27

Page 28: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

要するに、書いておくとその通りに再現される イメージのレシピ的なものを持っておけますよと。

そんな話です。

28

Page 29: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

なおイメージ自体もExportして、 他の環境に持ってくことができます。

DockerイメージはVMを移動するより

はるかに軽量ですが、 データ以外はファイルにして都度実行の

方が当然軽いです。でも時間はかかるけど。

29

Page 30: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

アーキテクチャについての説明

30

Page 31: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

これからご説明するものは、 Linux自体に実装されている機能です。

個々の詳細は割愛しますが、

ふーんこういうふうなもんなのねくらいに 見ていただければと思います。

31

Page 32: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security

32

Page 33: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security

33

Page 34: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Server

HOST OS

Docker Engine

Bins/Libs

App A

Bins/Libs

App B

Namespaces -プロセスの隔離-

× それぞれのコンテナ間は隔離されている。

34

Page 35: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

Namespaces -プロセスの隔離-

それぞれの超概要: ○ PID → それぞれのコンテナで独立したPID ○ MNT → 各空間で行ったマウント操作が他に影響しない ○ IPC → プロセス間通信(IPC)を独立させることができる ○ UTS → ホスト名、ドメイン名をそれぞれ持つことができる ○ NET → IPアドレス、ルーティングテーブルとかを独立 ○ USER → いまのDockerでは使えない まぁ、あんまり意識しないですけど、実際。

35

Page 36: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security

36

Page 37: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

例えば、 CPUやメモリの使用量を制限することができます。 docker run -c 256 -m 512m hoge /bin/bash

-c :CPUの相対的な資料量 -m : Memory使用上限

37

Page 38: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security

38

Page 39: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)

https://docs.docker.com/terms/layer/

39

Page 40: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)

Write

https://docs.docker.com/terms/layer/

40

Page 41: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)

Read

https://docs.docker.com/terms/layer/

41

Page 42: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

○ Namespaces ○ cgroups ○ Storage ○ Networking ○ Security

42

Page 43: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

仮想ブリッジ iptables SElinux Veth など などが使われてます(詳細はハンズオンにて) まぁこんなんがありますよ、と。

43

Page 44: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

ウンチクが長くてすいません。

44

自主規制

Page 45: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

も・・・もう少しだけ。。

45

Page 46: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

docker hub

46

Page 47: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

ざっくりいうと、インストールして使うソフトウェア としてのDockerは “Docker Engine”。

それとは別にイメージを共有するためのレポジ

トリとして “Docker hub” があります。

47

Page 48: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

docker hub (official Repo)

※ March 7, 2015 48

Page 49: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

docker hub (Price)

※ March 7 , 2015 49

Page 50: 8a1#19[はじめてのdocker] 公開版

What is Docker ?

ここまでのまとめ。 ○ Dockerの良いところ -- VM技術との比較とDockerfile など ○ 使われてる要素技術 -- コンテナ隔離、リソース、FS など ○ Docker hubについて

50

Page 51: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerのオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

51

Page 52: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

Server

HOST OS

Docker Engine

Bins/Libs

App A ひとつのサーバにひとつのコンテナ。 特に問題ない。

52

Page 53: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

Server

HOST OS

Docker Engine

Bins/Libs

App A ひとつのコンテナに複数のアプリケーション。 これは基本的にイケてない。 # Docker非推奨。 ひとつのアプリケーションを動かすべき。

App B

53

Page 54: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

Server

HOST OS

Docker Engine

Bins/Libs

App A

Bins/Libs

App B まぁ、こうなる。

54

Page 55: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

Server

HOST OS

Docker Engine

Bins/Libs

PHP

Bins/Libs

MySQL APサーバとDBサーバならこんな感じ。 単一サーバの中であれば、linkの機能として実現することができる。

55

Page 56: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

○ 複数ホストをまたがって管理するときには? ○ 単一サーバでもコンテナ多くなったらカオスじゃね? ○ Dockerのホスト自体を管理する手段ってねーの? ○ ホスト間のシームレスなマイグレーションってどーすんの? などなど。 このあたりが、現時点でのDockerの課題のひとつです。 現時点で決定的なツール等はありませんが、徐々に充実してきています。 今回はいくつかそれらをご紹介します。

56

Page 57: 8a1#19[はじめてのdocker] 公開版

Orchestration.

fig -------------------------------------------------------------------

【 fig.yml 】 web:

image: kamon/apache:0.1

links:

- db

ports:

- "80:80“

db:

image: kamon/mysql:0.1

volumes:

- /var/lib/mysql:/var/lib/mysql

------------------------------------------------------------------- fig up –d : fig.yml に書いた通りにイメージをアップしてくれる。

単一ホストの簡易的な管理

57

Page 58: 8a1#19[はじめてのdocker] 公開版

Replication Controller

Orchestration.

kubernetes Google謹製 複数ホストに対する高機能Docker管理ツール。 k8s とか略されたりしている。 Docker、MS、Redhat 他各社が支持を表明している。 基本的にはマルチホストNWを実現する flannelと一緒に使う。

Container

Container

Label

Replication Controller

Container

Container

Label

Container

Pod (Labelはpodの名前)

service 設定したpodにtrafficをRRで割り振ったりする

指定した数だけpodを立ち上げたりする

58

Page 59: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Docker Machine (Bata)

AWS EC2、OpenStack、VMware vSphere、 MS Azure、DegitalOcianなど 様々な環境に一発でホスト環境を作って管理。

Docker Swarm (Bata)

複数のDocker Engineをひとつに束ねたように 見せるクラスタリングツール。

Docker Compose 複数のDockerコンテナで構成されるアプリケーション をデプロイするオーケストレーションツール。 つーかfigである。

59

Page 60: 8a1#19[はじめてのdocker] 公開版

Orchestration.

60 https://github.com/weaveworks/weave

Weave

ホストにdockerイメージを落として、 コンテナとして起動するとマルチホスト間のネットワーク をトンネル作って作ってくれるツール。 (超シンプル)

Page 61: 8a1#19[はじめてのdocker] 公開版

Orchestration.

Dockerの課題

徐々にプレイヤーが出そろってきた感じがありますが、まだβだったりして バギーだったり機能不足だったりしています。個人的にはweave推し。 一方でコミュニティも活発だし、おそらく今年中には大きく進展するかも? また柔軟なマルチホスト間NWも実現できるSocketPlaneという ソリューションをDockerが買収したりもしております。 これからも要注目!

61

Page 62: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerのオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

62

Page 63: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

社内システム作ってくれYO

63

Page 64: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

分かったYO

64

Page 65: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

ただしウチのVM上に作ってYO 開発環境はAPCだ YO

65

Page 66: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

(二度も環境構築とか 差異とかめんどくせーな・・・)

66

Page 67: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

(VMイメージもってくのも・・)

67

Page 68: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

(東南アジアだし 回線 遅いしなぁ。。)

68

Page 69: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

!!!!!

69

Page 70: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

お客さん、 いま世界はDockerです! コンテナもってきますYO!

70

Page 71: 8a1#19[はじめてのdocker] 公開版

Case.

東南アジア某国 日系企業さま

わかったYO

71

Page 72: 8a1#19[はじめてのdocker] 公開版

Case.

非常にざっくりいうと、そんな経緯でお客様のご理解を得て 受託してるSIerの我々はDockerで環境を作ることになりました。

72

Page 73: 8a1#19[はじめてのdocker] 公開版

Case.

コンテナとアプリを転送して乗せるだけ

ここは本日限り

73

ここは本日限り

Page 74: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerのオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ ★Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

74

Page 75: 8a1#19[はじめてのdocker] 公開版

Agenda.

しかし、当ビル内ではタバコ吸えません・・・。

ごめんなさい・・・。

75

Page 76: 8a1#19[はじめてのdocker] 公開版

------------------< 薀 蓄 >------------------ 1. Dockerってどんな技術?という概要 2. Dockerのオーケストレーションツールの紹介 3. 本番環境での実装例のご紹介 ------------------< 休 憩 >------------------ ※ないかも?EC2のアカウント情報を配ります。 ------------------< 手 技 >------------------ ★Dockerしてみるハンズオン イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。 質疑は懇親会でやりましょー。適当に声かけてください。

Agenda.

76

Page 77: 8a1#19[はじめてのdocker] 公開版

Hands on.

手順1: お配りしたURLにアクセスして、鍵ファイル(pem)をDLしてください。 手順2: 何らかのターミナルでSSHにて、指定されたIPアドレスに入ってください。 それぞれ個別のEC2インスタンスを作っています。 手順3: ユーザ名は root パスワードは 無しです。 ※docker自体をインストール済みのCentOS6を用意しました。

77

Page 78: 8a1#19[はじめてのdocker] 公開版

Hands on.

基本操作を通じて、理解を深めるの巻

78

Page 79: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン1】 dockerのイメージを入手、そして確認。 # docker pull centos:centos6

centos:centos6: The image you are pulling has been verified

511136ea3c5a: Pull complete

5b12ef8fd570: Pull complete

f6808a3e4d9e: Pull complete

Status: Downloaded newer image for centos:centos6

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

centos centos6 b9aeeaeb5e17 32 hours ago 202.6 MB

centos 6 b9aeeaeb5e17 32 hours ago 202.6 MB

79

イメージ名

Page 80: 8a1#19[はじめてのdocker] 公開版

https://docs.docker.com/terms/layer/

Hands on.

ここを落としてきました。

80

Page 81: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン2】 dockerの起動。 # docker run -it centos:centos6 /bin/bash

[root@6b484935c662 /]#

[root@6b484935c662 /]#

[root@6b484935c662 /]# ps -aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 11692 1876 ? Ss 10:26 0:00 /bin/bash

root 22 0.0 0.0 19696 1240 ? R+ 10:36 0:00 ps -aux

コンテナを立ち上げて、Dockerの中に入りました。 一瞬!かつめっちゃ早いですよね。隔離されてるので、何もプロセスが無いです。

イメージ名 実行プロセス 標準出力+TTY

81

Page 82: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン3】 dockerプロセスの確認。 別ターミナルを上げてSSHで入って、以下のコマンドを打ってください。 その際、ログインしているコンテナから出ないこと。

一意なID イメージ名 実行CMD 作られた時 ステータス 指定しないと 適当な名前

コンテナがひとつ立ち上がっているのが確認できます。

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b5a30e66a89b centos:centos6 "/bin/bash" 15 seconds ago Up 14 seconds suspicious_mcclintock

82

Page 83: 8a1#19[はじめてのdocker] 公開版

【レッスン4】 コンテナから出て確認します。

Hands on.

[root@6b484935c662 /]# exit

exit

[root@ip-172-31-8-137 ~]#

/bin/bashというアプリを立ち上げるプロセスに入っていたので、 そこからexitする=コンテナ終了となります。

コンテナから出ます

EC2インスタンス(ホストOS)に 戻ります

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

コンテナは消えています。

83

Page 84: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン5】 落ちたコンテナを確認→立ち上げてみます。

再度、動かすことができました。

# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b5a30e66a89b centos:centos6 "/bin/bash" About a minute ago Exited (0) 4 seconds ago suspicious_mcclintock

# docker start bdebb1137587

b5a30e66a89b

# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b5a30e66a89b centos:centos6 "/bin/bash" 3 minutes ago Up 10 seconds suspicious_mcclintock

Exitして終了している

叩き起こしてみる

生き返る!

コンテナID

84

Page 85: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン6】 もう一回、コンテナに入ってみます。

# docker exec -it bdebb1137587 /bin/bash

[root@6b484935c662 /]#

[root@6b484935c662 /]#

[root@6b484935c662 /]#

もう一回はいります。 /bin/bashの出力をとるかんじ。

[root@6b484935c662 /]# yum install –y telnet

YUMでtelnetをインストール。

コンテナID

85

Page 86: 8a1#19[はじめてのdocker] 公開版

別ターミナルを上げてSSHで入って、以下のコマンドを打ってください。 その際、ログインしているコンテナから出ないこと。

Hands on.

【レッスン7】 コミットしてイメージを保存します。

# docker commit bdebb1137587 yourname/test1:0.1

50c427451ecc9d4750b3d658d791ecf51cf503a4188c981bf477a17528a8a74a

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

hoge/test1 0.1 50c427451ecc 28 seconds ago 342.6 MB

centos latest 88f9454e60dd 2 days ago 223.9 MB

新しくイメージが出来ました!

コンテナID 名前+タグ

86

Page 87: 8a1#19[はじめてのdocker] 公開版

https://docs.docker.com/terms/layer/

Hands on.

Baseの上にもう一層を重ねました。

87

Page 88: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン8】 イメージを捨ててみます。

# docker rmi f8922a2b3a97

Untagged: hoge/test1:0.1

Deleted: 50c427451ecc9d4750b3d658d791ecf51cf503a4188c981bf477a17528a8a74a

# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

centos centos6 f6808a3e4d9e 6 days ago 215.7 MB

消えました!

イメージID

88

Page 89: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン9】 ホストのIPアドレスとかを確認してみます。

# ip a

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> -snip- state UNKNOWN

link/ether a6:14:e2:10:30:01 brd ff:ff:ff:ff:ff:ff

inet 172.17.42.1/16 scope global docker0

inet6 fe80::ec3b:bdff:fea7:8629/64 scope link

valid_lft forever preferred_lft forever

9: vethf5d9822: <BROADCAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP

link/ether a6:14:e2:10:30:01 brd ff:ff:ff:ff:ff:ff

inet6 fe80::a414:e2ff:fe10:3001/64 scope link

valid_lft forever preferred_lft forever

docker0 というインターフェイスがあります。

veth xxx というインターフェイスがあります。

docker0 と veth は同じmacアドレスになっています。

89

Page 90: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン10】 ホスト側のネットワーク情報とかを確認してみます。

# brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.a614e2103001 no vethf5d9822

個別のNWが作られ、iptablesの機能で通信していることが分かります。

# iptables-save | grep docker0

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o docker0 -j ACCEPT

-A FORWARD -i docker0 -o docker0 -j ACCEPT

仮想ブリッジに紐づいているのは 先ほどのveth=docker0です。

docker0に対しての許可ルールです。

90

Page 91: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン11】 コンテナのIPアドレスとかを確認してみます。

# docker exec -it bdebb1137587 /bin/bash

[root@6b484935c662 /]# ip a

8: eth0: <BROADCAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP

link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.3/16 scope global eth0

inet6 fe80::42:acff:fe11:3/64 scope link

valid_lft forever preferred_lft forever

[root@6b484935c662 /]# ping 172.17.42.1

PING 172.17.42.1 (172.17.42.1) 56(84) bytes of data.

64 bytes from 172.17.42.1: icmp_seq=1 ttl=64 time=8.37 ms

eth0が出来ています。 そこにホスト側のdocker0と同セグメントの

IPアドレスが振られています。

同セグメントのdocker0にpingが飛びます。

91

Page 92: 8a1#19[はじめてのdocker] 公開版

# docker ps

Hands on.

【レッスン12】 不要なコンテナを削除します。

[root@79dfde92ce89 /]# exit

exit

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

b5a30e66a89b centos:centos6 "/bin/bash" 6 minutes ago Up 3 minutes suspicious_mcclintock

# docker rm bdebb1137587

# docker ps -a イメージが残っていないことを確認します。

92

# docker stop bdebb1137587

# docker ps -a

指定したコンテナを消します。

Page 93: 8a1#19[はじめてのdocker] 公開版

# docker ps

Hands on.

【レッスン13】 docker inspectオプションを実行(準備)。

# docker run -it centos:centos6 /bin/bash

93

時間次第で実施

別ターミナルを上げてSSHで入って、以下のコマンドを打ってください。 その際、ログインしているコンテナから出ないこと。

コンテナの起動を確認

Page 94: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン14】 docker inspectオプションを実行。

# docker inspect bdebb1137587

# docker inspect --format="{{.NetworkSettings.IPAddress}}" bdebb1137587

個別のフィールドだけを抜き出すことも可能です。

作成時間、実行コマンド、IPアドレス、環境変数、イメージ、などなど・・・。

94

時間次第で実施

コンテナID

コンテナID

Page 95: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン15】 docker APIを叩いてみる。

# vi /etc/sysconfig/docker

編集前:other_args=“--dns=8.8.8.8” 編集後:other_args=“--dns=8.8.8.8 -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"

# service docker restart

# curl http://127.0.0.1:4243/images/json | python -mjson.tool

保有しているイメージがJSONで返ってきます。

95

時間次第で実施

※ 最初はAPIは空いてないので、実際は事前に以下のようなファイル編集が必要

Page 96: 8a1#19[はじめてのdocker] 公開版

Hands on.

DockerFileを作って立ち上げてみるの巻

96

Page 97: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン16】 Dockerfileでイメージ化します。 (時間があれば)

# wget http://52.68.166.69 /Dockerfile

ファイルを任意のディレクトリにおいてください。

# docker build -t yourname/apache:0.1 .

イメージ名 タグ カレントディレクトリ

# docker images

作成したイメージがあることを確認してください。

97

時間次第で実施

Page 98: 8a1#19[はじめてのdocker] 公開版

Hands on.

【レッスン17】 Dockerfileで作ったイメージを立ち上げてみます。 # docker run -d -p 80:80 yourname/apache:0.1

98

イメージ名 タグ デタッチ

ホスト側のポート80を、コンテナの80に転送

# http://<IPADDR> に対して、ブラウザアクセスをしてみましょう

時間次第で実施

Page 99: 8a1#19[はじめてのdocker] 公開版

Fin

他にも紹介しきれてない色々なコマンド等がありますが、 https://docs.docker.com/reference/commandline/cli/ 公式のリファレンスが丁寧なので見てみると分かりやすいです。 あと –-help を使うと、その次を教えてくれたりもします。 例) docker run –-help など 色々とトライしてみてください!

99

Page 100: 8a1#19[はじめてのdocker] 公開版

Fin

コンテナ技術はシステム全体のオーケストレーションという 課題は残りつつも、実用化に向けて注目の分野です。

他にもrktやLXDという新しい風の予感もありますが、

当面はDockerがその最前線にいるだろうと思われます。

100

https://coreos.com/blog/rocket/

Page 101: 8a1#19[はじめてのdocker] 公開版

Fin

ご質問は懇親会でざっくばらんに聞いてみてください。

私がビールで酔っぱらう前が良いと思います。

101

Page 102: 8a1#19[はじめてのdocker] 公開版

Fin

最後に、ささやかなCM。

102

Page 103: 8a1#19[はじめてのdocker] 公開版
Page 104: 8a1#19[はじめてのdocker] 公開版

Fin

ご清聴、ありがとうございました。

104