Docker勉強会2017 実践編 スライド

28
Docker勉強会2017 実践編 @長野県塩尻市 日時:2017年1月21日(土曜日) 会場:塩尻インキュベーションプラザ Twitterハッシュタグ #shiojiri-oss ©2017 Shinichiro Ohhara

Transcript of Docker勉強会2017 実践編 スライド

Page 1: Docker勉強会2017 実践編 スライド

Docker勉強会2017 実践編 @長野県塩尻市

日時:2017年1月21日(土曜日)

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

Twitterハッシュタグ #shiojiri-oss ©2017 Shinichiro Ohhara

Page 2: Docker勉強会2017 実践編 スライド

大原 慎一郎 [email protected]

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

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

IPAセキュリティプレゼンター SPREADサポーター

自己紹介

http://www.facebook.com/shiojiriosslabo

©2017 Shinichiro Ohhara

https://www.facebook.com/ShinshuOSS/

http://www.belken.jp/

Page 3: Docker勉強会2017 実践編 スライド

アジェンダ

• 入門編のおさらい(過去資料参考)

• ハンズオン実習の準備

• Docker基本操作

• コンテナイメージ

• データ管理方法

• プロジェクト作成

• 別ホストへデプロイ

©2017 Shinichiro Ohhara

Page 5: Docker勉強会2017 実践編 スライド

ハンズオン実習の準備

• 実践編として各自がPCを操作して実習

• ローカル環境を各自で準備

• 配布した別紙にて詳細を説明(非公開)

A) 会場のWiFi接続設定

B) Docker Engineインストール

C) コマンドコンソールでバージョンと動作確認

©2017 Shinichiro Ohhara

Page 6: Docker勉強会2017 実践編 スライド

Docker基本操作

• コンテナ操作コマンド

A) docker ps

B) docker start

C) docker rm

• イメージ操作コマンド

A) docker images

B) docker run

C) docker rmi

©2017 Shinichiro Ohhara

Page 7: Docker勉強会2017 実践編 スライド

2世代目

差分管理システム

オリジナルイメージ

差分1

差分2

3世代目

オリジナルイメージ

差分1

差分2

差分3

1世代目

オリジナルイメージ

差分1

• ストレージドライバー(AUFSやOverlayなど)

• 層(レイヤー)構成で重複が無い差分管理

©2017 Shinichiro Ohhara

Page 8: Docker勉強会2017 実践編 スライド

Docker基本操作

• Docker Hub操作コマンド

A) docker search

B) docker pull

• OSイメージコンテナを実行

A) Ubuntuの最新公式イメージのダウンロード

B) Ubuntuコンテナのbash実行

C) 実行後にコンテナ内へログイン状態に移行

D) ログアウトするとコンテナも終了

©2017 Shinichiro Ohhara

Page 9: Docker勉強会2017 実践編 スライド

Docker基本操作

• サービスの終了がコンテナの停止 A) 前スライドの例ではbashをexitでコンテナ停止

B) 常駐サービスの場合はバックグラウンド起動

• サービスコンテナのバックグラウンド実行 A) Webサーバーのサービスコンテナ実行

B) コンテナのバックグラウンド起動を確認

C) Webブラウザで表示

D) コンテナの停止と状態確認

E) コンテナの再実行と状態確認

©2017 Shinichiro Ohhara

Page 10: Docker勉強会2017 実践編 スライド

コンテナイメージ

開発コンテナ

Ubuntu OS

nginx

統合イメージ

Ubuntu OS +

nginx

• 差分を含めて新たに別のイメージを作成

©2017 Shinichiro Ohhara

Page 11: Docker勉強会2017 実践編 スライド

コンテナイメージ

• コンテナイメージの作成

A) コンテナを削除すると差分は消える

B) 開発したコンテナを保存する方法

C) docker commit

D) Nginxコンテナの自作イメージ作成

E) 作成したイメージをコンテナ実行

F) コンテナ内ではフォアグラウンド動作しないとコンテナは停止

©2017 Shinichiro Ohhara

Page 12: Docker勉強会2017 実践編 スライド

コンテナイメージ

• コンテナイメージの自動作成

A) コンテナイメージの構成ファイル

B) Dockerfile

C) 前スライドのNginxイメージをDockerfile化

D) docker build

E) イメージやパケージのダウンロード等も自動化

F) イメージ作成過程のコンテナは自動削除

G)作成したイメージをコンテナ実行

©2017 Shinichiro Ohhara

Page 13: Docker勉強会2017 実践編 スライド

コンテナイメージ

• レジストリ A) コンテナイメージを共有管理

B) 公式レジストリDocker Hub https://hub.docker.com/

C) イメージはアップロードか自動作成(Dockerfile)

D) リポジトリは一般公開され誰でも利用可能

E) プライベートリポジトリは1つまでは無料

F) アカウントを作成してプライベートリポジトリ登録

G) docker login

H) docker push

©2017 Shinichiro Ohhara

Page 14: Docker勉強会2017 実践編 スライド

コンテナイメージ

• プライベートレジストリ

A) オンプレミス環境にサーバー構築(商用で有料)

B) ローカル環境専用レジストリコンテナ

C) ユーザー管理機能は無い

D) サービスポートTCP5000番

E) プライベートレジストリ用のコンテナ作成

F) リポジトリをプライベートレジストリへ登録

G) ローカルキャッシュイメージを消しても再利用可

©2017 Shinichiro Ohhara

Page 15: Docker勉強会2017 実践編 スライド

データ管理方法

• ホストOS側ファイルをコンテナで利用する

A) コンテナからホストOS側ファイルを利用

B) データ編集はホストOS側なので自由

C) docker run –v

D) ホストOS側のデータ参照ファイルをコンテナ側から利用する実習

E) 書き換えを制限して利用する場合

©2017 Shinichiro Ohhara

Page 16: Docker勉強会2017 実践編 スライド

コンテナ

データ管理方法

• ホストOS側を透過的に利用

ホストOS

ホストOS側ディレクトリ

コンテナ側ディレクトリ

©2017 Shinichiro Ohhara

Page 17: Docker勉強会2017 実践編 スライド

データ管理方法

• 複数のコンテナで共有する

A) コンテナ間でデータを共有できる共有ボリューム

B) 1つ目のコンテナで共有ボリュームを設定

C) 2つ目のコンテナでは1つ目のコンテナを指定

D) docker run –-volumes-from

E) 書き換えを制限して利用する場合

F) 提供側コンテナは制限されない

©2017 Shinichiro Ohhara

Page 18: Docker勉強会2017 実践編 スライド

コンテナ1

データ管理方法

• コンテナの共有ボリュームを利用

共有ボリューム

コンテナ2

コンテナ3

©2017 Shinichiro Ohhara

Page 19: Docker勉強会2017 実践編 スライド

データ管理方法

• データコンテナ

A) 共有ボリューム提供に特化したコンテナ

B) データ専用のコンテナで分離し可搬性が向上

C) アプリケーションは入れない動作させない

D) 保守用に必要最小限のコマンド

E) コンテナイメージbusybox

F) データコンテナを作成して別コンテナから参照

G)サービス実行していなくても利用できる

©2017 Shinichiro Ohhara

Page 20: Docker勉強会2017 実践編 スライド

データ管理方法

• ホストOS側へデータのバックアップ

A) データコンテナからホストOS側にバックアップ

B) 作業用コンテナ経由

C) 対象ディレクトリをバックアップファイル化

• 別のデータコンテナにリストア

A) 別のデータコンテナを作成

B) 作業用コンテナ経由

C) バックアップファイルをリストア

©2017 Shinichiro Ohhara

Page 21: Docker勉強会2017 実践編 スライド

データコンテナ1

データ管理方法 • 作業用コンテナ経由

• ホストOS側を利用してバックアップ・リストア

ホストOS

ホストOS側ディレクトリ

コンテナ側ディレクトリ

データコンテナ2

コンテナ側ディレクトリ

作業用コンテナ 作業用コンテナ

©2017 Shinichiro Ohhara

Page 22: Docker勉強会2017 実践編 スライド

プロジェクト作成

• Docker Compose A) プロジェクト管理で複数のコンテナを構成

B) WordPressを例に作成

C) プロジェクト単位で複数のコンテナを操作

D) データコンテナに分離して作成

E) データコンテナの元イメージは同じで良い

F) サービス先のコンテナを指定する事

G)データベースを変えて作成

H) プライベートレジストリの可視化

©2017 Shinichiro Ohhara

Page 23: Docker勉強会2017 実践編 スライド

プロジェクト作成

アプリコンテナ db

MySQL5.7

共有ボリューム db_data:/var/lib/mysql

アプリコンテナ wordpress

WordPress

• WordPressのコンテナ構成

TCP:3306

ホストOS側ネットワーク

TCP:80

TCP:8000

©2017 Shinichiro Ohhara

Page 24: Docker勉強会2017 実践編 スライド

データコンテナ data

プロジェクト作成

アプリコンテナ mysql

MySQL5.7

共有ボリューム db_data:/var/lib/mysql

アプリコンテナ wordpress

WordPress

• WordPressのコンテナ構成 変更後

TCP:3306

ホストOS側ネットワーク

TCP:80

TCP:8000

©2017 Shinichiro Ohhara

Page 25: Docker勉強会2017 実践編 スライド

プロジェクト作成

コンテナ registry

registry

コンテナ frontend

docker-registry-frontend:v2

• プライベートレジストリ可視化

ホストOS側ネットワーク

TCP:80

TCP:8080 TCP:5000

TCP:5000

©2017 Shinichiro Ohhara

Page 26: Docker勉強会2017 実践編 スライド

別ホストへデプロイ

• Docker Machine A) 別のリモートホストを作成(Hyper-V,VirtualBox,AWS)

B) ローカル環境のままでリモートホストを簡単操作

C) Docker ComposeでWordPressをデプロイ

©2017 Shinichiro Ohhara

Page 27: Docker勉強会2017 実践編 スライド

ローカルの別ホスト

Docker Machine

ローカルホスト Localhost

AlpineLinux

コンテナ コンテナ

Hyper-V,VirtualBox

Boot2Docker

コンテナ コンテナ

EC2インスタンス

コンテナ コンテナ

Linux(AMI)

Hyper-V,xhyve

IaaSクラウド(AWSなど)

©2017 Shinichiro Ohhara

Page 28: Docker勉強会2017 実践編 スライド

別のリモートホスト

Docker Machine

ローカルホスト Localhost

AlpineLinux

コンテナ コンテナ

Hyper-V,VirtualBox

Boot2Docker

コンテナ コンテナ

Hyper-V,xhyve

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

docker-machine env -u docker-machine env

©2017 Shinichiro Ohhara