Upload
shinichiro-ohhara
View
1.889
Download
0
Embed Size (px)
Citation preview
Docker 再入門 2016 update @長野県塩尻市
日時:2016年11月26日(土曜日)
会場:塩尻インキュベーションプラザ
Twitterハッシュタグ #shiojiri-oss
大原 慎一郎 [email protected]
(有)トラストネットワークス
長野県塩尻市 塩尻インキュベーションプラザ108号室
ITネットワークシステムやOSSシステムの設計構築開発保守
自己紹介
www.facebook.com/shiojiriosslabo
長野県塩尻市に活動拠点を置く、IT技術者有志による団体 「オープンな環境でオープンな活動を目指す」を合言葉に集う CoderDojo Shiojiri 開催 小学生高学年向けRuby教室開催 IT技術関係の勉強会を開催 OSC東京イベントにブース参加
アジェンダ
• Dockerとコンテナのおさらい
• Docker Engine (インストールと環境構築)
• Docker Hub
• Docker Compose
• Docker Machine
• Docker Swarm(docker swarm mode)
• その他のDockerプロジェクト
前回の資料
• 2014年9月に塩尻でSOLA勉強会にて紹介。
• SlideShareにて公開しています。
• Docker入門
http://www.slideshare.net/ShinichiroOhhara/docker-39456836
Docker Engine
仮想化とコンテナ
ハードウェア
ホストOS
ハイパーバイザー
仮想マシン 仮想マシン
ゲストOS ゲストOS
ハードウェア
ホストOS(Linux Kernel)
Bins/Libs
AP1
Bins/Libs
AP2
Bins/Libs
AP1
Bins/Libs
AP2
インストール方法
• Linux Kernel 3.10以降のLinux 64bit環境
• インストール方法
Dockerの公式インストール用スクリプト 最新のDocker Engineが利用出来ます。
$ curl -fsSL https://get.docker.com/ | sh
インストール方法
• インストール方法
–ディストリビューションの公式パッケージ利用
• 公式リポジトリを追加登録
• パッケージツールでインストール
• 各ディストリビューションのパッケージシステムに依存
–バイナリファイルの直接利用
• 各OS用の公式バイナリファイルを手動で利用
WindowsやMacOSの場合
• VirtualBoxでLinuxを動作させて利用。
• 2014年の紹介時には手動で行っていました。
• 2015年にDocker Toolbox登場! Docker
Docker-Machine
Docker-Compose
Kitematic
Boot2Docker ISO
VirtualBox
WindowsやMacOSの場合
ハードウェア
ホストOS(Windows or MacOS)
ハイパーバイザー(VirtualBox)
仮想マシン
ゲストOS(Boot2Docker)
Bins/Libs
AP1
Bins/Libs
AP2
Bins/Libs
AP3
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コンテナ類とは別物
Docker for Windows
ハードウェア
ホストOS(64bit Windows 10 Pro)
ハイパーバイザー(Hyper-V)
仮想マシン
ゲストOS(Alpine Linux)
Bins/Libs
AP1
Bins/Libs
AP2
Bins/Libs
AP3
2016年 MacOSの場合
• 2016年にDocker for Mac登場!
macOS 10.10.3 Yosemite 以降
OSネイティブのハイパーバイザー Hypervisor Frameworkに対応
Docker用にxhyveベースのHyperKitを導入
VirtualBoxと共存可能
Docker Toolboxは削除
ホストOS側のターミナルから透過的に利用
Docker for Mac
ハードウェア
ホストOS(MacOS)
ハイパーバイザー(Hypervisor Framework)
仮想マシン
ゲストOS(Alpine Linux)
Bins/Libs
AP1
Bins/Libs
AP2
Bins/Libs
AP3
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
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.
ローカルキャッシュ
コンテナ・サービスの起動
Bins/Libs
AP
コンテナ・イメージ1
コンテナ・イメージ2
コンテナ・イメージ3
コンテナ・イメージ4
Docker Hub
コンテナ・イメージ
OSのインストール
パッケージインストール
アプリケーション設定
アプリケーション実行
ベースのコンテナ
パッケージインストール
アプリケーション設定
アプリケーション実行
アプリケーション コンテナ 実行
従来のサービス構築 独自コンテナの サービス構築
公式コンテナの サービス構築
OSの設定
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
複数のコンテナ連携
• 1つのサービスに1つのコンテナが基本
• アプリは複数のサービスで構成される。
フロントエンド:webサーバー
バックエンド:データベースサーバー
• コンテナ間をリンク連携
複数のコンテナ連携
Bins/Libs
Nginx
Bins/Libs
Nginx
MySQL
複数のサービスを 含めたコンテナ
Bins/Libs
MySQL
単一のサービスのコンテナを リンク連携した場合
Docker Compose
• Dockerコマンドはコンテナ単位で操作
• 複数のコンテナ構築と操作が面倒くさい!
• まとめて管理出来ないか・・・
• 複数のコンテナ構成を管理する
• YAML形式ファイルで設定
• プロジェクト単位で管理
WordPressを構築
• プロジェクト用に適当なディレクトリを作成
• 作成したディレクトリに移動する
• YAML形式のプロジェクトファイルを作成する
docker-compose.yml
https://docs.docker.com/compose/wordpress/
$ mkdir my_wordpress $ cd my_wordpress
WordPressを構築
• プロジェクトファイルをビルドします。
必要なイメージをDocker Hubからダウンロード
イメージから各コンテナを起動
各コンテナは設定の通りに連携して構築
• WebブラウザでWordPress初期画面が表示出来ます。
$ docker-compose up -d
Docker Compose
• docker-compose ps プロジェクトのコンテナの一覧表示
docker psコマンドと比較してみよう!
• docker-compose stop プロジェクトのコンテナの一括停止
• docker-compose rm プロジェクトのコンテナの一括削除
開発環境の構築
ローカルホストの場合
ホストOS側ターミナル
ローカルホスト内の別の 仮想マシンホストの場合
ゲストOS(Alpine Linux)
Bins/Libs
AP
Hyper-V,VirtualBox
ホストOS側ターミナル
ゲストOS(Boot2Docker)
Bins/Libs
AP
Hyper-V,VirtualBox
SSHリモート接続
本番環境の構築
OS(AMI)イメージを選択
EC2インスタンス起動
EC2インスタンスにSSH接続
OSの設定
通常構築する場合
EC2インスタンス設定
パッケージインストール
アプリケーション設定
アプリケーション実行
OS(AMI)イメージを選択
EC2インスタンス起動
EC2インスタンスにSSH接続
OSの設定
Dockerで構築する場合?
EC2インスタンス設定
Docker Engineインストール
アプリケーション・コンテナ実行
Docker Machine
• リモートホストに自動でデプロイ
• ドライバーで様々なクラウドサービスに対応
• ローカル側の別VM(Boot2Docker)も可能
Hyper-V
VirtualBox
• SSH認証設定を自動化して隠匿
• ローカル側で操作が完結出来る
ローカルの別ホスト
Docker Machine
ローカルホスト Localhost
AlpineLinux
コンテナ コンテナ
Hyper-V,VirtualBox
Boot2Docker
コンテナ コンテナ
EC2インスタンス
コンテナ コンテナ
Linux(AMI)
Hyper-V,xhyve
IaaSクラウド(AWSなど)
Docker Machine
• ローカル側で仮想マシン(VM)別ホストを作成
• Hyper-Vの場合
• VirtualBoxの場合
• 適当なドライバーを指定することで、default名のVM(中はBoot2Docker)が作成出来る。
> docker-machine create --driver hyperv default
$ docker-machine create --driver virtualbox default
Docker Machine
• docker-machine ls 作成したリモートホストの一覧表示
• docker-machine ip ホスト名 指定したリモートホストのIPアドレス表示
• docker-machien ssh ホスト名 指定したリモートホストへsshログイン
普通にexitコマンドで抜け出る事が出来ます。
Docker Machine
• docker-machine env ホスト名
デプロイ対象の環境変数を表示
元に戻す場合は-uオプション
• デプロイ対象の変更を実行する時は、envで表示された最終行のコマンドを別途実行します。
• ローカルホストのターミナルでdockerコマンドを実行するとローカルホスト側ではなくリモートホスト側にデプロイします。
ローカルの別ホスト
Docker Machine
ローカルホスト Localhost
AlpineLinux
コンテナ コンテナ
Hyper-V,VirtualBox
Boot2Docker
コンテナ コンテナ
Hyper-V,xhyve
ローカル側のターミナルから直接デプロイ出来る!
docker-machine -u docker-machine env
Docker Machine
• 参加者の方で可能な方は実際に別ホストにデプロイして体験してみましょう!
• IaaSクラウド側の例としてAWSへのデプロイをここで講師から実演してみます。
Docker Machine
• リモートホストの後片付け方法
• docker-machine stop ホスト名 指定したリモートホストの停止
• docker-machine rm ホスト名 指定したリモートホストの削除
Docker Swarm
• Dockerコンテナのクラスタ構築ツール
• 別のプロダクトでしたが、Docker 1.12からDocker Engineに統合されました。
• Swarm modeに変更するだけで機能します。
• Managerと複数のWorkerで構成
• 透過ネットワークingressによる 冗長化と負荷分散
Docker Swarm mode
Bins/Libs
Nginx
Managerノード
Bins/Libs
Nginx
Workerノード
Bins/Libs
Nginx
Workerノード
Bins/Libs
Nginx
Workerノード
Docker Swarm mode
Bins/Libs
Nginx
Workerノード
Bins/Libs
Nginx
Workerノード
Bins/Libs
Nginx
Managerノード
ingressオーバレイネットワーク
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
Docker Swarm mode
• Managerノードをホストに設定します。
• SSHログインしてSwarm modeに設定
• トークン付のコマンドが表示されるので、メモして後でworkerノード登録に使用します。
• Swarm modeの状態確認
docker info
docker node ls
$ docker swarm init --advertise-addr 192.168.99.11
Docker Swarm mode
• Workerノードをホストに設定します。
• SSHログインしてManagerノード登録時に表示されたトークン付のコマンドを実行する。
• 残りのホストも同様に設定する。
• クラスタの全ノード状態をManagerノードにSSHログインして確認する。
docker node ls
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
Docker Swarm mode
• Workerノードへコンテナをスケール
• 3個のノードで5つのコンテナが実行されます。
• サービスの状態を確認する。
docker service ps helloworld
docker ps
$ docker service scale helloworld=5
Docker Swarm mode
• 複数ノードの複数コンテナを一括削除
• サービスの状態を確認する。
docker service ps helloworld
docker ps
docker service inspect helloworld
$ docker service rm helloworld
その他のDockerプロジェクト
• Docker for AWS/Azure
AWSやAzureの機能をDocker Swarmで利用
• Docker Cloud
パブリッククラウドとDocker Hubの統合管理
時間単位の課金
• Docker Datacenter
オンプレミスのデータセンター用