Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dockerでデプロイ
大城 聖也
自己紹介
株式会社シーエ・アドバンス
大城 聖也@おでん
2
業務内容
アメーバサービスの
監視システム
3
業務内容
オペレーターの分析レポート
4
普段は
JavaScript書いてます
5
たまに
Ruby(rails)とPHP
書いてます
6
今日話すこと
Docker Swarm mode
docker stack deploy
上記を使ったデプロイ方法
7
前提
Dockerってなに?とか
docker swarmってなに?とか
docker composeってなに?とか
8
知らない人
発表聞いて興味持ったら
懇親会で聞く or 調べて見てください
9
Docker Swarm modeについて
docker 1.12から入った機能
クラスタがかんたんに作れる
10
Docker Swarmとの比較
Swarm mode Docker Swarm
クラスタの管理 docker node コマンド Swarmマネージャーがノードを管理
クラスタ上のコンテナ操作 docker service コマンド Swar...
リソースプール
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker Swarm概略図
Swarm
マネージャー KVS
...
リソースプール
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker Swarm概略図
監視
Swarm
マネージャー K...
リソースプール
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker Swarm概略図
監視
Swarm
マネージャー K...
リソースプール
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker
デーモン
ワーカー
Swarm
ノード
Docker Swarm概略図
監視
Swarm
マネージャー K...
リソースプール
Docker Swarm mode概略図
Docker
デーモン
マネージャー
リーダー
KVS
Docker
デーモン
ワーカー
Docker
デーモン
ワーカー
Docker
デーモン
ワーカー
命令・監視
16
リソースプール
Docker Swarm mode概略図
Docker
デーモン
マネージャー
リーダー
KVS
Docker
デーモン
ワーカー
Docker
デーモン
ワーカー
Docker
デーモン
ワーカー
Docker
デーモン
マネ...
Docker Swarmとの比較
Swarm mode Docker Swarm
クラスタの管理 docker node コマンド Swarmマネージャーがノードを管理
クラスタ上のコンテナ操作 docker service コマンド Swar...
コンテナを実行する方法
変わりました
19
コンテナを実行するには
Serviceを定義する
20
使い方
例えば
nginxコンテナを2つ実行
ポートは80番を公開する
場合
21
Nginx(Port:80)
コンテナ
ホスト
192.168.99.100
Nginx(Port:80)
コンテナ
Serviceについて
http://192.168.99.100
22
Serviceについて
今まで同じポートに
複数コンテナ紐付けられなかったはず!
あとから起動するコンテナ
立ち上がらないはず!!
23
Nginx(Port:80)
コンテナ
ホスト
192.168.99.100
Nginx(Port:80)
コンテナ
Serviceについて
http://192.168.99.100
24
$ docker service create 
--replicas 2 
-p 80:80 
nginx:latest
Serviceコマンド
25
Nginx(Port:80)
コンテナ
ホスト
192.168.99.100
Nginx(Port:80)
コンテナ
Serviceについて
http://192.168.99.100
26
Ingressについて
Serviceでなんで同じポートに
複数コンテナを紐付けられるか?
27
Ingressについて
Ingress
(オーバーレイネットワーク )
http://192.168.99.100
ホスト
192.168.99.100
Nginx
(Port:80)
コンテナ
Nginx
(Port:80)
コンテナ
Ser...
Ingressについて
Ingress(オーバーレイネットワーク )
ホスト
192.168.99.102
http://192.168.99.100 http://192.168.99.101 http://192.168.99.102
Ng...
Ingressについて
Ingress(オーバーレイネットワーク )
ホスト
192.168.99.102
http://192.168.99.100 http://192.168.99.101 http://192.168.99.102
Ng...
1台でもSwarmモード使う?
ロードバランサー使用可能
ローリングアップデート可能
31
Docker Swarm modeについて
下記で色々お試してます
Docker swarmモードを試してみた
32
docker stack deployについて
docker 1.13から入った機能
docker-compose.ymlに
デプロイ設定が記述できる
33
追加された設定
デプロイするコンテナ数
同時に更新かけるコンテナの数
次の更新を行うまでの待ち時間
リスタートのポリシー: 失敗した時
34
検討中の構成
Swarm modeでクラスタ化
stackでservice定義管理
常時2つのappコンテナ立てておいて
ローリングアップデートする
35
検討中の構成図
ホスト 192.168.99.100
App Service (Port:80)
App コンテナApp コンテナ
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
36
Swarmモード初期化
$ docker swarm init 
--advertise-addr 
192.168.99.100
37
構成図
ホスト 192.168.99.100
Ingress(オーバーレイネットワーク )
ブラウザ
38
設定ファイル
version: '3' # フォーマットのバージョン
services: # サービス定義
app: # appサービス
image: my-registry/app:latest # 使用するイメージ名
ports: # 外と...
デプロイコマンド
$ docker stack deploy 
--compose-file docker-compose.yml 
app
40
こうなる
ホスト 192.168.99.100
App Service (Port:80)
App コンテナApp コンテナ
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
41
修正加えてビルド&プッシュ
$ docker build -t my-registry/app:v1.1 .
$ docker push my-registry/app:v1.1
42
設定ファイル
version: '3' # フォーマットのバージョン
services: # サービス定義
app: # appサービス
image: my-registry/app:v1.1 # 使用するイメージ名
ports: # 外とつな...
デプロイ
$ docker stack deploy 
--compose-file docker-compose.yml 
app
使用するイメージのタグを変えてから
44
ローリングアップデート開始
ホスト 192.168.99.100
App Service (Port:80)
App コンテナApp コンテナ
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
45
1つ目のコンテナの更新
ホスト 192.168.99.100
App Service (Port:80)
App コンテナ
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
46
1つ目のコンテナ交換完了
ホスト 192.168.99.100
App Service (Port:80)
App コンテナApp コンテナv1.1
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network...
ホスト 192.168.99.100
10秒待ち
ブラウザ
App Service (Port:80)
App コンテナ
Ingress(オーバーレイネットワーク )
新App コンテナ
ホスト 192.168.99.100
App Servi...
次のコンテナ更新
ホスト 192.168.99.100
App Service (Port:80)
App コンテナv1.1
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
49
デプロイの完了
ホスト 192.168.99.100
App Service (Port:80)
App コンテナv1.1App コンテナv1.1
Ingress(オーバーレイネットワーク )
ブラウザ
App Service Network
...
サンプル紹介
https://github.com/togana/sam
ple-docker-deploy
51
Docker Swarm mode まとめ
Docker Swarmより構築に必要なもの減少!
LoadBalancerが内包された!
ローリングアップデートが可能に!
Serviceというコンテナ実行の定義ができた!
52
docker stack deploy まとめ
Stackにデプロイ定義が書ける!
docker-compose.ymlがほぼそのまま使える!
buildが使えなくなりimageのみになった!
(↑docker stack deployをすると...
まとめ
Dockerの進化がすごい!
ecsとかkubernetesとかが使えない場合でも
デプロイやりやすくなっている!
54
Upcoming SlideShare
Loading in …5
×

Dockerでデプロイ

791 views

Published on

Docker Swarm mode + docker stack deploy を用いたデプロイ方法の検討

Published in: Internet
  • Be the first to comment

Dockerでデプロイ

  1. 1. Dockerでデプロイ 大城 聖也
  2. 2. 自己紹介 株式会社シーエ・アドバンス 大城 聖也@おでん 2
  3. 3. 業務内容 アメーバサービスの 監視システム 3
  4. 4. 業務内容 オペレーターの分析レポート 4
  5. 5. 普段は JavaScript書いてます 5
  6. 6. たまに Ruby(rails)とPHP 書いてます 6
  7. 7. 今日話すこと Docker Swarm mode docker stack deploy 上記を使ったデプロイ方法 7
  8. 8. 前提 Dockerってなに?とか docker swarmってなに?とか docker composeってなに?とか 8
  9. 9. 知らない人 発表聞いて興味持ったら 懇親会で聞く or 調べて見てください 9
  10. 10. Docker Swarm modeについて docker 1.12から入った機能 クラスタがかんたんに作れる 10
  11. 11. Docker Swarmとの比較 Swarm mode Docker Swarm クラスタの管理 docker node コマンド Swarmマネージャーがノードを管理 クラスタ上のコンテナ操作 docker service コマンド SwarmマネージャーのAPIにアクセス Swarmマネージャーの追加 不要 必要 KVSのセットアップ 不要 必要 クラスタ間の通信の暗号化 デフォルト有効 別途設定が必要 11
  12. 12. リソースプール Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker Swarm概略図 Swarm マネージャー KVS ノード管理 12
  13. 13. リソースプール Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker Swarm概略図 監視 Swarm マネージャー KVS ノード管理 13
  14. 14. リソースプール Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker Swarm概略図 監視 Swarm マネージャー KVS ノード管理 情報参照 14
  15. 15. リソースプール Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker デーモン ワーカー Swarm ノード Docker Swarm概略図 監視 Swarm マネージャー KVS 命令 ノード管理 情報参照 15
  16. 16. リソースプール Docker Swarm mode概略図 Docker デーモン マネージャー リーダー KVS Docker デーモン ワーカー Docker デーモン ワーカー Docker デーモン ワーカー 命令・監視 16
  17. 17. リソースプール Docker Swarm mode概略図 Docker デーモン マネージャー リーダー KVS Docker デーモン ワーカー Docker デーモン ワーカー Docker デーモン ワーカー Docker デーモン マネージャー KVS Docker デーモン マネージャー KVS 複製 複製 命令・監視 17
  18. 18. Docker Swarmとの比較 Swarm mode Docker Swarm クラスタの管理 docker node コマンド Swarmマネージャーがノードを管理 クラスタ上のコンテナ操作 docker service コマンド SwarmマネージャーのAPIにアクセス Swarmマネージャーの追加 不要 必要 KVSのセットアップ 不要 必要 クラスタ間の通信の暗号化 デフォルト有効 別途設定が必要 18
  19. 19. コンテナを実行する方法 変わりました 19
  20. 20. コンテナを実行するには Serviceを定義する 20
  21. 21. 使い方 例えば nginxコンテナを2つ実行 ポートは80番を公開する 場合 21
  22. 22. Nginx(Port:80) コンテナ ホスト 192.168.99.100 Nginx(Port:80) コンテナ Serviceについて http://192.168.99.100 22
  23. 23. Serviceについて 今まで同じポートに 複数コンテナ紐付けられなかったはず! あとから起動するコンテナ 立ち上がらないはず!! 23
  24. 24. Nginx(Port:80) コンテナ ホスト 192.168.99.100 Nginx(Port:80) コンテナ Serviceについて http://192.168.99.100 24
  25. 25. $ docker service create --replicas 2 -p 80:80 nginx:latest Serviceコマンド 25
  26. 26. Nginx(Port:80) コンテナ ホスト 192.168.99.100 Nginx(Port:80) コンテナ Serviceについて http://192.168.99.100 26
  27. 27. Ingressについて Serviceでなんで同じポートに 複数コンテナを紐付けられるか? 27
  28. 28. Ingressについて Ingress (オーバーレイネットワーク ) http://192.168.99.100 ホスト 192.168.99.100 Nginx (Port:80) コンテナ Nginx (Port:80) コンテナ Serviceのネットワーク(Port: 80) 28
  29. 29. Ingressについて Ingress(オーバーレイネットワーク ) ホスト 192.168.99.102 http://192.168.99.100 http://192.168.99.101 http://192.168.99.102 Nginx コンテナ Nginx コンテナ ホスト 192.168.99.101 Nginx コンテナ ホスト 192.168.99.100 Nginx コンテナ ServiceNetwork (Port: 80) 29
  30. 30. Ingressについて Ingress(オーバーレイネットワーク ) ホスト 192.168.99.102 http://192.168.99.100 http://192.168.99.101 http://192.168.99.102 Nginx コンテナ Nginx コンテナ ホスト 192.168.99.101 Nginx コンテナ ホスト 192.168.99.100 ServiceNetwork (Port: 80) 30
  31. 31. 1台でもSwarmモード使う? ロードバランサー使用可能 ローリングアップデート可能 31
  32. 32. Docker Swarm modeについて 下記で色々お試してます Docker swarmモードを試してみた 32
  33. 33. docker stack deployについて docker 1.13から入った機能 docker-compose.ymlに デプロイ設定が記述できる 33
  34. 34. 追加された設定 デプロイするコンテナ数 同時に更新かけるコンテナの数 次の更新を行うまでの待ち時間 リスタートのポリシー: 失敗した時 34
  35. 35. 検討中の構成 Swarm modeでクラスタ化 stackでservice定義管理 常時2つのappコンテナ立てておいて ローリングアップデートする 35
  36. 36. 検討中の構成図 ホスト 192.168.99.100 App Service (Port:80) App コンテナApp コンテナ Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 36
  37. 37. Swarmモード初期化 $ docker swarm init --advertise-addr 192.168.99.100 37
  38. 38. 構成図 ホスト 192.168.99.100 Ingress(オーバーレイネットワーク ) ブラウザ 38
  39. 39. 設定ファイル version: '3' # フォーマットのバージョン services: # サービス定義 app: # appサービス image: my-registry/app:latest # 使用するイメージ名 ports: # 外とつなぐポート設定 - '80:80' # 外部に晒すポート:コンテナのポート deploy: # stack deployの設定 replicas: 2 # コンテナ数 update_config: # アップデートの設定 parallelism: 1 # 同時に更新かけるコンテナの数 delay: 10s # 次の更新を行うまでの待ち時間 restart_policy: # リスタートのポリシー condition: on-failure # 失敗した時 docker-compose.yml 39
  40. 40. デプロイコマンド $ docker stack deploy --compose-file docker-compose.yml app 40
  41. 41. こうなる ホスト 192.168.99.100 App Service (Port:80) App コンテナApp コンテナ Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 41
  42. 42. 修正加えてビルド&プッシュ $ docker build -t my-registry/app:v1.1 . $ docker push my-registry/app:v1.1 42
  43. 43. 設定ファイル version: '3' # フォーマットのバージョン services: # サービス定義 app: # appサービス image: my-registry/app:v1.1 # 使用するイメージ名 ports: # 外とつなぐポート設定 - '80:80' # 外部に晒すポート:コンテナのポート deploy: # stack deployの設定 replicas: 2 # コンテナ数 update_config: # アップデートの設定 parallelism: 1 # 同時に更新かけるコンテナの数 delay: 10s # 次の更新を行うまでの待ち時間 restart_policy: # リスタートのポリシー condition: on-failure # 失敗した時 docker-compose.yml 43
  44. 44. デプロイ $ docker stack deploy --compose-file docker-compose.yml app 使用するイメージのタグを変えてから 44
  45. 45. ローリングアップデート開始 ホスト 192.168.99.100 App Service (Port:80) App コンテナApp コンテナ Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 45
  46. 46. 1つ目のコンテナの更新 ホスト 192.168.99.100 App Service (Port:80) App コンテナ Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 46
  47. 47. 1つ目のコンテナ交換完了 ホスト 192.168.99.100 App Service (Port:80) App コンテナApp コンテナv1.1 Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 47
  48. 48. ホスト 192.168.99.100 10秒待ち ブラウザ App Service (Port:80) App コンテナ Ingress(オーバーレイネットワーク ) 新App コンテナ ホスト 192.168.99.100 App Service (Port:80) App コンテナApp コンテナv1.1 Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 48
  49. 49. 次のコンテナ更新 ホスト 192.168.99.100 App Service (Port:80) App コンテナv1.1 Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 49
  50. 50. デプロイの完了 ホスト 192.168.99.100 App Service (Port:80) App コンテナv1.1App コンテナv1.1 Ingress(オーバーレイネットワーク ) ブラウザ App Service Network 50
  51. 51. サンプル紹介 https://github.com/togana/sam ple-docker-deploy 51
  52. 52. Docker Swarm mode まとめ Docker Swarmより構築に必要なもの減少! LoadBalancerが内包された! ローリングアップデートが可能に! Serviceというコンテナ実行の定義ができた! 52
  53. 53. docker stack deploy まとめ Stackにデプロイ定義が書ける! docker-compose.ymlがほぼそのまま使える! buildが使えなくなりimageのみになった! (↑docker stack deployをするときのみ) 53
  54. 54. まとめ Dockerの進化がすごい! ecsとかkubernetesとかが使えない場合でも デプロイやりやすくなっている! 54

×