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