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入門

725 views

Published on

オトナのプログラミング勉強会 2017/04/19

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

オトナのDocker入門

  1. 1. オトナのプログラミング勉強会@未来会議室 2017/04/19 Tsukasa Katoh
  2. 2. 自己紹介 加藤 司 熊本在住 元金融系インフラエンジニア Hyper-V,Vmware,Citrixを中心にAD,Exchange,SQL Serverなど MS製品のSIerをやっていました。(OSSも大好きです。) サーバー、ストレージなどのハード大好きです。 現クラウドコンサルタント/インテグレータ Azure,Office365などのコンサル/導入支援をしています。 Microsoft MVP for Microsoft Azure コミュニティ活動 JAZUG熊本支部(くまあず) 熊本クラウド語ろう会(熊クラ会)
  3. 3. Copyright© 2015, JAZUG All Rights Reserved. 3
  4. 4. Docker概要 「Docker」(ドッカー)は、Docker社(旧dotCloud)が開発 するオープンソースのコンテナ管理ソフトウェア。 開発者が簡単にアプリケーションを動かす環境を作るという 思想のもとに作られている。
  5. 5. Dockerを使うメリット サーバー仮想化と違い、コンテナを利用するためオーバー ヘッドが少なく動作が軽い。 各コンテナは様々なディストリビューションやバージョンを 構成できる。 インフラ環境をコード化することが容易(Dockerfile)
  6. 6. Copyright© 2015, JAZUG All Rights Reserved. 6 Container
  7. 7. Copyright© 2015, JAZUG All Rights Reserved. 7
  8. 8. コンテナ型仮想化技術とは サーバー仮想化と違い、OSの一部のみ仮想化する。 Kernel機能を使ってリソースを分離する。Dockerはそれを管 理する。
  9. 9. コンテナ型とハーパーバイザー型の違い ハードウェア Windows Server 2016 Kernel Docker Engine Library Library Library App App App コンテナ ハードウェア Hypervisor コンテナ 仮想 OS Library App コンテナ型 Hypervisor 管理 OS VMコンテナ 仮想 OS Library App VM
  10. 10. Dockerイメージ Dockerコンテナ生成用のひな型。 UbuntuやCentOSなどのディストリビューションがイメージ 化されており、各種ミドルウェアの環境が提供されている。 (DockerHub)
  11. 11. Docker Hub
  12. 12. Docker Hub Dockerイメージを公開しているリポジトリ。 各団体や個人が作成したDockerイメージを利用/公開できる サービス。 WordPress、MySQLやMongoDBなど、さまざまなアプリケー ションのオフィシャルイメージが提供されているため、利用 者は環境を構築することなく実行環境を手に入れられる。
  13. 13. Dockerfile Dockerコンテナの構成情報をテキストで記述するファイルの こと。 コマンドライン上でイメージを作る命令を全て記述できるた め、イメージの自動構築などに役立つ。 [Dockerfile] FROM ubuntu MAINTAINERuser<user@user.com> RUN apt-get install–y httpd EXPOSE 80 CMD [“httpd”, “-D” “FOREGROUND”]
  14. 14. Dockerfileで利用できるコマンド コマンド 用途 FROM 元となるDockerイメージの指定 MAINTAINER 作成者の情報 RUN コマンドの実行 ADD ファイル/ディレクトリの追加 CMD コンテナーの実行コマンド 1 ENTRYPOINT コンテナーの実行コマンド 2 WORKDIR 作業ディレクトリの指定 ENV 環境変数の指定 USER 実行ユーザーの指定 EXPOSE ポートのエクスポート VOLUME ボリュームのマウント
  15. 15. Data Volume コンテナ間で永続的なデータや共有データを扱うもの。 通常コンテナ内のデータはコンテナがなくなったら破棄され るが、Data Volumeは参照するコンテナがなくなってもデー タは存続する。 Data Volumeに対する変更はイメージへの変更には含まれず、 直接反映される。
  16. 16. Data Volume Container 複数のコンテナ間で共有したい永続的なデータや非永続的な コンテナから参照したいデータを格納するコンテナ。 マウントするにはdocker runコマンドに「--volumes-from」 オプションを指定する。
  17. 17. ポートフォワーディング コンテナのアプリケーション(Webサーバなど)を公開する 場合、コンテナ側のポートとホストOS側のポートを紐づける 必要がある。 ランダムに割り振る方法と手動でポートを指定する方法があ る。 ランダムの場合は標準で32768-61000 変更する場合は/proc/sys/net/ipv4/ip_local_port_rangeを修正
  18. 18. コンテナネットワーク Docker Engine ドライバ固有の標準ネットワーク機能では、 3つのネットワークが用意されています。 docker network lsコマンドで確認可能です。 $ docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge bridge 9f904ee27bf5 none null cf03ee007fb4 host host
  19. 19. コンテナネットワーク コンテナの分離をより管理するため、ユーザー定義ネット ワークも作成可能です。ネットワークドライバも標準提供さ れており、ブリッジネットワークやオーバレイネットワーク を作成できます。 ネットワークプラグインを自作し、リモートネットワークの 定義も可能。
  20. 20. コンテナ間のリンク 通常、コンテナ間での通信はホスト側にマッピングしたポー トを経由して接続するが、リンク機能を使うと接続したい相 手のネットワーク情報を自動取得され簡易に接続できる仕組 み。 接続先コンテナを起動しておき、接続元コンテナをdocker runするときに「--link」オプションをつけて起動する。
  21. 21. Dockerコマンド docker pull コンテナイメージのダウンロード docker run コンテナを起動する docker stop コンテナを停止する
  22. 22. Dockerコマンド docker rm 停止中のコンテナを削除する docker ps コンテナの一覧を表示する docker image イメージの一覧を表示する
  23. 23. Dockerコマンド docker rmi イメージの削除 docker start コンテナを起動してログインする docker attach 起動中のコンテナにログインする
  24. 24. Dockerを使う方法 クライアントOS Docker for Windows Docker for Mac サーバーOS CoreOS 他 各LinuxディストリビューションやFreeBSDなど Windows Server 2016 (Windows Server Containers、Hyper-V Containers) クラウド Azure Container Service(ACS) Amazon EC2 Container Service(ECS) Google Container Engine(GKE)
  25. 25. クライアント用Docker
  26. 26. クライアント用Docker Docker for Mac Docker for Windows 従来のBoot2Dockerではなくシェル上でDockerコマンドを利用可 能にし、Docker ToolBox、Docker Machineを利用するようになっ た。 26
  27. 27. Docker for Windows利用上の注意 Windows 10 (64bit) のみ対応。 Pro/Enterprise/Educationエディション。 Hyper-Vが利用できること。 Docker実行仮想マシン用としてメモリ2GB、ディスク60GBが必 要。 27
  28. 28. CoreOS
  29. 29. Container Linux(旧CoreOS) Copyright© 2015, JAZUG All Rights Reserved. 29 コンテナ利用に特化したLinuxディストリビューション Dockerコンテナによるアプリケーションの起動 軽量かつ堅牢 容易かつ安全なOSアップデート クラスタリング
  30. 30. 実際に触ってみよう!(1) Copyright© 2015, JAZUG All Rights Reserved. 30 作るもの Apache2を使ったWebサーバ
  31. 31. 実際に触ってみよう! Copyright© 2015, JAZUG All Rights Reserved. 31 Dockerコンテナ準備 $ sudo docker pull httpd $ sudo docker run -it -p 80:80 -d httpd
  32. 32. 実際に触ってみよう! Copyright© 2015, JAZUG All Rights Reserved. 32 一旦止めます $ sudo docker ps CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES f14512ea4cd9 httpd "httpd-foreground" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp happy_morse $ sudo docker stop f14512ea4cd9
  33. 33. 実際に触ってみよう! Copyright© 2015, JAZUG All Rights Reserved. 33 ローカルディスクに公開用ファイルを作って再度起動 します。 $ mkdir /tmp/www $ vi /tmp/www/index.html $ sudo docker run -it -p 80:80 -v /tmp/www/:/usr/local/apache2/htdocs/ -d httpd <html> <head><title>test</title></head> <body> test </body> </html>
  34. 34. 実際に触ってみよう! Copyright© 2015, JAZUG All Rights Reserved. 34 作るもの WordPress + MySQLのコンテナ同士をリンクさせて、 MySQLのデータはデータボリュームコンテナに格納させた もの
  35. 35. 実際に触ってみよう! Copyright© 2015, JAZUG All Rights Reserved. 35 Dockerコンテナ準備 $ sudo docker pull wordpress $ sudo docker pull mysql $ sudo docker pull busybox $ sudo docker create -it -v /var/lib/mysql --name sqldata busybox $ sudo docker run -it --volumes-from sqldata --name mysql -e MYSQL_ROOT_PASSWORD=mysql-d -p 3306:3306 mysql $ sudo docker run -it --name wordpress --link mysql:mysql -p 8080:80 -d wordpress
  36. 36. Docker Compose Copyright© 2015, JAZUG All Rights Reserved. 36 複数コンテナの構築やコンテナ起動時のオプションを YAMLファイルで管理する仕組み。 ビルド・プルを自動的に依存関係に沿って順番にコン テナを起動してくれるため、環境構築の際の工数を削 減できる。(同一環境を簡単に構築できる)
  37. 37. Docker Compose Copyright© 2015, JAZUG All Rights Reserved. 37 sqldata: image: busybox volumes: - /var/lib/mysql container_name: sqldata mysql: image: mysql environment: MYSQL_ROOT_PASSWORD=mysql ports: - "3306:3306" volumes_from: - sqldata container_name: mysql wordpress: image: wordpress links: - mysql:mysql ports: - "8080:80"
  38. 38. 定義されているものをビルド 定義されているものを起動 Docker Compose Copyright© 2015, JAZUG All Rights Reserved. 38 $ sudo docker-composebuild $ sudo docker-composeup -d
  39. 39. Docker Swarm Copyright© 2015, JAZUG All Rights Reserved. 39 複数のDockerホストを1つのリソースグループとして 管理して、コンテナの起動ホストの配置管理を行う オーケストレーションツール。
  40. 40. Windows Server Container 40
  41. 41. Windows Serverで利用できるコンテナ Windows Serverコンテナ コンテナホスト及び全てのコンテナでカーネルを共有 Hyper-V コンテナ コンテナーホストのカーネルは Hyper-V コンテナと共有されない WindowsベースのDockerで実行されるため、 Linuxとの相互乗り入れは不可 41
  42. 42. Windowsで利用できるコンテナの比較 項目 Windows Serverコンテナ Hyper-Vコンテナ 特徴 軽量・高速 高い隔離性 コンテナ 起動:速い 実行:ホスト上のプロセス 起動:遅い 実行:Hyper-Vゲスト上のプロセス 隔離性 • コンテナは同じホストOS上で実 行される • 他のコンテナの影響を受ける可 能性がある • コンテナ単位で隔離されるので独 立性が高い • 他のコンテナの影響をほぼ受けな い 42
  43. 43. Windows コンテナの比較 ハードウェア Windows Server 2016 Kernel Docker Engine Library Library Library App App App コンテナ ハードウェア Hypervisor コンテナ Win Kernel Library App Win Kernel Library App Windows Server コンテナ Hyper-Vコンテナ 管理 OS Docker Engine コンテナ コンテナコンテナ 43
  44. 44. Windows コンテナの比較 ハードウェア Hypervisor Win Kernel Library App Win Kernel Library App Hyper-Vコンテナ 管理 OS Docker Engine Winコンテナ Winコンテナ 44 Linux Kernel Library App Linuxコンテナ
  45. 45. Hyper-VコンテナのLinuxコンテナサポート Copyright© 2015, JAZUG All Rights Reserved. 45 Dockercon17(2017/4/17-20)の基調講演で、Hyper-V コンテナでのLinuxコンテナサポートが発表されました。 主要Linuxディストリビューションと同イベントで Docker社より公開・オープンソース化が発表された 「LinuxKit」もサポート対象予定です。
  46. 46. Windows Server 2016からの 新オプションで最小構成で コンテナを動かしたい 46
  47. 47. ディスク容量500MBで 動作するインストール オプションが… 47
  48. 48. Nano Server Copyright© 2015, JAZUG All Rights Reserved. 49 Windowsのいくつかの役割を実行するために最適化さ れたリファクタリングバージョンのWindows Server 容量わずか500MB 起動・展開が早い GUI・ローカルコンソールはなくリモート管理が前提 Dockerエンジンも動作する
  49. 49. Nano Serverをコンテナで 動かして.NET Coreアプリケー ションを動作させる 50
  50. 50. Nano Serverコンテナイメージを実行する時の制限 ホストがNano Serverの場合、Windows Serverコンテナでは Nano Serverベースのコンテナイメージのみ実行可能 Nano Server自体の制限ではあるがリモート管理のみとなり、コ ンソールからの管理ができない 51
  51. 51. Windows Server Containersの展開 機能のインストール及び再起動 [Powershell] > Install-Module-Name DockerMsftProvider -Repository PSGallery -Force > Install-Package -Name docker -ProviderName DockerMsftProvider > Restart-Computer -Force > Start-Service Docker 52
  52. 52. Windows Server Containersの展開 Nano Server + IISイメージのダウンロード及び実行 [Powershell] > docker pull nanoserver/iis > Docker run -it --name fukuten-nano1-p 80:80 nanoserver/iis 53
  53. 53. Windows Server Containersの展開 Nano Server + .NET Core サンプルプログラム実行 [Powershell] > docker run microsoft/dotnet-samples:dotnetapp-nanoserver 54
  54. 54. Copyright© 2015, JAZUG All Rights Reserved. 55
  55. 55. Copyright© 2015, JAZUG All Rights Reserved. 56 Azure Container Service
  56. 56. Azure Container Service Copyright© 2015, JAZUG All Rights Reserved. 57 テンプレートを使用したDockerクラスターの構成を展 開するサービス ※マネージドサービスではありません 選べるオーケストレーターはDocker Swarm、DC/OSま たはKubernetesで、各種ツール・APIをサポート Marathon,Chronosなど
  57. 57. Azure Container Service Copyright© 2015, JAZUG All Rights Reserved. 58
  58. 58. DC/OS Copyright© 2015, JAZUG All Rights Reserved. 59
  59. 59. DC/OS Copyright© 2015, JAZUG All Rights Reserved. 60
  60. 60. DC/OS ( Marathon ) Copyright© 2015, JAZUG All Rights Reserved. 61
  61. 61. DC/OS ( Marathon ) Copyright© 2015, JAZUG All Rights Reserved. 62
  62. 62. Docker Swarm Copyright© 2015, JAZUG All Rights Reserved. 63
  63. 63. Kubernetes Copyright© 2015, JAZUG All Rights Reserved. 64
  64. 64. Copyright© 2015, JAZUG All Rights Reserved. 65 Web App on Linux
  65. 65. Web App on Linux サポート言語 Node.js(4.5.0,4.4.7,6.2.2,6.6.0,6.9.3) PHP(5.6.23,7.0.6) .NET Core(1.0) Ruby(2.3) Copyright© 2015, JAZUG All Rights Reserved. 66
  66. 66. Web App on Linux 現在提供されているApp ServiceのLinux版 Linux上でのWebアプリのネイティブな実行のサポート 専用App Serivceプランで動作 現在パブリックプレビュー Dockerのサポート Copyright© 2015, JAZUG All Rights Reserved. 67
  67. 67. Web App on Linux 以下のデプロイ方法をサポート FTP ローカル Git GitHub Bitbucket Copyright© 2015, JAZUG All Rights Reserved. 68
  68. 68. Web App on Linux 以下のリージョンのみで利用可能(2017/04現在) 米国西部 西ヨーロッパ 東南アジア Copyright© 2015, JAZUG All Rights Reserved. 69
  69. 69. Web App on Linux Copyright© 2015, JAZUG All Rights Reserved. 70
  70. 70. Web App on Linux Copyright© 2015, JAZUG All Rights Reserved. 71
  71. 71. 参考 Dockerユーザーガイド https://docs.docker.com/engine/userguide/ Docker日本語ドキュメント http://docs.docker.jp/index.html Dockerコマンド http://docs.docker.jp/engine/reference/index.html http://qiita.com/kite_999/items/e26d58b08e247134f7fe Copyright© 2015, JAZUG All Rights Reserved. 72
  72. 72. Copyright© 2015, JAZUG All Rights Reserved. 73 ご清聴ありがとうございました!

×