More Related Content Similar to 8a1#19[はじめてのdocker] 公開版 (20) 8a1#19[はじめてのdocker] 公開版1. April 24 , 2015
AP Communications Co., Ltd.
System Infrastructure Engineering Div.
Nobuchika Kamon
1
8. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
8
9. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
9
11. What is Docker ?
元々は、dotCloudという会社(クラウドサービス)が、自社のPaaS環境を
実現する為につくったツールでした。
しかし今は、dotCloudは売却して、Docker,Inc になりました。
「Docker」 Linux上で動作するコンテナ型の仮想化ソフトウェア
11
ここは本日限り
12. 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
13. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
このあたりの説明は後ほど。
基本的な機能はLinuxが元々持ってる機能を利用してます。
13
15. What is Docker ?
Server
HOST OS
Hypervisor
GuestOS GuestOS
Bins/Libs
App A
Bins/Libs
App B
Virtual Machines
それぞれのアプリを動かすための
実行環境として、わざわざ別の
ゲストOSを用意。
15
16. What is Docker ?
Server
HOST OS
Hypervisor
GuestOS GuestOS
Bins/Libs
App A
Bins/Libs
App B
Virtual Machines
ゲストOSだけではなく、
HyperVisorという謎の物体もある
16
17. What is Docker ?
Server
HOST OS
Docker Engine
Bins/Libs
App A
Bins/Libs
App B
Docker
ゲストOSいらず。
いきなりコンテナとしてアプリ実
行環境をポコポコ作れる。
ハイパーバイザーもいらない。
17
18. What is Docker ?
VirtualMachine vs Docker
Virtual Machine Docker
起動 数分は必要 1秒くらい
メモリ OS本体分の確保が必要 プロセスの分だけ
OSの自由度 OSそのものなので自由にできる 母艦ホストに依存
ディスク容量 OS分は必要 コンテナで使う分だけ
18
20. What is Docker ?
ひとつの土地にひとつのOSが入っている。一軒家構成。
= 従来の物理構成
Traditional Architecture
20
21. What is Docker ?
それぞれの部屋に風呂とかキッチンは必要だけど、
敷地はひとつの “マンション” で良くね?
= 仮想化環境
Virtual Architecture
21
22. What is Docker ?
つーか、玄関も風呂もキッチンも全部ひとつで良いよね。
要は最低限の自分の環境があればいいわ。
ファシリティ共通の ”シェアハウス” でいいよね。
= Docker 環境
22
23. What is Docker ?
自由度:
一軒家 > マンション > シェアハウス
コストの高さ:
一軒家 > マンション > シェアハウス
引っ越しの大変さ:
一軒家 > マンション > シェアハウス
23
24. What is Docker ?
何がベストかは用途次第ではありますが、
軽くて独立したアプリ実行環境を作れるという
のがDockerの強みです。
24
25. What is Docker ?
またDockerfileによる
“Infrastructure as a code” の実現や、
ポータビリティの高さもその強みです。
25
26. 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
27. What is Docker ?
Dockerfileの例
# docker build -t kamon/mysql:0.1 .
Buildオプションで、イメージを作る。
―t でイメージ名 kamon/mysql、タグ名を0.1とする。
んで、カレントディレクトリにあるDockerfileを指定。
27
28. What is Docker ?
要するに、書いておくとその通りに再現される
イメージのレシピ的なものを持っておけますよと。
そんな話です。
28
29. What is Docker ?
なおイメージ自体もExportして、
他の環境に持ってくことができます。
DockerイメージはVMを移動するより
はるかに軽量ですが、
データ以外はファイルにして都度実行の
方が当然軽いです。でも時間はかかるけど。
29
31. What is Docker ?
これからご説明するものは、
Linux自体に実装されている機能です。
個々の詳細は割愛しますが、
ふーんこういうふうなもんなのねくらいに
見ていただければと思います。
31
32. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
32
33. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
33
34. What is Docker ?
Server
HOST OS
Docker Engine
Bins/Libs
App A
Bins/Libs
App B
Namespaces -プロセスの隔離-
×
それぞれのコンテナ間は隔離されている。
34
35. What is Docker ?
Namespaces -プロセスの隔離-
それぞれの超概要:
○ PID → それぞれのコンテナで独立したPID
○ MNT → 各空間で行ったマウント操作が他に影響しない
○ IPC → プロセス間通信(IPC)を独立させることができる
○ UTS → ホスト名、ドメイン名をそれぞれ持つことができる
○ NET → IPアドレス、ルーティングテーブルとかを独立
○ USER → いまのDockerでは使えない
まぁ、あんまり意識しないですけど、実際。
35
36. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
36
37. What is Docker ?
例えば、
CPUやメモリの使用量を制限することができます。
docker run -c 256 -m 512m hoge /bin/bash
-c :CPUの相対的な資料量
-m : Memory使用上限
37
38. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
38
39. What is Docker ?
UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)
https://docs.docker.com/terms/layer/
39
40. What is Docker ?
UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)
Write
https://docs.docker.com/terms/layer/
40
41. What is Docker ?
UNION Filesystem. (aufs,btrfs,devicemapper,vfs,overlayfs)
Read
https://docs.docker.com/terms/layer/
41
42. What is Docker ?
○ Namespaces
○ cgroups
○ Storage
○ Networking
○ Security
42
43. What is Docker ?
仮想ブリッジ
iptables
SElinux
Veth など
などが使われてます(詳細はハンズオンにて)
まぁこんなんがありますよ、と。
43
47. What is Docker ?
ざっくりいうと、インストールして使うソフトウェア
としてのDockerは “Docker Engine”。
それとは別にイメージを共有するためのレポジ
トリとして “Docker hub” があります。
47
50. What is Docker ?
ここまでのまとめ。
○ Dockerの良いところ
-- VM技術との比較とDockerfile など
○ 使われてる要素技術
-- コンテナ隔離、リソース、FS など
○ Docker hubについて
50
51. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerのオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
51
62. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerのオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
62
74. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerのオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
★Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
74
76. ------------------< 薀 蓄 >------------------
1. Dockerってどんな技術?という概要
2. Dockerのオーケストレーションツールの紹介
3. 本番環境での実装例のご紹介
------------------< 休 憩 >------------------
※ないかも?EC2のアカウント情報を配ります。
------------------< 手 技 >------------------
★Dockerしてみるハンズオン
イメージ的にはだいたいトータルで1H~1.5Hくらいの予定です。
質疑は懇親会でやりましょー。適当に声かけてください。
Agenda.
76
79. 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
イメージ名
81. 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
83. 【レッスン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
84. 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
85. 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
88. 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
89. 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
90. 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
91. 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
92. # 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
指定したコンテナを消します。
93. # docker ps
Hands on.
【レッスン13】 docker inspectオプションを実行(準備)。
# docker run -it centos:centos6 /bin/bash
93
時間次第で実施
別ターミナルを上げてSSHで入って、以下のコマンドを打ってください。
その際、ログインしているコンテナから出ないこと。
コンテナの起動を確認
94. Hands on.
【レッスン14】 docker inspectオプションを実行。
# docker inspect bdebb1137587
# docker inspect --format="{{.NetworkSettings.IPAddress}}" bdebb1137587
個別のフィールドだけを抜き出すことも可能です。
作成時間、実行コマンド、IPアドレス、環境変数、イメージ、などなど・・・。
94
時間次第で実施
コンテナID
コンテナID
95. 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は空いてないので、実際は事前に以下のようなファイル編集が必要
97. Hands on.
【レッスン16】 Dockerfileでイメージ化します。 (時間があれば)
# wget http://52.68.166.69 /Dockerfile
ファイルを任意のディレクトリにおいてください。
# docker build -t yourname/apache:0.1 .
イメージ名 タグ カレントディレクトリ
# docker images
作成したイメージがあることを確認してください。
97
時間次第で実施