44
Docker 再入門 2016 update @長野県塩尻市 日時:2016年11月26日(土曜日) 会場:塩尻インキュベーションプラザ Twitterハッシュタグ #shiojiri-oss

Docker 再入門 2016 update

Embed Size (px)

Citation preview

Page 1: Docker 再入門 2016 update

Docker 再入門 2016 update @長野県塩尻市

日時:2016年11月26日(土曜日)

会場:塩尻インキュベーションプラザ

Twitterハッシュタグ #shiojiri-oss

Page 2: Docker 再入門 2016 update

大原 慎一郎 [email protected]

(有)トラストネットワークス

長野県塩尻市 塩尻インキュベーションプラザ108号室

ITネットワークシステムやOSSシステムの設計構築開発保守

自己紹介

www.facebook.com/shiojiriosslabo

長野県塩尻市に活動拠点を置く、IT技術者有志による団体 「オープンな環境でオープンな活動を目指す」を合言葉に集う CoderDojo Shiojiri 開催 小学生高学年向けRuby教室開催 IT技術関係の勉強会を開催 OSC東京イベントにブース参加

Page 3: Docker 再入門 2016 update

アジェンダ

• Dockerとコンテナのおさらい

• Docker Engine (インストールと環境構築)

• Docker Hub

• Docker Compose

• Docker Machine

• Docker Swarm(docker swarm mode)

• その他のDockerプロジェクト

Page 5: Docker 再入門 2016 update

Docker Engine

仮想化とコンテナ

ハードウェア

ホストOS

ハイパーバイザー

仮想マシン 仮想マシン

ゲストOS ゲストOS

ハードウェア

ホストOS(Linux Kernel)

Bins/Libs

AP1

Bins/Libs

AP2

Bins/Libs

AP1

Bins/Libs

AP2

Page 6: Docker 再入門 2016 update

インストール方法

• Linux Kernel 3.10以降のLinux 64bit環境

• インストール方法

Dockerの公式インストール用スクリプト 最新のDocker Engineが利用出来ます。

$ curl -fsSL https://get.docker.com/ | sh

Page 7: Docker 再入門 2016 update

インストール方法

• インストール方法

–ディストリビューションの公式パッケージ利用

• 公式リポジトリを追加登録

• パッケージツールでインストール

• 各ディストリビューションのパッケージシステムに依存

–バイナリファイルの直接利用

• 各OS用の公式バイナリファイルを手動で利用

Page 8: Docker 再入門 2016 update

WindowsやMacOSの場合

• VirtualBoxでLinuxを動作させて利用。

• 2014年の紹介時には手動で行っていました。

• 2015年にDocker Toolbox登場! Docker

Docker-Machine

Docker-Compose

Kitematic

Boot2Docker ISO

VirtualBox

Page 9: Docker 再入門 2016 update

WindowsやMacOSの場合

ハードウェア

ホストOS(Windows or MacOS)

ハイパーバイザー(VirtualBox)

仮想マシン

ゲストOS(Boot2Docker)

Bins/Libs

AP1

Bins/Libs

AP2

Bins/Libs

AP3

Page 10: Docker 再入門 2016 update

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コンテナ類とは別物

Page 11: Docker 再入門 2016 update

Docker for Windows

ハードウェア

ホストOS(64bit Windows 10 Pro)

ハイパーバイザー(Hyper-V)

仮想マシン

ゲストOS(Alpine Linux)

Bins/Libs

AP1

Bins/Libs

AP2

Bins/Libs

AP3

Page 12: Docker 再入門 2016 update

2016年 MacOSの場合

• 2016年にDocker for Mac登場!

macOS 10.10.3 Yosemite 以降

OSネイティブのハイパーバイザー Hypervisor Frameworkに対応

Docker用にxhyveベースのHyperKitを導入

VirtualBoxと共存可能

Docker Toolboxは削除

ホストOS側のターミナルから透過的に利用

Page 13: Docker 再入門 2016 update

Docker for Mac

ハードウェア

ホストOS(MacOS)

ハイパーバイザー(Hypervisor Framework)

仮想マシン

ゲストOS(Alpine Linux)

Bins/Libs

AP1

Bins/Libs

AP2

Bins/Libs

AP3

Page 14: Docker 再入門 2016 update

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

Page 15: Docker 再入門 2016 update

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.

Page 16: Docker 再入門 2016 update

ローカルキャッシュ

コンテナ・サービスの起動

Bins/Libs

AP

コンテナ・イメージ1

コンテナ・イメージ2

コンテナ・イメージ3

コンテナ・イメージ4

Docker Hub

Page 17: Docker 再入門 2016 update

コンテナ・イメージ

OSのインストール

パッケージインストール

アプリケーション設定

アプリケーション実行

ベースのコンテナ

パッケージインストール

アプリケーション設定

アプリケーション実行

アプリケーション コンテナ 実行

従来のサービス構築 独自コンテナの サービス構築

公式コンテナの サービス構築

OSの設定

Page 18: Docker 再入門 2016 update

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

Page 19: Docker 再入門 2016 update

複数のコンテナ連携

• 1つのサービスに1つのコンテナが基本

• アプリは複数のサービスで構成される。

フロントエンド:webサーバー

バックエンド:データベースサーバー

• コンテナ間をリンク連携

Page 20: Docker 再入門 2016 update

複数のコンテナ連携

Bins/Libs

Nginx

Bins/Libs

Nginx

MySQL

複数のサービスを 含めたコンテナ

Bins/Libs

MySQL

単一のサービスのコンテナを リンク連携した場合

Page 21: Docker 再入門 2016 update

Docker Compose

• Dockerコマンドはコンテナ単位で操作

• 複数のコンテナ構築と操作が面倒くさい!

• まとめて管理出来ないか・・・

• 複数のコンテナ構成を管理する

• YAML形式ファイルで設定

• プロジェクト単位で管理

Page 22: Docker 再入門 2016 update

WordPressを構築

• プロジェクト用に適当なディレクトリを作成

• 作成したディレクトリに移動する

• YAML形式のプロジェクトファイルを作成する

docker-compose.yml

https://docs.docker.com/compose/wordpress/

$ mkdir my_wordpress $ cd my_wordpress

Page 23: Docker 再入門 2016 update

WordPressを構築

• プロジェクトファイルをビルドします。

必要なイメージをDocker Hubからダウンロード

イメージから各コンテナを起動

各コンテナは設定の通りに連携して構築

• WebブラウザでWordPress初期画面が表示出来ます。

$ docker-compose up -d

Page 24: Docker 再入門 2016 update

Docker Compose

• docker-compose ps プロジェクトのコンテナの一覧表示

docker psコマンドと比較してみよう!

• docker-compose stop プロジェクトのコンテナの一括停止

• docker-compose rm プロジェクトのコンテナの一括削除

Page 25: Docker 再入門 2016 update

開発環境の構築

ローカルホストの場合

ホストOS側ターミナル

ローカルホスト内の別の 仮想マシンホストの場合

ゲストOS(Alpine Linux)

Bins/Libs

AP

Hyper-V,VirtualBox

ホストOS側ターミナル

ゲストOS(Boot2Docker)

Bins/Libs

AP

Hyper-V,VirtualBox

SSHリモート接続

Page 26: Docker 再入門 2016 update

本番環境の構築

OS(AMI)イメージを選択

EC2インスタンス起動

EC2インスタンスにSSH接続

OSの設定

通常構築する場合

EC2インスタンス設定

パッケージインストール

アプリケーション設定

アプリケーション実行

OS(AMI)イメージを選択

EC2インスタンス起動

EC2インスタンスにSSH接続

OSの設定

Dockerで構築する場合?

EC2インスタンス設定

Docker Engineインストール

アプリケーション・コンテナ実行

Page 27: Docker 再入門 2016 update

Docker Machine

• リモートホストに自動でデプロイ

• ドライバーで様々なクラウドサービスに対応

• ローカル側の別VM(Boot2Docker)も可能

Hyper-V

VirtualBox

• SSH認証設定を自動化して隠匿

• ローカル側で操作が完結出来る

Page 28: Docker 再入門 2016 update

ローカルの別ホスト

Docker Machine

ローカルホスト Localhost

AlpineLinux

コンテナ コンテナ

Hyper-V,VirtualBox

Boot2Docker

コンテナ コンテナ

EC2インスタンス

コンテナ コンテナ

Linux(AMI)

Hyper-V,xhyve

IaaSクラウド(AWSなど)

Page 29: Docker 再入門 2016 update

Docker Machine

• ローカル側で仮想マシン(VM)別ホストを作成

• Hyper-Vの場合

• VirtualBoxの場合

• 適当なドライバーを指定することで、default名のVM(中はBoot2Docker)が作成出来る。

> docker-machine create --driver hyperv default

$ docker-machine create --driver virtualbox default

Page 30: Docker 再入門 2016 update

Docker Machine

• docker-machine ls 作成したリモートホストの一覧表示

• docker-machine ip ホスト名 指定したリモートホストのIPアドレス表示

• docker-machien ssh ホスト名 指定したリモートホストへsshログイン

普通にexitコマンドで抜け出る事が出来ます。

Page 31: Docker 再入門 2016 update

Docker Machine

• docker-machine env ホスト名

デプロイ対象の環境変数を表示

元に戻す場合は-uオプション

• デプロイ対象の変更を実行する時は、envで表示された最終行のコマンドを別途実行します。

• ローカルホストのターミナルでdockerコマンドを実行するとローカルホスト側ではなくリモートホスト側にデプロイします。

Page 32: Docker 再入門 2016 update

ローカルの別ホスト

Docker Machine

ローカルホスト Localhost

AlpineLinux

コンテナ コンテナ

Hyper-V,VirtualBox

Boot2Docker

コンテナ コンテナ

Hyper-V,xhyve

ローカル側のターミナルから直接デプロイ出来る!

docker-machine -u docker-machine env

Page 33: Docker 再入門 2016 update

Docker Machine

• 参加者の方で可能な方は実際に別ホストにデプロイして体験してみましょう!

• IaaSクラウド側の例としてAWSへのデプロイをここで講師から実演してみます。

Page 34: Docker 再入門 2016 update

Docker Machine

• リモートホストの後片付け方法

• docker-machine stop ホスト名 指定したリモートホストの停止

• docker-machine rm ホスト名 指定したリモートホストの削除

Page 35: Docker 再入門 2016 update

Docker Swarm

• Dockerコンテナのクラスタ構築ツール

• 別のプロダクトでしたが、Docker 1.12からDocker Engineに統合されました。

• Swarm modeに変更するだけで機能します。

• Managerと複数のWorkerで構成

• 透過ネットワークingressによる 冗長化と負荷分散

Page 36: Docker 再入門 2016 update

Docker Swarm mode

Bins/Libs

Nginx

Managerノード

Bins/Libs

Nginx

Workerノード

Bins/Libs

Nginx

Workerノード

Bins/Libs

Nginx

Workerノード

Page 37: Docker 再入門 2016 update

Docker Swarm mode

Bins/Libs

Nginx

Workerノード

Bins/Libs

Nginx

Workerノード

Bins/Libs

Nginx

Managerノード

ingressオーバレイネットワーク

Page 38: Docker 再入門 2016 update

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

Page 39: Docker 再入門 2016 update

Docker Swarm mode

• Managerノードをホストに設定します。

• SSHログインしてSwarm modeに設定

• トークン付のコマンドが表示されるので、メモして後でworkerノード登録に使用します。

• Swarm modeの状態確認

docker info

docker node ls

$ docker swarm init --advertise-addr 192.168.99.11

Page 40: Docker 再入門 2016 update

Docker Swarm mode

• Workerノードをホストに設定します。

• SSHログインしてManagerノード登録時に表示されたトークン付のコマンドを実行する。

• 残りのホストも同様に設定する。

• クラスタの全ノード状態をManagerノードにSSHログインして確認する。

docker node ls

Page 41: Docker 再入門 2016 update

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

Page 42: Docker 再入門 2016 update

Docker Swarm mode

• Workerノードへコンテナをスケール

• 3個のノードで5つのコンテナが実行されます。

• サービスの状態を確認する。

docker service ps helloworld

docker ps

$ docker service scale helloworld=5

Page 43: Docker 再入門 2016 update

Docker Swarm mode

• 複数ノードの複数コンテナを一括削除

• サービスの状態を確認する。

docker service ps helloworld

docker ps

docker service inspect helloworld

$ docker service rm helloworld

Page 44: Docker 再入門 2016 update

その他のDockerプロジェクト

• Docker for AWS/Azure

AWSやAzureの機能をDocker Swarmで利用

• Docker Cloud

パブリッククラウドとDocker Hubの統合管理

時間単位の課金

• Docker Datacenter

オンプレミスのデータセンター用