docker勉強会2017 実践編 スライド
TRANSCRIPT
Docker勉強会2017 実践編 @長野県塩尻市
日時:2017年1月21日(土曜日)
会場:塩尻インキュベーションプラザ
Twitterハッシュタグ #shiojiri-oss ©2017 Shinichiro Ohhara
大原 慎一郎 [email protected]
(有)トラストネットワークス
長野県塩尻市 塩尻インキュベーションプラザ108号室
IPAセキュリティプレゼンター SPREADサポーター
自己紹介
http://www.facebook.com/shiojiriosslabo
©2017 Shinichiro Ohhara
https://www.facebook.com/ShinshuOSS/
http://www.belken.jp/
アジェンダ
• 入門編のおさらい(過去資料参考)
• ハンズオン実習の準備
• Docker基本操作
• コンテナイメージ
• データ管理方法
• プロジェクト作成
• 別ホストへデプロイ
©2017 Shinichiro Ohhara
前回の資料
• 2014年9月に入門編を開催
• 2016年11月に再入門を開催
• SlideShareにて各スライド資料を公開
• Docker入門
http://www.slideshare.net/ShinichiroOhhara/docker-39456836
• Docker再入門
http://www.slideshare.net/ShinichiroOhhara/docker-2016-update
©2017 Shinichiro Ohhara
ハンズオン実習の準備
• 実践編として各自がPCを操作して実習
• ローカル環境を各自で準備
• 配布した別紙にて詳細を説明(非公開)
A) 会場のWiFi接続設定
B) Docker Engineインストール
C) コマンドコンソールでバージョンと動作確認
©2017 Shinichiro Ohhara
Docker基本操作
• コンテナ操作コマンド
A) docker ps
B) docker start
C) docker rm
• イメージ操作コマンド
A) docker images
B) docker run
C) docker rmi
©2017 Shinichiro Ohhara
2世代目
差分管理システム
オリジナルイメージ
差分1
差分2
3世代目
オリジナルイメージ
差分1
差分2
差分3
1世代目
オリジナルイメージ
差分1
• ストレージドライバー(AUFSやOverlayなど)
• 層(レイヤー)構成で重複が無い差分管理
©2017 Shinichiro Ohhara
Docker基本操作
• Docker Hub操作コマンド
A) docker search
B) docker pull
• OSイメージコンテナを実行
A) Ubuntuの最新公式イメージのダウンロード
B) Ubuntuコンテナのbash実行
C) 実行後にコンテナ内へログイン状態に移行
D) ログアウトするとコンテナも終了
©2017 Shinichiro Ohhara
Docker基本操作
• サービスの終了がコンテナの停止 A) 前スライドの例ではbashをexitでコンテナ停止
B) 常駐サービスの場合はバックグラウンド起動
• サービスコンテナのバックグラウンド実行 A) Webサーバーのサービスコンテナ実行
B) コンテナのバックグラウンド起動を確認
C) Webブラウザで表示
D) コンテナの停止と状態確認
E) コンテナの再実行と状態確認
©2017 Shinichiro Ohhara
コンテナイメージ
開発コンテナ
Ubuntu OS
nginx
統合イメージ
Ubuntu OS +
nginx
• 差分を含めて新たに別のイメージを作成
©2017 Shinichiro Ohhara
コンテナイメージ
• コンテナイメージの作成
A) コンテナを削除すると差分は消える
B) 開発したコンテナを保存する方法
C) docker commit
D) Nginxコンテナの自作イメージ作成
E) 作成したイメージをコンテナ実行
F) コンテナ内ではフォアグラウンド動作しないとコンテナは停止
©2017 Shinichiro Ohhara
コンテナイメージ
• コンテナイメージの自動作成
A) コンテナイメージの構成ファイル
B) Dockerfile
C) 前スライドのNginxイメージをDockerfile化
D) docker build
E) イメージやパケージのダウンロード等も自動化
F) イメージ作成過程のコンテナは自動削除
G)作成したイメージをコンテナ実行
©2017 Shinichiro Ohhara
コンテナイメージ
• レジストリ A) コンテナイメージを共有管理
B) 公式レジストリDocker Hub https://hub.docker.com/
C) イメージはアップロードか自動作成(Dockerfile)
D) リポジトリは一般公開され誰でも利用可能
E) プライベートリポジトリは1つまでは無料
F) アカウントを作成してプライベートリポジトリ登録
G) docker login
H) docker push
©2017 Shinichiro Ohhara
コンテナイメージ
• プライベートレジストリ
A) オンプレミス環境にサーバー構築(商用で有料)
B) ローカル環境専用レジストリコンテナ
C) ユーザー管理機能は無い
D) サービスポートTCP5000番
E) プライベートレジストリ用のコンテナ作成
F) リポジトリをプライベートレジストリへ登録
G) ローカルキャッシュイメージを消しても再利用可
©2017 Shinichiro Ohhara
データ管理方法
• ホストOS側ファイルをコンテナで利用する
A) コンテナからホストOS側ファイルを利用
B) データ編集はホストOS側なので自由
C) docker run –v
D) ホストOS側のデータ参照ファイルをコンテナ側から利用する実習
E) 書き換えを制限して利用する場合
©2017 Shinichiro Ohhara
コンテナ
データ管理方法
• ホストOS側を透過的に利用
ホストOS
ホストOS側ディレクトリ
コンテナ側ディレクトリ
©2017 Shinichiro Ohhara
データ管理方法
• 複数のコンテナで共有する
A) コンテナ間でデータを共有できる共有ボリューム
B) 1つ目のコンテナで共有ボリュームを設定
C) 2つ目のコンテナでは1つ目のコンテナを指定
D) docker run –-volumes-from
E) 書き換えを制限して利用する場合
F) 提供側コンテナは制限されない
©2017 Shinichiro Ohhara
コンテナ1
データ管理方法
• コンテナの共有ボリュームを利用
共有ボリューム
コンテナ2
コンテナ3
©2017 Shinichiro Ohhara
データ管理方法
• データコンテナ
A) 共有ボリューム提供に特化したコンテナ
B) データ専用のコンテナで分離し可搬性が向上
C) アプリケーションは入れない動作させない
D) 保守用に必要最小限のコマンド
E) コンテナイメージbusybox
F) データコンテナを作成して別コンテナから参照
G)サービス実行していなくても利用できる
©2017 Shinichiro Ohhara
データ管理方法
• ホストOS側へデータのバックアップ
A) データコンテナからホストOS側にバックアップ
B) 作業用コンテナ経由
C) 対象ディレクトリをバックアップファイル化
• 別のデータコンテナにリストア
A) 別のデータコンテナを作成
B) 作業用コンテナ経由
C) バックアップファイルをリストア
©2017 Shinichiro Ohhara
データコンテナ1
データ管理方法 • 作業用コンテナ経由
• ホストOS側を利用してバックアップ・リストア
ホストOS
ホストOS側ディレクトリ
コンテナ側ディレクトリ
データコンテナ2
コンテナ側ディレクトリ
作業用コンテナ 作業用コンテナ
©2017 Shinichiro Ohhara
プロジェクト作成
• Docker Compose A) プロジェクト管理で複数のコンテナを構成
B) WordPressを例に作成
C) プロジェクト単位で複数のコンテナを操作
D) データコンテナに分離して作成
E) データコンテナの元イメージは同じで良い
F) サービス先のコンテナを指定する事
G)データベースを変えて作成
H) プライベートレジストリの可視化
©2017 Shinichiro Ohhara
プロジェクト作成
アプリコンテナ db
MySQL5.7
共有ボリューム db_data:/var/lib/mysql
アプリコンテナ wordpress
WordPress
• WordPressのコンテナ構成
TCP:3306
ホストOS側ネットワーク
TCP:80
TCP:8000
©2017 Shinichiro Ohhara
データコンテナ data
プロジェクト作成
アプリコンテナ mysql
MySQL5.7
共有ボリューム db_data:/var/lib/mysql
アプリコンテナ wordpress
WordPress
• WordPressのコンテナ構成 変更後
TCP:3306
ホストOS側ネットワーク
TCP:80
TCP:8000
©2017 Shinichiro Ohhara
プロジェクト作成
コンテナ registry
registry
コンテナ frontend
docker-registry-frontend:v2
• プライベートレジストリ可視化
ホストOS側ネットワーク
TCP:80
TCP:8080 TCP:5000
TCP:5000
©2017 Shinichiro Ohhara
別ホストへデプロイ
• Docker Machine A) 別のリモートホストを作成(Hyper-V,VirtualBox,AWS)
B) ローカル環境のままでリモートホストを簡単操作
C) Docker ComposeでWordPressをデプロイ
©2017 Shinichiro Ohhara
ローカルの別ホスト
Docker Machine
ローカルホスト Localhost
AlpineLinux
コンテナ コンテナ
Hyper-V,VirtualBox
Boot2Docker
コンテナ コンテナ
EC2インスタンス
コンテナ コンテナ
Linux(AMI)
Hyper-V,xhyve
IaaSクラウド(AWSなど)
©2017 Shinichiro Ohhara
別のリモートホスト
Docker Machine
ローカルホスト Localhost
AlpineLinux
コンテナ コンテナ
Hyper-V,VirtualBox
Boot2Docker
コンテナ コンテナ
Hyper-V,xhyve
ローカル側のターミナルから直接デプロイ出来る!
docker-machine env -u docker-machine env
©2017 Shinichiro Ohhara