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の基本と応用~快適コンテナライフを実現するArukas~

7,533 views

Published on

OSC2016 長岡発表資料
2016年10月1日(土)

Published in: Technology
  • Be the first to comment

Dockerの基本と応用~快適コンテナライフを実現するArukas~

  1. 1. Docker の 基本と応用快適コンテナライフを実現する Arukas OSC 2016 Nagaoka 発表資料 2016年10月1日(土) さくらインターネット株式会社 Technology Evangelist 前佛雅人 @zembutsu
  2. 2. 2 前佛雅人(ぜんぶつまさひと) さくらインターネット株式会社 テクノロジーエバンジェリスト twitter: @zembutsu https://pocketstudio.net 富山県出身 個人的なテーマ: 農業しているから分かる 運用監視の最適化 (効率化・自動化)
  3. 3. 3 今日のお題
  4. 4. 4 Dockerの 基本と応用
  5. 5. 5 Dockerと Arukas
  6. 6. 6 その前に
  7. 7. 7 さくら インターネット
  8. 8. 8 さくらといえば、 カードキャプター… 大戦… うっ、頭が…
  9. 9. さくらインターネットをご存知ですか? 9
  10. 10. ブースに出展中です! 是非お越し下さい • Arukas デモ(Sphinx) • さくらの IoT Platform デモ(Zabbix) • サービスに関する質疑応答、お悩み相談 • 各種カタログ・シール配布 10
  11. 11. Docker+Arukas+Sphinx demo 11 /home/demo/sphinx-demo/arukas-image-build.sh Linux (CentOS 7.2) http://sphinx.docker.jp/ (59.106.220.93 ) +- /soruce/ ドキュメント +- /html/ HTML生成 Docker イメージ zembutsu/nginx-sample:latest Docker Hub エンドポイント https://<name>.arukascloud.io Arukas ユーザ
  12. 12. 12 補足資料: arukas-image-build.sh 処理の流れ: 1. sphinx-demo イメージに Sphinx のコンテンツを取り込む 2. ドキュメント生成後、Nginx イメージを作成してコンテンツを格納 3. Docker Hub のリポジトリにアップロード #!/bin/sh if [ -e html ]; then mv html archive/html.$(date +%s) fi docker build -t sphinx-demo . docker run sphinx-demo docker cp $(docker ps -lq):/opt/sphinx/build/html . docker rm $(docker ps -lq) docker build -t nginx-sample --file ./Dockerfile.nginx . docker tag nginx-sample zembutsu/nginx-sample:latest docker push zembutsu/nginx-sample:latest arukas-image-build.sh FROM ubuntu:16.04 RUN apt-get -y update && apt-get -y upgrade RUN apt-get -y install python-sphinx make ADD . /opt/sphinx WORKDIR /opt/sphinx CMD make html Dockerfile FROM nginx:latest ADD ./html /usr/share/nginx/html Dockerfile.nginx Ubuntu イメージが元 python-sphinx, make のセットアップ カレントをコンテナの /opt/sphinx へ 作業ディレクトリの指定 デフォルトで make html (コンテンツ生成) nginx イメージが元 ./html をコンテナ内のドキュメント・ルートへ html ディレクトリがあれば 日付付きバックアップ作成 sphinx-demo イメージ作成 sphinx-demo コンテナで HTML 生成 HTML をホストにコピーし、コンテナ削除 HTML を収容した nginx イメージを作成し Docker Hub にアップロード (push)
  13. 13. Sakura Iot Platform+Zabbix demo 13 Linux (CentOS 7.2) http://monitoring.pocketstudio.net / (59.106.214.205 ) WebSocket 受信スクリプト(Perl) ↓ zabbix_sender で Zabbix に送信 ↓ Zabbix でデータ収集・グラフ化・アクション 通信モジュール 3G/LTE 閉域網 WebSocket Arduino 温湿度センサ
  14. 14. 14
  15. 15. 15
  16. 16. 16 #!/usr/bin/perl use strict; use warnings; use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; $ua->websocket('wss://secure.sakura.ad.jp/iot-alpha/ws/xxxxxxxxxx/' => sub { (略) open(CMD, "zabbix_sender -z 127.0.0.1 -s ¥"Zabbix server¥" -k sakura_iot_temp -o $dat |"); print "Temp:",$dat,"¥n"; print "zabbix_sender -z 127.0.0.1 -s ¥"Zabbix server¥" -k sakura_iot_temp -o ",$dat,"¥n"; getWebSocket.pl 補足資料: WebSocketの取得とzabbix_sender 処理の流れ: 1. さくらの Iot Platform からの WebSocket を受信 2. データから、温度と湿度のデータを zabbix_sender で送信
  17. 17. 17
  18. 18. 18
  19. 19. 19 今日は Docker
  20. 20. 20
  21. 21. 第1部:Docker基本編 • Dockerとは? • なぜDockerなのか? • Dockerを支える基礎技術 • コンテナとイメージのライフサイクル • イメージ構築とDocker Hub • スケールとデプロイ時の課題 21
  22. 22. 22 突然ですが
  23. 23. 23 こんな課題 ありません?
  24. 24. こんな課題はありませんか? 時間の有効活用 仮想環境上でのサーバが起動するまでと、起動したあとの環境構築に時間がかかる 環境構築の手間と再現性の確保 手許の仮想環境上だと動くのに、クラウド上のサーバでは動作しない 仮想化やクラウドでサーバ作成は早くなったが、アプリケーションの設定には時間がかかる ソフトウェアの脆弱性が公開されると、安全を保つためにパッチの適用や環境再構築の必要性 リソースの有効活用 仮想環境を増やすと、使用ディスク容量が増える スケールしようと思うと、手間や時間がかかる 24
  25. 25. 25 インフラの 呪縛
  26. 26. 26 依存関係 システム基盤 • オペレーティング・システム [Linux|Unix|Windows] • ハードウェア、ネットワーク、ストレージ • 物理 or 仮想化 or クラウド • ミドルウェア • 各種プログラミング言語環境や、システム・ライブラリなど • バイナリやソースコード • 設定用パラメータ application dependencies Infrastructure アプリ
  27. 27. 27 俺の環境では 動く問題
  28. 28. 28 依存関係 システム基盤 Docker コンテナ Docker Engine (dockerd) • ミドルウェア • 各種プログラミング言語環境や、システム・ライブラリなど • バイナリやソースコード • 設定用パラメータ application dependencies Infrastructure • オペレーティング・システム [Linux|Unix|Windows] • ハードウェア、ネットワーク、ストレージ • 物理 or 仮想化 or クラウド アプリ
  29. 29. Docker アプリ開発・移動・実行のプラットフォーム 設計思想は「開発者が簡単にアプリケーションを動かす環境を作る」こと Dockerプロジェクト PyCon 2013 (PythonカンファレンスUS) 3月13日、 LT でオープンソース・プロジェクトを発表 [1] Solomon Hykes … dotcloud 創業者であり、 Docker プロジェクトを開始 32,000以上の GitHub Stars、40億 Docker コンテナのダウンロード、2,900人以上の貢献者 Dockr Inc. Docker におけるミッションとは、膨大な革新を生み出すツールを作る [2] Docker プロジェクトのオリジナル開発者、かつ、プロジェクトのスポンサー、商業サポート [1] “The future of Linux Containers” https://www.youtube.com/watch?v=wW9CAH9nSLs [2] “Our mission at Docker to create tools of mass innovation” http://www.docker.com/company/ 29
  30. 30. 30 開発環境でDockerを使用 アプリ環境の管理のため Dockerを使用 開発の機敏性を高めるため Dockerを使用 アプリのポータビリティを 達成するためにDockerを使用 プロダクション用の アプリでDocker使用 伝統的データベース 分散データベース ビッグデータ アプリ・サーバ ウェブ・アプリ ウェブ API Dockerの役割 開発環境周辺で Dockerの利用を計画 DevOps周辺で Dockerの利用を計画 “Docker provides the software supply chain with agility, control and portability for app development.” Dockerは開発のための機敏なソフトウェアのサプライチェーン、管理、ポータビリティを提供 [1] [1] The Evolution of the Modern Software Supply Chain - The Docker Survey, 2016 https://www.docker.com/survey-2016
  31. 31. なぜDockerが登場したのか? 31 暗黒^H^H物理時代 仮想化・クラウド時代 機 材 発 注 機 材 納 品 設 置 機 器 設 定 事 前 設 計 ク リ ッ ク 見 積 も り O S 設 定 環 境 構 築 試 験 運 用 開 始 試 験 利 用 開 始 … 事 前 設 計 ク リ ッ ク 試 験 利 用 開 始 … 事 前 設 計 ク リ ッ ク 試 験 用 運 用 始 … 開 発 環 境 ス テ ー ジ ン グ プ ロ ダ ク シ ョ ン 納品まで 1ヶ月も普通 ??「それ、ポチっとな」 2000年代初頭 やっと運用… 増える環境… もっと早く…
  32. 32. なぜDockerが登場したのか? 物理から仮想化への流れ 課題:デプロイ時間が遅い、コストがかかる、無駄なリソースが必要、スケールしづらい ハイパーバイザ型仮想化基盤の登場により、1台のサーバ上で複数の仮想マシンを動かせる 仮想化、そしてクラウド・コンピューティング 仮想化はリソースの共有が便利、スケールもしやすい 必要な時に、必要なだけのリソース増減を行いやすい 使った分だか支払う料金体系 新たな課題 たくさんのアプリケーションを動かすには、より多くのリソースの必要性 アプリケーションのポータビリティ(移植性)は保証されない 32
  33. 33. 現実世界の移動(輸送)課題 33 様々な 種類の 「モノ」 輸送の 手段は 色々 「モノ」にお互い の影響を与えず 運ぶには? (例:コーヒーと 香辛料を運ぶ) 迅速かつスムー ズに転送可能 か? (例:船から貨物 列車への積み 替え時)
  34. 34. 規格化によって解決 34 様々な 種類の 「モノ」 輸送の 手段は 色々 「モノ」にお互い の影響を与えず 運ぶには? (例:コーヒーと 香辛料を運ぶ) 迅速かつスムー ズに転送可能 か? (例:船から貨物 列車への積み 替え時) コンテナ規格により、事実上、 あらゆるモノを運ぶことができ、 かつ送り先には封印したままで 届ける 長距離輸送中の積み込み、荷下ろ し、積み重ね、移動が効率的であり、 様々な輸送手段に切り替え可能
  35. 35. ここからヒントを得たDockerコンテナ 35 エンジンは様々なものを軽 量・移動可能・自給自足的な コンテナにカプセル化できる 標準的なOS操作により、あらゆる ハードウェア・プラットフォームで 仮想的に一貫して実行可能 複数の 開発 スタック 複数の ハード ウェア 環境 サービスとアプ リケーションは 適切に通信可 能か? 迅速かつス ムーズに移 動可能か? 静的ウェブサイト ユーザDB ウェブ・フロントエンド キュー 解析DB 開発用 仮想マシン QAサーバ お客さま データセンタ パブリック クラウド プロダクション クラスタ コントリビュータ ノートPC
  36. 36. Docker が実現したこと 実行に必要なすべてをファイルシステムへ ソースコード、システム用ツール、システム用ライブラリなど、サーバのすべてを Docker イメージ化 Dockerfile を使った自動イメージ構築により、環境再現性を高める どのような環境でも動作を保証 Docker (Engine) が動く環境であれば、どこでもイメージをコンテナとして実行できる ソフトウェアを動かすために、環境構築やセットアップ作業が不要に 軽量 仮想化・クラウド環境と比べ、ホストOSを必要としないので、実行に必要なメモリ容量が少ない Docker イメージを複数のレイヤ(層)で共有するため、移動時の容量を少ないできる 36
  37. 37. 仮想マシン vs Docker ではない!! コンテナはプラットフォームに依存しない コンテナであれば、ある環境で構築したら、別の環境に迅速に移動可 Dockerイメージはソフトウェアのスケール(増減)を迅速かつ簡単に コンテナは OS とアプリを明確に役割分担 開発者はアプリケーション開発に集中、運用担当はデプロイ作業や運用に集中 仮想化は手軽に厳密なリソース管理が可能 仮想化システムの利用には業務手順の(大きな)変更を伴わない リソースの集約と管理がやりやすい 単純な比較は無意味 システム基盤としてのコンテナ導入や、コスト削減・省力化の視点でのコンテナ化は意味が無い 37
  38. 38. 38 仮想化 Docker コンテナ 独立した環境 仮想ハードウェア Dockerイメージ リソース集約 様々なOSが動作 Linux kernel 技術を活用 ※ Dockerコンテナは、アプリケーションが複数サーバにスケール する前提なら、環境の繰り返し作成・廃棄を高速に行える ※ スケールが必要なければ、必要なハードウェアや OS に あわせた環境を自由に構築できる • プロセスは namespace を通して PID 、 ファイルシステムなど、様々な名前空間を分離 プロセスを起動後、瞬時に分離かつリソースを制限可能 な点が仮想化と似て見えますが、実装や仕組みや操作 性は全く異なる。 • Control groups の機能を使い、1つ1つの コンテナ(Linuxのプロセス) に対して CPU、メモリ、 I/O の制限をかけられます 使い捨て型 (再利用性) 共通要素 • ハイパーバイザ型もしくはホスト型の仮想化 技術により仮想マシンを実行 • ハイパーバイザ技術により仮想マシンを実行 インフラのコード化 • Dockerfile や docker-compose.yml で 確実にアプリが動作する環境再現性を管理 • 階層化したイメージ・レイヤにファイルシステムや メタデータを格納 • 親子関係により、ディスク容量節約や移動高速化 • 厳密なリソース定義や確実な環境分離を 提供 環境の移行がスムーズ • サーバ管理する業務フローが確定しているの であれば、変更しなくてもシステムの移行や 集約をしやすいので、導入しやすい • Windows / Linux など選べる • 32bit / 64bit などアーキテクチャを選択できる 自由度の高いハードウェア・エミュレーションや 管理性を提供する。
  39. 39. Docker が適している環境 開発速度を加速 Docker コンテナ化は直ちに起動するので、セットアップや環境構築に時間を浪費しない 本来のアプリケーション開発、バグ修正、新機能追加に集中 開発者の想像力を強化 適切な言語環境の選定と構築が可能 ホスト環境上の OS やライブラリの整合性を考慮しなくてよい 環境の矛盾や依存の問題を撲滅 アプリケーションの依存関係や設定を、コンテナ(イメージ)に包み込める 「私の環境では動くけど、別の環境では動かない」問題は、もう起こらない 39
  40. 40. Docker プラットフォーム 40
  41. 41. 41
  42. 42. Docker ツール群 • Docker Engine • Docker Machine • Docker Swarm • Docker Compose • Docker Toolbox • Kitematic • Docker Hub • Docker Registry • Docker Content Trust • Docker Cloud 42
  43. 43. Docker を支える基礎技術 43
  44. 44. Docker イメージとレイヤの理解 Docker イメージは、レイヤを積み上げて参照 各レイヤが層(スタック)として積み上がり、1つに統合されたファイルシステムとして見える Docker 内部のストレージ・ドライバが、レイヤを積み重ねる役割を担う イメージは読み込み専用(ReadOnly) 各イメージ・レイヤは親子関係を持っている イメージ・レイヤは読み込み専用のため、変更を加えられない レイヤに対する変更情報(ファイルの追加・削除)は、子レイヤ側に記録 レイヤの利点は移動・共有しやすさ 各レイヤをファイルやコードの差分のように扱えるため、ネットワークを 通して共有する時、余分なトラフィックを使用せず、時間も節約できる 44
  45. 45. 45 CentOS ベース・イメージ ライブラリA 開発環境A 開発環境B アプリ 1 アプリ 2 アプリ 3 アプリ 4 ミドルウェアA ライブラリA’ 開発環境C テスト アプリ 5 アプリ 6 アプリ 7 アプリ 8 ミドルウェアA’
  46. 46. Docker イメージとコンテナの関係 コンテナはイメージに新しいレイヤを追加 薄い読み書き可能レイヤ(Thin R/W layer)は、コンテナ 実行時に自動的に割り当てられる イメージに対する変更情報(ファイルの追加・削除)は すべてこのコンテナ用レイヤ上に記録 このレイヤをコミット(commit)すると、新しいイメージを 作成できる ディスク領域の有効活用 コンテナの起動時には、追加のディスク容量がほぼ不要 なため、仮想化システムのように起動のたびにディスク 容量を確保する必要がない 46
  47. 47. Docker コンテナの実行とは コンテナの実行には、ローカルにイメージが必要 イメージ内にはコンテナを実行するための必要な全ての情報が入っている • ファイルシステム … 実行するコマンドや設定ファイルを含む • メタ情報 … 標準で何のコマンドを実行するか、何番ポートを開くか、ボリュームを使うかなど isolate[1]したプロセスを起動 Linux カーネルの namespace(名前空間)と cgroups 技術を使う • 特定のプロセスを他のコンテナと分けて動かす(ファイル、プロセス、ネットワーク、PID等) • 特定のプロセスに対するリソース(CPU、メモリ、I/O等)上限の設定 [1] isolate … 【他動】~をバラバラに分割する、分離させる、隔離する、離す、隔てる、孤立させる、絶縁する 47
  48. 48. コンテナ起動ごとにレイヤを自動作成 48
  49. 49. Docker と Linux カーネル Docker Engine はコンテナを移動・実行する Engine (dockerd) はデーモン(サーバ)であり、Linux カーネルとクライアントとの処理を仲介 Docker コンテナ ホスト OS のカーネル機能を使い、複数のルート・ファイルシステムを実行 コンテナは個々のリソース(CPU、メモリ、デバイス、ネットワーク)を持つ Docker コンテナの実行には Docker イメージが必要 コンテナの起動は、Linux カーネル技術を使う 名前空間(namespace)は、プロセス空間やファイルシステムなどを分離(isolation) コントロール・グループ(cgroup)は、CPU、メモリ、I/Oなどのリソース管理と制限 49
  50. 50. Docker に影響を与えた技術 chroot システム・コール 1979年 Version 7 Unix で実装が計画 特定のプロセスとその子プロセスに対して、見かけ上のルート・ディレクトリを指定 jail 2000年 FreeBSD 4.0 のリリース Linux Containers (LXC) 2008年 Linux kernel 2.6.24 で実装 50
  51. 51. 51 Docker Engine Linux Kernel ・namespaces ・cgroups ・capabilities … etc LXC libcontainer runC containerd v0.9~ v1.11~ Version 7 Unix chroot jail dockerd v1.12~ デーモン ライブラリ ランタイム docker daemon
  52. 52. Docker コンテナの操作 52 OS ( Linux ) 物理/仮想サーバ Docker エンジン ( dockerd デーモン ) Linux kernel コンテナ コンテナ コンテナ リモート API docker クライアント TCP あるいは Unix ソケットドメイン containerd Runtime: runC (OCI規格準拠) ・docker コマンド Linux, Mac OS X, Windows ・Kitematic (GUI) Mac OS X, Windows ・Docker Compose ・Docker Swarm
  53. 53. 53 コンテナのプロセス httpd PID 1 コンテナA コンテナB ruby PID 1 chris.rb PID 2 /sbin/init PID 1 containerd PID 5 httpd PID 6 ruby PID 7 chris.rb PID 8 alice PID 2 bob PID 3 PPID 1 PPID 1 PPID 4 PPID 5 PPID 5 PPID 7 PPID 1 dockerd PID 4
  54. 54. 54 コンテナのファイルシステム コンテナAの ファイルシステム … … コンテナBの ファイルシステム /etc /bin /etc /bin / / / /etc /data /data/ubuntu /data/centos /bin
  55. 55. 55 コンテナの実行 コンテナAの ファイルシステム … … コンテナBの ファイルシステム /etc (/data/ubuntu/etc) /bin (/data/ubuntu/bin) /etc (/data/centos/etc) /bin (/data/centos/bin) / / httpd PID 1 プロセスA プロセスB ruby PID 1 chris.rb PID 2 コンテナA コンテナB 名前空間の isolate ・プロセス ・ファイルシステム ・ネットワーク ・ホスト名 ・UID・GID リソース制限 ・CPU ・メモリ ・I/O ・ディスク・クォータ
  56. 56. Docker のセットアップ方法は2つ Docker プロジェクトのバイナリを使う方法 最も新しい現行バージョンの Docker を利用 セットアップ用のスクリプトが公開されており、作業が手軽 ディストリビューション用のバイナリを使う方法 ディストリビューションやコミュニティのサポートを受けられる 一般的にアップデートは遅れがち $ curl -sSL https://get.docker.com/ | sh または $ wget -qO- https://get.docker.com/ | sh セットアップ用スクリプトの実行 56
  57. 57. Docker コンテナのライフサイクル 57
  58. 58. コンテナを動かすには? 58 $ docker run hello-world hello-world コンテナの実行 $ docker run –i –t ubuntu bash ubuntu コンテナの実行 $ docker run –d –p 80:80 –v /data/:/usr/share/nginx/html nginx:latest nginx コンテナの実行
  59. 59. イメージを作るには? 59 $ docker commit [コンテナID] [イメージ名:タグ] docker commit コマンド $ docker build –t [イメージ名:タグ] . docker bulid コマンド $ docker build –t [イメージ名:タグ] . Dockerfile ファイル
  60. 60. 複数のイメージを使うには? Docker Compose ウェブ(アプリ)+DBのような環境で、docker-compose を使えば、同時に起動・管理 60 $ docker-compose up 実行例 version: '2' services: wordpress: image: wordpress ports: - 8080:80 environment: WORDPRESS_DB_PASSWORD: example mysql: image: mariadb environment: MYSQL_ROOT_PASSWORD: example docker-compose.yaml
  61. 61. イメージを配るには? レジストリ(registry)はDockerイメージの保管場所 Dockerコンテナを実行するにはイメージが必要 イメージが保管されている場所をレジストリと呼ぶ レジストリは3種類 Docker Hub はパブリック・レジストリと呼ばれ、誰でも利用可能 Registry はプライベートで使える最低限のレジストリ機能 Docker Trusted Registry (DTR) は商用サポート版のプライベート・レジストリの位置付け 61 レジストリ Docker Engine Dockerイメージ
  62. 62. レジストリとリポジトリの関係 レジストリ (registry) Dockerイメージ群のリポジトリ・サービスを表す イメージの登録・配布・共有機能を持つ 特に Docker Hub は公開レジストリであり、 各種イメージの公式リポジトリを所有 リポジトリ (repository) Dockerイメージを保管する場所を表す 62 Docker Hub (公開レジストリ・サービス) Ubuntu リポジトリ CentOS リポジトリ MySQL リポジトリ Latest 16.04 14.04 Latest 7 6 5 Latest 5.7 5.6 … … …
  63. 63. Docker Hub は公式リポジトリ Docker Hubは公開リポジトリ(public repository)の役割 クラウド上で提供されている Docker 公式のレジストリ・サービス コート・リポジトリとの連携や、イメージの自動構築、テスト、保管、送信が可能 Docker Cloud と連携したイメージのデプロイ機能 Docker ID を登録することで、誰でもイメージを公開・共有可能 パブリック・リポジトリとプライベート・リポジトリがある リポジトリは2種類 公式レポジトリ(/library または省略時)は、Docker 社がメンテナンスするリポジトリ群 通常のリポジトリ(/ユーザ名/)はユーザが作成したか、公式リポジトリから派生したリポジトリ群 リポジトリにはユーザ単位とグループ単位(コラボレーション機能)が存在 63
  64. 64. Docker Hub の登録 Docker Hub は無料で利用できます イメージの登録・共有・自動構築機能・グループ機能を使うためにアカウントが必要 登録に必要なのはメールアドレスのみ クレジットカード等の情報登録は不要(有償のプライベート・レジストリを複数使う場合のみ) オンライン・サインアップで登録 新規登録フォーム上でアカウント名・パスワード・メールの登録 登録メールアドレス宛に確認メールが届くので、クリックする 64
  65. 65. 結局、Dockerってどうなの? 開発・テスト・デプロイの速さに価値 開発環境の構築・プロビジョニングが Vagrant や仮想化環境より素早い 高いポータビリティ ローカル環境の Docker で動くものは、リモート上でも間違いなく動く Dockerfile があるため、だれでもゼロから環境を再現しやすい イメージ・レイヤの仕組みを導入しているため、ディスク容量やネットワーク転送を抑えられる 既存の環境を置き換えるものではない 仮想化やクラウドのようなインフラではなく、あくまでもアプリケーションを実行するプラットフォーム すべての要件を満たすものではない 「すべてを Docker で置き換えよう」という目的ありきでは、失敗するのでは? 65
  66. 66. ここまでの Docker のまとめ アプリを開発・移動・実行するプラットフォーム 始まりは「開発者が簡単にアプリケーションを動かす環境を作る」設計思想 ソフトウェア実行に必要なすべてを1つのパッケージにまとめ、どこでも移動、実行できる Linux カーネル技術を使用 名前空間とコントロール・グループを使う Docker イメージを使い、プロセスを隔離し、リソースを限定して Docker コンテナを起動する 実運用を支えるオーケストレーション・ツール群がある Docker 導入を目的化してはいけない(戒め) これまでのサーバ管理や運用における課題やフローを、改めて考慮する必要がある Docker は従来のインフラ面の課題を全て解決するものではない(銀の弾丸ではない) 66
  67. 67. Dockerについてより詳しく 67 Dockerイメージの理解とコンテナのライフサイクル http://www.slideshare.net/zembutsu/docker-images-containers-and-lifecycle
  68. 68. ここまで何か気になる所がありますか? ご参考:Docker 日本語ドキュメント http://docs.docker.jp/ 68
  69. 69. 第2部:Arukas活用編 2.1 Arukasの特長と機能 2.2 Arukasの後ろ側(Mesos+Marathon) 2.3 アプリケーションの作成とスケール 2.4 CLI操作 69
  70. 70. 70
  71. 71. 71 サービスの デプロイは?
  72. 72. Dockerで開発をしました、次は? プロダクション(本番環境)へのデプロイと課題 自分で運用環境を構築するのは大変であり手間(インフラ選定やセットアップ) Docker は開発を楽にするツールのはずなのに、運用視点だと手間になるケースがある 現時点の選択肢 • Docker Swarm、Apache Mesosなどのスケジューラと Docker を連携 • Docker 以外のアプローチのコンテナ管理ソフトウェアを使って、自分で構築 例:CoreOS+Kubernates, OpenShift, Rancher, Nomad • コンテナをデプロイするサービスを使う • Docker Cloud http://cloud.docker.com/ • Arukas http://arukas.io/ 72
  73. 73. 73 Arukas
  74. 74. https://arukas.io/ 74
  75. 75. Arukas アプリケーションをDocker最適化インフラで実行 75
  76. 76. Arukasのビジョン インフラサービス抽象化 開発者が自分自身で自由にサービス開発できる、専念できる環境を提供したい Arukasが中心 Arukasが、PaaS/SaaS/BaaS等の高レベルなサービスを提供する基盤に インテグレーション機能 サードパーティ製のクラウドサービスを、プラグインのように簡単に連携 ポータビリティを実現 世界標準のDockerコンテナ対応 データを保持せず、Arukasにロックインされない自由度の高い環境を提供 76
  77. 77. Arukasの特長 複数コンテナを管理 Dockerコンテナを直感的に操作できるコントロールパネル CLI (arukas コマンド)で、複数コンテナを簡単に管理 機動的なスケール機能 簡単・高速なスケールイン・アウト機能 必要なリソースに応じてオンデマンドにスケール 高品質な国産サービス Docker コンテナ用に独自設計した Arukas のサーバ設備と、 高品質なネットワーク回線を通し、自由度の高い Docker コンテナをすぐに運用開始 77
  78. 78. Arukasの利点 手軽、シンプル、簡単 DockerコンテナをArukasのホスティング環境上で簡単に実行 直感的なコントロールパネルの操作だけで、マネージドされた 環境上にプロビジョニング コンテナ実行にサーバ不要 アプリケーションとしてコンテナを実行すると、HTTPSに対応した エンドポイントを自動付与 サービスを実行するためにサーバやDocker環境は要りません 78
  79. 79. Arukasの機能 最速15秒デプロイ デプロイにかかる時間を短縮化 エンドポイント アプリ作成時、外部からコンテナにアクセス可能 な エンドポイントを自動発行 例:https://focused-golick-8853.arukascloud.io スケールアウト サービス規模にあわせ、オンデマンドにインスタ ンス数(アプリ数)を調整するだけでなく、負荷分 散を自動適用 コントロールパネル シンプルで直感的にアプリの作成・管理が可能 CLI でも操作 dockerコマンド風のarukasコマンドを使えば コントロールパネルにログインせずに操作可 例:arukas ps, arukas run, arukas rm … 79
  80. 80. 開発中機能 SSLの独自ドメイン名対応 信頼性が高く、安全なサービスを運用するために、独自のドメイン名に対応 Public API APIを通してアプリケーションの操作が可能に リソース・グラフ 稼働中アプリケーションのリソース状況をグラフ表示 80
  81. 81. ベータ期間中につき、無償提供 誰でも無償でご利用いただけます オンライン登録するだけで、すぐにご利用可能 登録はメールアドレスの認証かGitHub連携 ご利用のベータ環境 ベータテスト中は以下のシステム制限 • 各ユーザごとに最大10アプリまで同時作成 • 各アプリごとに最大10インスタンスまで実行 • 全アプリ合計30インスタンス アカウントの新規登録・ログイン画面 81
  82. 82. アカウント作成の流れ オンライン登録 1. サインアップ用ページを開く https://app.arukas.io/sign_up/ 2. ユーザ名、メールアドレス、パスワードを指定 3. 約款や個人情報の取り扱い同意にチェック 4. 【新規登録】をクリック ※GitHubアカウント連携も可 82
  83. 83. ログイン方法 メールアドレス認証 1. メールアドレスとパスワードを入力 2. 【ログイン】をクリック GitHub認証 1. 【GitHubでログイン】をクリック 83
  84. 84. Arukasのダッシュボード APIキー管理 ログアウト・ボタン アプリ操作パネル (起動、設定変更、編集、削除) 新規アプリ追加 アプリの状態表示 84
  85. 85. 新しいアプリの実行 dockercloud/hello-worldを起動 1. 【アプリ作成】ボタンをクリック 85
  86. 86. 2. アプリ作成に必要な各種情報を入力 “APP Name” はアプリ名です。 【 myapp 】と入力します。 “Image” は Docker イメージ名 を入力します。ここでは、 【 dockercloud/hello-world 】 を指定します。 “Endpoint” はブラウザ等でアク セス可能なエンド・ポイントです。 “任意名称.arukascloud.io” を指定するか、空白時はランダムな 名称が自動で割り当てられます。 “Port” はアプリが使用するポート 番号です。ここでは【 80 】を指定 します。 86
  87. 87. 3. 【アプリケーションを作成】ボタンをクリック 4. 画面が切り替わり、アプリ一覧に「myapp」が表示されるが停止状態 87
  88. 88. 5. アプリの【起動】ボタンをクリック 6. 起動確認で【OK】をクリック 7. アプリが起動するまで待つ 約1分でアイコンがオレンジ色(デプロイ中)から緑色(実行中)に変化 88
  89. 89. 8. アプリ名【myapp】のリンクをクリックし、設定情報の確認 9. 詳細画面で、アプリの登録情報や、エンドポイントURLを確認 89
  90. 90. アプリのスケールと負荷分散 エンドポイントの負荷分散は自動設定 オンデマンドでアプリのインスタンス数を増減可能 スケールに応じて、アプリ側ポートに対する負荷分散(ロードバランサ)設定が自動で有効化 負荷分散方式は最小セッション(least connection)方式 90
  91. 91. インスタンス数の変更 1. アプリの【編集】ボタンをクリック 2. インスタンス数を変更し、【保存】ボタンをクリック ここではインスタンス数を 【3】にしています 91
  92. 92. 3. 設定してしばらくすると自動的にインスタンス数が増え、アプリのポートも増える インスタンス数が3になり ポート数も3に この状態でブラウザからエンドポイントにアクセス すると、ページを再読み込みしなおすたびにホスト 名の表示が変わるため、負荷分散していることが 分かる 負荷分散は最小セッション方式のため、ブラウザの 再読み込みを何度か行う必要がある場合も ホスト名が表示の たびに変わります 92
  93. 93. アプリケーションの停止と削除 アプリ停止 【停止】ボタンをクリックし、実行中アプリケーションを停止 停止時にはアプリケーション内のデータを保存しないので、操作時は注意 アプリ削除 【削除】ボタンをクリックし、アプリ登録を削除 93
  94. 94. Arukas CLI コマンドライン上でArukasを操作 ArukasのAPI(トークンと秘密鍵)を使い、ブラウザにログインしなくてもアプリを操作できる dockerコマンドに近いコマンドライン体系 API鍵はアカウントごとにコントロールパネル上で確認可能 CLI入手方法 asukas CLI はバイナリまたはDockerイメージで配布 バイナリはLinux、Mac OS X、Windowsに対応 • バイナリ https://github.com/arukasio/cli/releases/ • Dockerイメージ https://hub.docker.com/r/arukasio/arukas/ 94
  95. 95. Linux版クライアントのセットアップ バイナリを展開する方法 GitHubから圧縮ファイルを取得し、unzipの後にパスが通った場所にファイルを置く $ wget -O arukas_v0.1.2_linux_amd64.zip ¥ https://github.com/arukasio/cli/releases/download/v0.1.2/arukas_v0.1.2_linux_amd64.zip $ unzip arukas_v0.1.2_linux_amd64.zip $ sudo mv ./arukas /usr/local/bin/arukas コマンドラインでのバイナリ・セットアップ例 $ arukas version v0.1.2 バージョン番号の表示 95
  96. 96. 初期設定 API鍵の取得 あらかじめArukasコントロールパネルからAPIを取得しておく必要 設定ファイルの作成または環境変数の宣言 設定ファイル ~/.env にAPI鍵とトークンを記述するか、コマンドラインで環境変数を宣言する必要 ARUKAS_JSON_API_TOKEN=<APIトークン> ARUKAS_JSON_API_SECRET=<APIシークレット> ~/.env ファイルの例 $ export ARUKAS_JSON_API_TOKEN=<APIトークン> $ export ARUKAS_JSON_API_SECRET=<APIシークレット> シェル上のコマンド実行例 96
  97. 97. CLIでアプリ起動 arukas runコマンド 「--name=」オプションを使うと、任意のアプリケーション名を指定可 この例ではエンドポイント「https://focused-newton-2249.arukascloud.io/」が自動作成され、 暫く待つと、STATUSが「running」に変わり、ブラウザから「Hello world!」の表示を確認できる $ arukas run --instances=1 ¥ ← インスタンス数「1」 --mem=256 ¥ ← メモリ「256」MB --ports=80:tcp ¥ ← アプリケーション公開ポート「80:tcp」 dockercloud/hello-world ← 実行する Docker イメージ名 hello-world 実行例 ID IMAGE CREATED STATUS NAME ENDPOINT 92fdc317-680f-4727-9cd1-c6dfb22467f1 dockercloud/hello-world 2016-09- 21T11:21:13.368+09:00 stopped focused-newton-2249.arukascloud.io 実行結果例 エンドポイント 97
  98. 98. CLIでアプリ操作 アプリ一覧の表示 docker ps で、デフォルトでは実行中(running)のアプリのみ表示 停止中のアプリも含めて表示するには「-a」オプションを付与 $ arukas ps CONTAINER ID IMAGE COMMAND CREATED STATUS NAME ENDPOINT 92fdc317-680f-4727-9cd1-c6dfb22467f1 dockercloud/hello-world 2016-09- 21T11:21:13.368+09:00 running focused-newton-2249.arukascloud.io 実行結果例 98
  99. 99. アプリ停止と削除 停止と削除 停止したアプリは arukas start で再開できるが、データは初期化 削除したアプリは arukas ps –a でも表示できない $ arukas stop 92fdc317-680f-4727-9cd1-c6dfb22467f1 Stopping... $ arukas rm 92fdc317-680f-4727-9cd1-c6dfb22467f1 arukas stop と rm 99
  100. 100. Arukas のまとめ Docker コンテナを簡単にプロビジョニング コンテナを実行するために、インフラを用意する必要がないので 実行時、自動的に HTTP/HTTPS 対応のエンドポイントを付与できる スケールイン・スケールアウトに対応 結果として、Docker の利点を活かせることができる ベータテスト中につき、無償提供中 すべての機能を無料でご利用いただけます 皆さまからのフィードバックをお待ちしています まずはお試しください! 100
  101. 101. 101 最新情報は SlideShare さくらインターネット株式会社アカウントの フォローをお願いいたします! http://www.slideshare.net/sakura_pr/ ス ラ イ ド シ ェ ア Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会) さくらのDockerコンテナホスティング-Arukasの 解説とインフラを支える技術(July Tech Festa 2016)
  102. 102. ここまで何か気になる所がありますか? ご参考:Docker 日本語ドキュメント http://docs.docker.jp/ Arukas https://arukas.io/ 102

×