はじめてのコンテナーdocker & windows & linux

38
はじめてのコンテナー Docker & Windows & Linux かめがわ かずし(kkamegawa)

Upload: kazushi-kamegawa

Post on 21-Jan-2018

1.021 views

Category:

Technology


5 download

TRANSCRIPT

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

はじめてのコンテナー Docker & Windows & Linuxかめがわ かずし(kkamegawa)

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

AgendaWhy container?

Container in Windows(which choice)

How to use Windows Container

DevOps and Container

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

Self-intrductionKAMEGAWA Kazushi / Engineer

Microsoft MVP for Visual Studio and Development Tools (2012/7~)Twitter : @kkamegawa

Facebook : https://www.facebook.com/kkamegawa/Blog : http://kkamegawa.hatenablog.jpSlideShare : https://www.slideshare.net/kkamegawa/

出版などアジャイルでやってみた。

http://www.shuwasystem.co.jp/products/7980html/4740.htmlBuild 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/

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

This contents based on 2017/11/18

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

Why Container?

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

今までの環境構築完璧な手順書でダブルチェックしながら一台ずつ物理環境に温かみのある手作業構築

VMWare/Hyper-Vなどの仮想環境を使ってイメージ展開

PowerShell DSC/Ansible/Puppet/Chefなどを使ってInfrastructure as a Codeで自動構築

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

今までの問題点完璧な手順書作成大変。複数人での指差しチェックはコストがかかる

OSの展開にはライセンスが絡む場合があるOSイメージはでかい(Windows Serverミニマムで10GB以上)

IasCだと出来上がるまでちょっと時間がかかる

Page 8: はじめてのコンテナーDocker & Windows & Linux
Page 9: はじめてのコンテナーDocker & Windows & Linux

アプリ実行に必要なものだけをまとめれば?コンテナーというアイディア

FreeBSD : JailSolaris : ZoneLinux : Linux Containers

Docker→Now!

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

サーバー仮想化とコンテナーの違い

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

コンテナーごとにネットワークの分離コンテナーごとにリソースの分離

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

Dockerが受けた理由(私見)コンテナーイメージ運用がGitライク / Docker Hub

主要なディストリビューションで対応(macOS/Windows)

オーケストレーションもOSSで対応(Kubernetes/Swarmなど)

クラウドベンダーもサポートAmazon, Google, Microsoft…etc.

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

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をサポート

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

Windowsで今使えるコンテナーDocker for Windows

Hyper-Vコンテナー

Windowsコンテナー

Hyper-VコンテナーでのWindows Subsystem for Linux

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

Container in Windows

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

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-windowsEdge:頻繁に更新(最低月一度)Stable:3か月に一度

Hyper-Vを使うため、IntelやGoogleのAndroidエミュレーターとの共存不可

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

Windows でのコンテナーは悩ましいLinuxイメージをHyper-Vの仮想マシンで動かす(標準)

Windowsイメージを動かすHyper-VコンテナーWindowsコンテナー(※:Windows Serverのみ)

Hyper-VコンテナーでLinuxを動かす※:Edgeチャンネルのプレビューかつ、Fall Creators Update必要

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

どれを選べばいいの?(主観です)本番がLinuxコンテナー、開発はWindowsDocker for Windowsデフォルト

開発、本番がWindowsコンテナーで軽量にWindowsコンテナー(でも運用大変)

コンテナ間のリソース制御したい。バージョンHellを避けたいHyper-Vコンテナー

LinuxのコンテナーをWindowsで使いたいLinuxコンテナー(でもまだプレビュー)

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

Windowsコンテナー

Docker for Windows

(デフォルト)

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

Docker for Windowsの既定Hyper-Vで一台のMobyLinux仮想マシンが動作Windowsコンテナーに変更可

動かすのはLinuxのDockerイメージ

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

WindowsコンテナーWindows Server のみで使用可能なプロセス分離タスクマネージャーにプロセスがそのまま表示※:なので、このままタスクマネージャーから落とせるコンテナーはsuspendedなので、再度docker start可物理OSとベースイメージがパッチレベルで同一でなくてはならない

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

Hyper-VコンテナーWindows 10とWindows Serverで使用可能

※:Serverでは --isolatation=hyperv オプションdocker run -it --isolatation=hyperv microsoft/windowsservercore cmd

Hyper-Vのハイパーバイザーでコンテナーを分離メモリ、CPUなどを制御しやすいサービス事業者で無関係な組織のコンテナーを一台で動かす場合に向いているWindowsベースイメージに依存しないのでこちらがおすすめ

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

Linux コンテナー(Windows Subsystem for Linux)Hyper-VコンテナーでWindows Subsystem for Linux経由でLinuxコンテナーを動かす。注: Fall Creators Update /Windows Server, Version 1709以降必須

UbuntuなどのLinuxベースイメージを使う

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

Linuxコンテナーを使う1. PowerShellを起動

Install-Module DockerProvider2. Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview3. [Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")4. restart-computer5. docker run -it ubuntu bash

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

How to use Container

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

WindowsでのDockerエンジンインストールWindows 10Docker for Windowsをインストールする

Windows Server 2016https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/quick-start-windows-server

Windows Server Version 1709https://docs.docker.com/engine/installation/windows/docker-ee/

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

docker hubからベースイメージの取得WindowsコンテナーではWindowsのベースイメージはホストバージョ

ンと合わせる(後述)

microsoft/nanoserver(1GBくらい) (ほぼ).NET Coreアプリ実行用

microsoft/windowsservercore(10GBくらい) サービスなどのGUIなしアプリ用→GUIアプリは不可※:SQL Serverなどはこちら

ubuntuLinuxコンテナーで使うベースイメージ場合によっては自分で作る

https://knowledge.sakura.ad.jp/2226/

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

Windowsでの注意事項コンテナホストOSとコンテナベースイメージのバージョンをそろえる毎月のパッチ更新でベースイメージも更新される

https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility

固定したい場合、pull もしくはdockerfileのタグ指定docker pull microsoft/nanoserver:1709_KB4043961docker pull microsoft/windowsservercore:10.0.14393.1770

公開されているOSイメージはデフォルト英語版(タグでja-jpを指定すれば日本語版)

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

公開済みコンテナーを使うDocker Hub(既定), Azure Container Registry, EC2 Container Registry, Google Container Registry等にログイン。

無指定ならdocker hubから。とってくるだけなら無料。※:どれもGB単位なので、ネットワークには気を付けて

docker pull イメージ名:タグ例:docker pull microsoft/dotnet-samples:latest慣例的に最新版イメージにはlatestタグをつける。無指定ならlatestが取得される

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

コンテナーを実行するときよく使うオプション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/

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

自分のコンテナーを作るDockerfileを用意する

https://docs.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/manage-windows-dockerfilehttps://docs.docker.com/engine/reference/builder/

アプリをインストールする手順通りに書くビルドする※:Visual Studioなどでは支援機能もあるレジストリ(Docker Hub他)にアップロード

docker hubには公開されているdockerfileへのGitHubレポジトリへのリンクがあるので大いに参考にする

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

DevOps and Container

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

Docker開発ツールDocker CLI

https://docs.docker.com/engine/reference/commandline/cli/

Azure CLI,SSHhttps://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

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

コンテナー開発ライフサイクル例

Azure開発環境

git pushpull, clone

docker push

CD (Webhook)

docker push

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

デプロイ先仮想マシンAzure VM, EC2等マシンの管理面倒

コンテナのマネージドサービスAzure Kubernetes Serviceなど

Azure App Service for LinuxKubernetesほど管理が不要な環境にはお勧め※:現在はLinuxコンテナーのみ

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

まとめWindowsのコンテナーは用途に応じて適切に選びましょう。

Windowsのベースイメージの扱いに気を付けて。Hyper-Vコンテナー使うほうがたぶん楽。

Windowsだとコンテナーは.NET Core動かすためのものかな…

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

資料探そうとしても…コンテナーの移り変わりは早い

一年前でも古い情報が多い

検索するときは必ず期間指定を!

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

参考リソースWindows Containers on Windows Serverhttps://docs.microsoft.com/ja-jp/virtualization/windowscontainers/quick-start/quick-start-windows-server

Preview Docker for Windows Server 1709 and Windows 10 Fall Creators Updatehttps://docs.docker.com/engine/installation/windows/ee-preview/

Windows Server Version 1709 で Docker と Windows Containers を使ってみるhttp://blog.shibayan.jp/entry/20171107/1509988437

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

その他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