今さら聞けない人のための
Docker超入門
9/19 ニフクラミートアップ版
日本仮想化技術株式会社
代表取締役社長兼CEO
宮原 徹(@tmiyahar)
http://VirtualTech.jp
自己紹介
• 本名:宮原 徹
• 1972年1月 神奈川県生まれ
• 1994年3月 中央大学法学部法律学科卒業
• 1994年4月 日本オラクル株式会社入社
– PCサーバ向けRDBMS製品マーケティングに従事
– Linux版Oracle8の日本市場向け出荷に貢献
• 2000年3月 株式会社デジタルデザイン 東京支社長および株
式会社アクアリウムコンピューター 代表取締役社長に就任
– 2000年6月 (株)デジタルデザイン、ナスダック・ジャパン上場(4764)
• 2001年1月 株式会社びぎねっと 設立
• 2006年12月 日本仮想化技術株式会社 設立
• 2008年10月 IPA「日本OSS貢献者賞」受賞
• 2009年10月 日中韓OSSアワード 「特別貢献賞」受賞
• ガンダム勉強会主宰・好きなモビルスーツはアッガイ
2
日本仮想化技術株式会社 概要
• 社名:日本仮想化技術株式会社
– 英語名:VirtualTech Japan Inc.
– 略称:日本仮想化技術/VTJ
• 設立:2006年12月
• 資本金:3,000万円
• 売上高:10,702万円(2017年7月期)
• 本社:東京都渋谷区渋谷1-8-1
• 取締役:宮原 徹(代表取締役社長兼CEO)
• 伊藤 宏通(取締役CTO)
• スタッフ:9名(うち、7名が仮想化技術専門エンジニアです)
• URL:http://VirtualTech.jp/
• 仮想化技術に関する研究および開発
– 仮想化技術に関する各種調査
– 仮想化技術に関連したソフトウェアの開発
– 仮想化技術を導入したシステムの構築
– OpenStackの導入支援・新規機能開発
ベンダーニュートラルな
独立系仮想化技術の
エキスパート集団
3
Dockerを動かそう
4
Dockerの特徴
• 1コンテナ1プロセスで動作する
– 仮想マシンと比べてハイパーバイザーのオーバーヘッ
ドが無いのでより高速
• ≒コンテナ内で1プロセス(1タスク)が動作する
– サービスプロセスと並行で対話型シェルを動かすなど
の考え方は基本的に無い(シングルタスク)
– コンテナの中であれこれ動作させるのには向かない
– WebアプリならWeb APサーバで1コンテナ、DBサーバ
で1コンテナという感じ
• Dockerイメージは(ルート)ファイルシステム
– chrootを思い浮かべるとちょうどいい
5
各方式の比較
ベアメタル(物理) 仮想マシン コンテナ
性能 最も速い I/Oが遅い 速い
OS 1つだけ 複数種類を混在可
能
カーネルは1つだけ
だが、ディストリ
ビューションは混在
可能
リソース使用 システムで専有 メモリの無駄が多い OSカーネルは1つ
で効率が良い
柔軟性 硬直的 非常に柔軟 単機能向け
主な用途 高速なDBなど 従来型の業務シス
テム
Webサービスのフロ
ントエンド等、同一
のものを大量配備
する必要があるも
の
6
Dockerを動かす手順
1. Dockerをインストールする
2. dockerサービスを起動する
3. Dockerイメージをダウンロードする
4. Dockerコンテナを起動する
単に動かすだけならとても簡単
7
Dockerをインストールする
1. CentOS 7をインストール
2. アップデートを行う
– # yum update -y
3. Dockerパッケージをインストール
– # yum install docker
4. bridge-utilsパッケージも入れておきます
– # yum install bridge-utils
– 入ってる場合もある
8
サービスの起動
1. dockerサービスを起動する
– # systemctl start docker
2. システム起動時に自動起動するように有
効化しておく
– # systemctl enable docker
• Dockerサービスを停止すると、動作中のコ
ンテナは停止します
– 消えるわけではない
9
Dockerイメージをダウンロード
1. CentOSのDockerイメージを検索
– # docker search centos
2. CentOSのDockerイメージをダウンロード
– # docker pull centos
– 最新版(latest)がダウンロードされる
3. Dockerイメージを確認
– # docker images
– 基本的にはIDで識別(同一IDに複数TAGも)
10
Dockerコンテナを実行(基本)
1. CentOSイメージでコンテナを実行
– # docker run -it centos /bin/bash
– -i, --interactive=true|false
– -t, --tty=true|false
2. 実行中のコンテナを確認
– ホスト側で実行(別ターミナルなど)
– # docker ps -a
– -a, --all=true|false
– 一意のIDと名前が割り当てられる
11
Dockerコンテナ実行(応用)
1. コンテナ名を付ける
– # docker run --name=名前 イメージ名 コマンド
2. シェルからコマンドを実行させる
– # docker run イメージ名 /bin/bash -c "コマンド"
– yumでパッケージをインストールしたり
3. より複雑な実行時処理を行いたい場合は
Dockerfileを記述する(自動化)
– どこまで複雑にするかはケースバイケース?
12
Dockerコンテナのライフサイクル
13
イメージとコンテナの変移
14
centos
①コンテナとして実行(docker run)
httpd ② # yum install httpd
centos
httpd
③コンテナをイメージ化(docker commit)
④イメージをコンテナ化
(docker run)
centos
コンテナをイメージ化
1. コンテナにhttpdパッケージをインストール
– # docker run --name=httpd centos /bin/bash -c
"yum install httpd -y"
2. httpdコンテナをコミットしてイメージ化
– # docker commit httpd httpd_template
3. イメージを確認
– # docker images
15
新たなイメージからコンテナ実行
1. コンテナでhttpdを実行し、コンテナのポート80
番をホストの8080番に紐付ける
– # docker run -d -p 8080:80 --name=web1
httpd_template /usr/sbin/httpd -D FOREGROUND
– -d, --detach=true|false
2. ポートが紐付いていることを確認
– # docker ps -a
– # curl localhost:8080
16
まとめ
• 仮想マシンとコンテナを使い分け
• Dockerを動作させるだけなら結構簡単
• イメージのライフサイクルを考えて
• Dockerfileで簡単な自動化
• もう少し本格的な自動化にAnsibleなど?
• 規模感が大きくなるならKubernetes
17
ありがとうございました
18

今さら聞けない人のためのDocker超入門 9/19 ニフクラミートアップ版