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 & Windows & Linux

2,171 views

Published on

Windows 10 Anniversary UpdateでサポートされたDockerコンテナーですが、進化して使い分けが難しくなったので、紹介します。

Published in: Technology
  • Be the first to comment

はじめてのコンテナーDocker & Windows & Linux

  1. 1. はじめてのコンテナー Docker & Windows & Linux かめがわ かずし(kkamegawa)
  2. 2. Agenda Why container? Container in Windows(which choice) How to use Windows Container DevOps and Container
  3. 3. Self-intrduction KAMEGAWA Kazushi / Engineer Microsoft MVP for Visual Studio and Development Tools (2012/7~) Twitter : @kkamegawa Facebook : https://www.facebook.com/kkamegawa/ Blog : http://kkamegawa.hatenablog.jp SlideShare : https://www.slideshare.net/kkamegawa/ 出版など  アジャイルでやってみた。 http://www.shuwasystem.co.jp/products/7980html/4740.html  Build InsiderでWindows Subsystem for Linux掲載中 http://www.buildinsider.net/enterprise/wsl  Team Foundation Server 2017コンプリートガイド https://www.amazon.co.jp/Foundation-Server-コンプリート-セッ トアップ編-2017コンプリートガイド-ebook/dp/B073YCLHTC/
  4. 4. This contents based on 2017/11/18
  5. 5. Why Container?
  6. 6. 今までの環境構築 完璧な手順書でダブルチェックしながら一台ずつ 物理環境に温かみのある手作業構築 VMWare/Hyper-Vなどの仮想環境を使ってイ メージ展開 PowerShell DSC/Ansible/Puppet/Chefなどを 使ってInfrastructure as a Codeで自動構築
  7. 7. 今までの問題点 完璧な手順書作成大変。 複数人での指差しチェックはコストがかかる OSの展開にはライセンスが絡む場合がある OSイメージはでかい (Windows Serverミニマムで10GB以上) IasCだと出来上がるまでちょっと時間がかかる
  8. 8. アプリ実行に必要なものだけをまとめれば? コンテナーというアイディア FreeBSD : Jail Solaris : Zone Linux : Linux Containers Docker→Now!
  9. 9. サーバー仮想化とコンテナーの違い Infrastructure Infrastructure Host Operating System Hypervisor Guest OS Bins/Libs App 1 Guest OS Bins/Libs App 2 Guest OS Bins/Libs App 3 Bins/Libs App/Svc 1 Bins/Libs App/Svc 2 Bins/Libs App/Svc 3 Container Engine Operating System コンテナーごとにネットワークの分離 コンテナーごとにリソースの分離
  10. 10. Dockerが受けた理由(私見) コンテナーイメージ運用がGitライク / Docker Hub 主要なディストリビューションで対応 (macOS/Windows) オーケストレーションもOSSで対応 (Kubernetes/Swarmなど) クラウドベンダーもサポート Amazon, Google, Microsoft…etc.
  11. 11. Windows におけるコンテナー変遷 Insider PreviewでPowerShellコマンドレットを使っ たコンテナーが開始。でも、dockerコマンドに移行 (Anniversary Updateで正式版) DockerCon 16でWindows Server 2016のサポートが アナウンス Docker for WindowsとWindowsコンテナーがFall Creators Updateおよび、Windows Server Version 1709でWindows Subsystem for Linuxをサポート
  12. 12. Windowsで今使えるコンテナー Docker for Windows Hyper-Vコンテナー Windowsコンテナー Hyper-VコンテナーでのWindows Subsystem for Linux
  13. 13. Container in Windows
  14. 14. Windows 10 でのコンテナー(Docker) Windows 10 Anniversary Update以降の64bit, Professional/Enterprise Editionを使う Docker for Windowsをインストール ※:Windows 10ではHyper-Vを使うためHomeエディション、32bit OS不可 https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows Edge:頻繁に更新(最低月一度) Stable:3か月に一度 Hyper-Vを使うため、IntelやGoogleのAndroidエミュ レーターとの共存不可
  15. 15. Windows でのコンテナーは悩ましい LinuxイメージをHyper-Vの仮想マシンで動かす(標準) Windowsイメージを動かす Hyper-Vコンテナー Windowsコンテナー(※:Windows Serverのみ) Hyper-VコンテナーでLinuxを動かす ※:Edgeチャンネルのプレビューかつ、Fall Creators Update必要
  16. 16. どれを選べばいいの?(主観です) 本番がLinuxコンテナー、開発はWindows Docker for Windowsデフォルト 開発、本番がWindowsコンテナーで軽量に Windowsコンテナー(でも運用大変) コンテナ間のリソース制御したい。バージョンHellを避けたい Hyper-Vコンテナー LinuxのコンテナーをWindowsで使いたい Linuxコンテナー(でもまだプレビュー)
  17. 17. Windows コンテナー Docker for Windows (デフォルト)
  18. 18. Docker for Windowsの既定 Hyper-Vで一台のMobyLinux仮想マシンが動作 Windowsコンテナーに変更可 動かすのはLinuxのDockerイメージ
  19. 19. Windowsコンテナー Windows Server のみで使用可能なプロセス分離 タスクマネージャーにプロセスがそのまま表示 ※:なので、このままタスクマネージャーから落とせる コンテナーはsuspendedなので、再度docker start可 物理OSとベースイメージがパッチレベルで同一でなくては ならない
  20. 20. Hyper-Vコンテナー  Windows 10とWindows Serverで使用可能 ※:Serverでは --isolatation=hyperv オプション docker run -it --isolatation=hyperv microsoft/windowsservercore cmd  Hyper-Vのハイパーバイザーでコンテナーを分離  メモリ、CPUなどを制御しやすい  サービス事業者で無関係な組織のコンテナーを一台で動かす場合に向いている  Windowsベースイメージに依存しないのでこちらがおすすめ
  21. 21. Linux コンテナー(Windows Subsystem for Linux) Hyper-Vコンテナーで Windows Subsystem for Linux経由でLinux コンテナーを動かす。 注: Fall Creators Update / Windows Server, Version 1709以 降必須 UbuntuなどのLinux ベースイメージを使う
  22. 22. Linuxコンテナーを使う 1. PowerShellを起動 Install-Module DockerProvider 2. Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview 3. [Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine") 4. restart-computer 5. docker run -it ubuntu bash
  23. 23. How to use Container
  24. 24. WindowsでのDockerエンジンインストール Windows 10 Docker for Windowsをインストールする Windows Server 2016 https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/quick- start-windows-server Windows Server Version 1709 https://docs.docker.com/engine/installation/windows/docker-ee/
  25. 25. docker hubからベースイメージの取得 WindowsコンテナーではWindowsのベースイメージはホストバージョ ンと合わせる(後述) microsoft/nanoserver(1GBくらい) (ほぼ).NET Coreアプリ実行用 microsoft/windowsservercore(10GBくらい) サービスなどのGUIなしアプリ用→GUIアプリは不可 ※:SQL Serverなどはこちら ubuntu Linuxコンテナーで使うベースイメージ  場合によっては自分で作る https://knowledge.sakura.ad.jp/2226/
  26. 26. Windowsでの注意事項 コンテナホストOSとコンテナベースイメージのバージョンをそろえる 毎月のパッチ更新でベースイメージも更新される https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version- compatibility 固定したい場合、pull もしくはdockerfileのタグ指定 docker pull microsoft/nanoserver:1709_KB4043961 docker pull microsoft/windowsservercore:10.0.14393.1770 公開されているOSイメージはデフォルト英語版(タグでja-jpを指定すれば日本語版)
  27. 27. 公開済みコンテナーを使う Docker Hub(既定), Azure Container Registry, EC2 Container Registry, Google Container Registry等にログイン。 無指定ならdocker hubから。とってくるだけなら無料。 ※:どれもGB単位なので、ネットワークには気を付けて docker pull イメージ名:タグ 例:docker pull microsoft/dotnet-samples:latest 慣例的に最新版イメージにはlatestタグをつける。無指定なら latestが取得される
  28. 28. コンテナーを実行するときよく使うオプション docker run(初回) -it(正確には -t -i): 標準入力をフォアグラウンドに返す -p : ネットワークのポートをマッピングする -v : コンテナから物理ドライブをマウントする -e : コンテナに環境変数を渡す --rm : 終了時コンテナーを削除 -d : バックグラウンドでの実行継続(サービス/デーモン) -h : ホスト名を指定する(外部接続するなら必須) -n : コンテナーの名前を指定する https://docs.docker.com/edge/engine/reference/commandline/run/ docker start(コンテナー再開) -a : 既存のコンテナーに接続する https://docs.docker.com/edge/engine/reference/commandline/start/
  29. 29. 自分のコンテナーを作る Dockerfileを用意する https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage- docker/manage-windows-dockerfile https://docs.docker.com/engine/reference/builder/ アプリをインストールする手順通りに書く ビルドする ※:Visual Studioなどでは支援機能もある レジストリ(Docker Hub他)にアップロード docker hubには公開されているdockerfileへのGitHub レポジトリへのリンクがあるので大いに参考にする
  30. 30. DevOps and Container
  31. 31. Docker開発ツール Docker CLI https://docs.docker.com/engine/reference/commandline/cli/ Azure CLI,SSH https://azure.github.io/projects/clis/ Visual Studio Code & Docker拡張機能 https://marketplace.visualstudio.com/items?itemName=formulahendry. docker-extension-pack Visual Studio 2017コンテナーサポート https://docs.microsoft.com/ja-jp/aspnet/core/publishing/visual- studio-tools-for-docker
  32. 32. コンテナー開発ライフサイクル例 Azure 開発環境 git push pull, clone docker push CD (Webhook) docker push
  33. 33. デプロイ先 仮想マシン Azure VM, EC2等 マシンの管理面倒 コンテナのマネージドサービス Azure Kubernetes Serviceなど Azure App Service for Linux Kubernetesほど管理が不要な環境にはお勧め ※:現在はLinuxコンテナーのみ
  34. 34. まとめ Windowsのコンテナーは用途に応じて適切に選 びましょう。 Windowsのベースイメージの扱いに気を付けて。 Hyper-Vコンテナー使うほうがたぶん楽。 Windowsだとコンテナーは.NET Core動かすため のものかな…
  35. 35. 資料探そうとしても… コンテナーの移り変わりは 早い 一年前でも古い情報が多い 検索するときは必ず期間指 定を!
  36. 36. 参考リソース Windows Containers on Windows Server https://docs.microsoft.com/ja- jp/virtualization/windowscontainers/quick-start/quick-start- windows-server Preview Docker for Windows Server 1709 and Windows 10 Fall Creators Update https://docs.docker.com/engine/installation/windows/ee- preview/ Windows Server Version 1709 で Docker と Windows Containers を使ってみる http://blog.shibayan.jp/entry/20171107/1509988437
  37. 37. その他 Anti-virus optimization for Windows Containers https://docs.microsoft.com/ja-jp/windows-hardware/drivers/ifs/anti-virus- optimization-for-windows-containers インフラ野郎Azureチームコンテナー祭 https://www.slideshare.net/Microsoft_TechSummit_2017/japan-tech-summit-2017- dep-005 コンテナーなに使ってますか?Linuxですか?Windowsも 使ってもらっていいですか? https://speakerdeck.com/shibayan/kontenananishi-tutemasuka-linux-desuka- windows-moshi-tutemoratuteiidesuka

×