Docker 再入門 2016 update

1,247 views

Published on

2016年もDockerには様々な要素が新規開発や変更もされています。
基本的な事は過去資料のupdateとして、2016年の最新動向を踏まえて再入門の勉強会を再び開催します。

Docker 再入門 2016 update @長野県塩尻市
https://atnd.org/events/82852

Published in: Software
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,247
On SlideShare
0
From Embeds
0
Number of Embeds
606
Actions
Shares
0
Downloads
7
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Docker 再入門 2016 update

  1. 1. Docker 再入門 2016 update @長野県塩尻市 日時:2016年11月26日(土曜日) 会場:塩尻インキュベーションプラザ Twitterハッシュタグ #shiojiri-oss
  2. 2. 大原 慎一郎 ohhara@shiojiri.com (有)トラストネットワークス 長野県塩尻市 塩尻インキュベーションプラザ108号室 ITネットワークシステムやOSSシステムの設計構築開発保守 自己紹介 www.facebook.com/shiojiriosslabo  長野県塩尻市に活動拠点を置く、IT技術者有志による団体  「オープンな環境でオープンな活動を目指す」を合言葉に集う  CoderDojo Shiojiri 開催 小学生高学年向けRuby教室開催  IT技術関係の勉強会を開催 OSC東京イベントにブース参加
  3. 3. アジェンダ • Dockerとコンテナのおさらい • Docker Engine (インストールと環境構築) • Docker Hub • Docker Compose • Docker Machine • Docker Swarm(docker swarm mode) • その他のDockerプロジェクト
  4. 4. 前回の資料 • 2014年9月に塩尻でSOLA勉強会にて紹介。 • SlideShareにて公開しています。 • Docker入門 http://www.slideshare.net/ShinichiroOhhara/docker-39456836
  5. 5. Docker Engine 仮想化とコンテナ ハードウェア ホストOS ハイパーバイザー 仮想マシン 仮想マシン ゲストOS ゲストOS ハードウェア ホストOS(Linux Kernel) Bins/Libs AP1 Bins/Libs AP2 Bins/Libs AP1 Bins/Libs AP2
  6. 6. インストール方法 • Linux Kernel 3.10以降のLinux 64bit環境 • インストール方法 Dockerの公式インストール用スクリプト 最新のDocker Engineが利用出来ます。 $ curl -fsSL https://get.docker.com/ | sh
  7. 7. インストール方法 • インストール方法 – ディストリビューションの公式パッケージ利用 • 公式リポジトリを追加登録 • パッケージツールでインストール • 各ディストリビューションのパッケージシステムに依存 – バイナリファイルの直接利用 • 各OS用の公式バイナリファイルを手動で利用
  8. 8. WindowsやMacOSの場合 • VirtualBoxでLinuxを動作させて利用。 • 2014年の紹介時には手動で行っていました。 • 2015年にDocker Toolbox登場! Docker Docker-Machine Docker-Compose Kitematic Boot2Docker ISO VirtualBox
  9. 9. WindowsやMacOSの場合 ハードウェア ホストOS(Windows or MacOS) ハイパーバイザー(VirtualBox) 仮想マシン ゲストOS(Boot2Docker) Bins/Libs AP1 Bins/Libs AP2 Bins/Libs AP3
  10. 10. 2016年 Windowsの場合 • 2016年にDocker for Windows登場! Windows 10 Pro, Enterprise and Education OSネイティブのハイパーバイザー Hyper-V対応 VirtualBoxと共存不可 Docker Toolboxは削除 ホストOS側のPowerShellから透過的に利用 その他のWindowsではDocker Toolboxを利用 MicrosoftのWindowsコンテナ類とは別物
  11. 11. Docker for Windows ハードウェア ホストOS(64bit Windows 10 Pro) ハイパーバイザー(Hyper-V) 仮想マシン ゲストOS(Alpine Linux) Bins/Libs AP1 Bins/Libs AP2 Bins/Libs AP3
  12. 12. 2016年 MacOSの場合 • 2016年にDocker for Mac登場! macOS 10.10.3 Yosemite 以降 OSネイティブのハイパーバイザー Hypervisor Frameworkに対応 Docker用にxhyveベースのHyperKitを導入 VirtualBoxと共存可能 Docker Toolboxは削除 ホストOS側のターミナルから透過的に利用
  13. 13. Docker for Mac ハードウェア ホストOS(MacOS) ハイパーバイザー(Hypervisor Framework) 仮想マシン ゲストOS(Alpine Linux) Bins/Libs AP1 Bins/Libs AP2 Bins/Libs AP3
  14. 14. Docker Engineの動作確認 • インストールが完了したらCLIツールを実行 LinuxやMacOSはターミナルコマンドツール WindowsはPowerSehll • バージョン表示させてみます。 $ docker --version Docker version 1.12.3, build 6b644ec $ docker-compose --version docker-compose version 1.8.1, build 004ddae $ docker-machine --version docker-machine.exe version 0.8.2, build e18a919
  15. 15. Docker Engineの動作確認 • Hello Worldを表示させてみます。 $ docker run 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.
  16. 16. ローカルキャッシュ コンテナ・サービスの起動 Bins/Libs AP コンテナ・イメージ1 コンテナ・イメージ2 コンテナ・イメージ3 コンテナ・イメージ4 Docker Hub
  17. 17. コンテナ・イメージ OSのインストール パッケージインストール アプリケーション設定 アプリケーション実行 ベースのコンテナ パッケージインストール アプリケーション設定 アプリケーション実行 アプリケーション コンテナ 実行 従来のサービス構築 独自コンテナの サービス構築 公式コンテナの サービス構築 OSの設定
  18. 18. Dockerコンテナのサービス動作確認 • Webサーバーのサービスを実行してみます。 • Webブラウザで表示させてみます。 http://localhost $ docker run -d -p 80:80 --name webserver nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx ・・・中略・・・ Status: Downloaded newer image for nginx:latest
  19. 19. 複数のコンテナ連携 • 1つのサービスに1つのコンテナが基本 • アプリは複数のサービスで構成される。 フロントエンド:webサーバー バックエンド:データベースサーバー • コンテナ間をリンク連携
  20. 20. 複数のコンテナ連携 Bins/Libs Nginx Bins/Libs Nginx MySQL 複数のサービスを 含めたコンテナ Bins/Libs MySQL 単一のサービスのコンテナを リンク連携した場合
  21. 21. Docker Compose • Dockerコマンドはコンテナ単位で操作 • 複数のコンテナ構築と操作が面倒くさい! • まとめて管理出来ないか・・・ • 複数のコンテナ構成を管理する • YAML形式ファイルで設定 • プロジェクト単位で管理
  22. 22. WordPressを構築 • プロジェクト用に適当なディレクトリを作成 • 作成したディレクトリに移動する • YAML形式のプロジェクトファイルを作成する docker-compose.yml  https://docs.docker.com/compose/wordpress/ $ mkdir my_wordpress $ cd my_wordpress
  23. 23. WordPressを構築 • プロジェクトファイルをビルドします。 必要なイメージをDocker Hubからダウンロード イメージから各コンテナを起動 各コンテナは設定の通りに連携して構築 • WebブラウザでWordPress初期画面が表示出 来ます。 $ docker-compose up -d
  24. 24. Docker Compose • docker-compose ps  プロジェクトのコンテナの一覧表示  docker psコマンドと比較してみよう! • docker-compose stop  プロジェクトのコンテナの一括停止 • docker-compose rm  プロジェクトのコンテナの一括削除
  25. 25. 開発環境の構築 ローカルホストの場合 ホストOS側ターミナル ローカルホスト内の別の 仮想マシンホストの場合 ゲストOS(Alpine Linux) Bins/Libs AP Hyper-V,VirtualBox ホストOS側ターミナル ゲストOS(Boot2Docker) Bins/Libs AP Hyper-V,VirtualBox SSHリモート接続
  26. 26. 本番環境の構築 OS(AMI)イメージを選択 EC2インスタンス起動 EC2インスタンスにSSH接続 OSの設定 通常構築する場合 EC2インスタンス設定 パッケージインストール アプリケーション設定 アプリケーション実行 OS(AMI)イメージを選択 EC2インスタンス起動 EC2インスタンスにSSH接続 OSの設定 Dockerで構築する場合? EC2インスタンス設定 Docker Engineインストール アプリケーション・コンテナ実行
  27. 27. Docker Machine • リモートホストに自動でデプロイ • ドライバーで様々なクラウドサービスに対応 • ローカル側の別VM(Boot2Docker)も可能 Hyper-V VirtualBox • SSH認証設定を自動化して隠匿 • ローカル側で操作が完結出来る
  28. 28. ローカルの別ホスト Docker Machine ローカルホスト Localhost AlpineLinux コンテナ コンテナ Hyper-V,VirtualBox Boot2Docker コンテナ コンテナ EC2インスタンス コンテナ コンテナ Linux(AMI) Hyper-V,xhyve IaaSクラウド(AWSなど)
  29. 29. Docker Machine • ローカル側で仮想マシン(VM)別ホストを作成 • Hyper-Vの場合 • VirtualBoxの場合 • 適当なドライバーを指定することで、default名 のVM(中はBoot2Docker)が作成出来る。 > docker-machine create --driver hyperv default $ docker-machine create --driver virtualbox default
  30. 30. Docker Machine • docker-machine ls  作成したリモートホストの一覧表示 • docker-machine ip ホスト名  指定したリモートホストのIPアドレス表示 • docker-machien ssh ホスト名  指定したリモートホストへsshログイン  普通にexitコマンドで抜け出る事が出来ます。
  31. 31. Docker Machine • docker-machine env ホスト名 デプロイ対象の環境変数を表示 元に戻す場合は-uオプション • デプロイ対象の変更を実行する時は、envで表 示された最終行のコマンドを別途実行します。 • ローカルホストのターミナルでdockerコマンドを 実行するとローカルホスト側ではなくリモートホ スト側にデプロイします。
  32. 32. ローカルの別ホスト Docker Machine ローカルホスト Localhost AlpineLinux コンテナ コンテナ Hyper-V,VirtualBox Boot2Docker コンテナ コンテナ Hyper-V,xhyve ローカル側のターミナルから直接デプロイ出来る! docker-machine -u docker-machine env
  33. 33. Docker Machine • 参加者の方で可能な方は実際に別ホストにデ プロイして体験してみましょう! • IaaSクラウド側の例としてAWSへのデプロイを ここで講師から実演してみます。
  34. 34. Docker Machine • リモートホストの後片付け方法 • docker-machine stop ホスト名  指定したリモートホストの停止 • docker-machine rm ホスト名  指定したリモートホストの削除
  35. 35. Docker Swarm • Dockerコンテナのクラスタ構築ツール • 別のプロダクトでしたが、Docker 1.12から Docker Engineに統合されました。 • Swarm modeに変更するだけで機能します。 • Managerと複数のWorkerで構成 • 透過ネットワークingressによる 冗長化と負荷分散
  36. 36. Docker Swarm mode Bins/Libs Nginx Managerノード Bins/Libs Nginx Workerノード Bins/Libs Nginx Workerノード Bins/Libs Nginx Workerノード
  37. 37. Docker Swarm mode Bins/Libs Nginx Workerノード Bins/Libs Nginx Workerノード Bins/Libs Nginx Managerノード ingressオーバレイネットワーク
  38. 38. Docker Swarm mode • 別ホストを3個作成します。 • 区別しやすい適当なホスト名 • VirtualBoxの場合 • 作成した各ホストを一覧表示して確認 docker-machine ls $ docker-machine create -d virtualbox node1 $ docker-machine create -d virtualbox node2 $ docker-machine create -d virtualbox node3
  39. 39. Docker Swarm mode • Managerノードをホストに設定します。 • SSHログインしてSwarm modeに設定 • トークン付のコマンドが表示されるので、メモし て後でworkerノード登録に使用します。 • Swarm modeの状態確認 docker info docker node ls $ docker swarm init --advertise-addr 192.168.99.11
  40. 40. Docker Swarm mode • Workerノードをホストに設定します。 • SSHログインしてManagerノード登録時に表示 されたトークン付のコマンドを実行する。 • 残りのホストも同様に設定する。 • クラスタの全ノード状態をManagerノードにSSH ログインして確認する。 docker node ls
  41. 41. Docker Swarm mode • Dockerコンテナサービスをデプロイ • サービスの状態を確認する。 docker service ls docker service inspect --pretty helloworld docker service ps helloworld docker ps $ docker service create --replicas 1 --name helloworld ¥ alpine ping docker.com
  42. 42. Docker Swarm mode • Workerノードへコンテナをスケール • 3個のノードで5つのコンテナが実行されます。 • サービスの状態を確認する。 docker service ps helloworld docker ps $ docker service scale helloworld=5
  43. 43. Docker Swarm mode • 複数ノードの複数コンテナを一括削除 • サービスの状態を確認する。 docker service ps helloworld docker ps docker service inspect helloworld $ docker service rm helloworld
  44. 44. その他のDockerプロジェクト • Docker for AWS/Azure AWSやAzureの機能をDocker Swarmで利用 • Docker Cloud パブリッククラウドとDocker Hubの統合管理 時間単位の課金 • Docker Datacenter オンプレミスのデータセンター用

×