概要
Linuxのコンテナ技術の1つであるDockerは,迅速なWebサービスの展開に必要不可欠なものであり,多くのIT企業が注目している重要なものである。本書では,そのしくみを明らかにし,DockerをGitHubと連携したデプロイ方法を基礎から解説する。Dockerfileの書き方や管理ツールであるkubernetesとの連携方法,レッドハット社のAtomicHostでの使い方など,最新かつ定番的な情報を盛り込んだ実践的な入門書である。
こんな方におすすめ
- Webエンジニア,サーバエンジニア,ネットワークエンジニア,インフラエンジニア,システムエンジニア
著者から一言
はじめに
お待たせしました! 「Dockerを使って何かを始めたい」「Dockerでコンテナーは起動したけど中のしくみがよくわからない」 ── そんなあなたに向けたDockerの入門書がようやく完成しました。「コンテナーだから軽くて便利」「アプリケーションの可搬性が高まる」など,さまざまなうわさ話を耳にするDockerですが,まずは本書に目を通して,その技術的な特徴,そして,その背後にある「思想」を理解してください。
Dockerは,アプリケーションの実行に必要なファイルをすべてまとめた「コンテナーイメージ」を作成して,Linuxコンテナーでアプリケーションを実行する機能を提供します。しかしながら,Dockerの機能だけに注目していても,その実力は見えてきません。Dockerは,もともとは米dotCloud社が提供するPaaS(Platform as a Service)のサービスを実現するコンポーネントとして開発がスタートしました。その背後には,「継続的インテグレーション/継続的デリバリー」の実現を容易にして,サーバーシステムの運用を根本から変革しようという大きな目標があります。
その本質を理解することで,Docker本来の効率的な活用法が自然にわかるようになります。本書では,「裏ワザ」的なカスタマイズ方法の解説は避け,できるだけシンプルで,技術的にも自然な活用法を中心に紹介しています。Dockerのようにシンプルで「イケてる」ツールは,まずはシンプルに使いこなすのが正解です。さまざまなシーンで気軽に活用する中で,自分なりのベストな使い方を発見してください。
また,Docker内部のしくみに目を向けると,Linuxコンテナーを始めとするさまざまなLinux関連技術が活用されています。dm-thin(Device MapperのThin Provisioningモジュール)を用いたイメージ管理など,Linux好きにはたまらなく興味深いしくみも隠されています。コンテナーイメージの階層構造など,外から見ているだけではわかりにくい点については,内部構造にまで踏み込んだ解説をしています。このような内部構造への知的好奇心からDockerに興味を持ったという,筆者と「同類」の方にも満足していただけることでしょう。
Dockerを取り巻く環境は,今も急速に変化を続けています。本書では,参考として,KubernetesやAtomic Hostなどの関連ツール,あるいはoverlayfsやCRIUなどの新技術についても触れています。ただし,本書の中心は,あくまでもDockerそのものです。新たに登場するツールや技術の表面的な違いにまどわされず,その本質を理解するための基礎知識を本書を通して身につけていただけることを期待しています。
設定ファイルなどは,本書の補足情報ページを参照ください。
目次
はじめに
第1章 Docker入門
1.1 Dockerの利用形態
- 1.1.1 Dockerで何ができるのか?
- 1.1.2 Dockerによるアプリケーション開発の世界
1.2 Dockerが解決する課題
- 1.2.1 継続的インテグレーションにおける環境の維持管理
- 1.2.2 継続的デリバリーにおけるデプロイの効率化
- 1.2.3 Immutable Infrastructureによる確実なインフラ管理
1.3 Dockerの基礎技術
- 1.3.1 Linuxコンテナー
- 1.3.2 ディスクイメージ管理機能
- 1.3.3 ネットワーク管理機能
- 1.3.4 CPUとメモリーの制御
1.4 Gitの使い方
- 1.4.1 Gitによるバージョン管理
- 1.4.2 Gitの基本操作
第2章 Dockerの利用方法
2.1 Dockerの基本操作
- 2.1.1 CentOS 7のインストール
- 2.1.2 Dockerのインストールとコンテナーの起動
- 2.1.3 コンテナーのライフサイクル
- 2.1.4 ポートフォワーディングによる外部からの接続
- 2.1.5 Dockerレジストリーの活用
2.2 コンテナーイメージの自動作成
- 2.2.1 はじめてのDockerfile
- 2.2.2 Dockerfileとシェルスクリプトの連携
- 2.2.3 Gitと連携した自動化
2.3 複数コンテナーの連携活用
- 2.3.1 同一ホスト上でのコンテナーの連携
- 2.3.2 異なるホスト間でのコンテナーの連携
2.4 公開イメージの活用.86
- 2.4.1 「docker run」ですぐに実行 ─ NyanCat
- 2.4.2 GitHubからコンテナーイメージを作成 ─ WordPress
第3章 dockerコマンドリファレンス
3.1 dockerデーモンの管理
- 3.1.1 dockerサービスの操作方法
- 3.1.2 dockerデーモンの起動オプション
- 3.1.3 構成情報の確認:version,info
3.2 Docker HUBとプライベートレジストリーの利用
- 3.2.1 Docker Hubの検索:search
- 3.2.2 プライベートレジストリーの検索
- 3.2.3 コンテナーイメージのダウンロード:pull
- 3.2.4 コンテナーイメージのアップロード:login,push
3.3 コンテナーイメージの管理
- 3.3.1 ローカルイメージの一覧表示:images
- 3.3.2 イメージのタグ付けと削除:tag,rmi
- 3.3.3 イメージの作成履歴確認:history
- 3.3.4 コンテナーイメージの保存:commit
- 3.3.5 ローカルイメージの書き出しとリストア:save,load
- 3.3.6 ファイルシステムの書き出しとリストア:export,import
3.4 コンテナーの操作
- 3.4.1 コンテナーの起動:run,create
- 3.4.2 コンテナーの停止/再起動:stop,start,restart,kill,wait
- 3.4.3 コンテナーの破棄:rm
3.5 コンテナーの状態確認
- 3.5.1 コンテナーの一覧表示:
- 3.5.2 コンテナー内のプロセスを表示:top
- 3.5.3 コンテナー内の出力を表示:logs
- 3.5.4 コンテナー内のファイルを確認:diff,cp
- 3.5.5 コンテナー内のプロセスに接続:attach
- 3.5.6 コンテナー内でコマンドを実行:exec
3.6 Dockerfileによるコンテナーイメージ作成
- 3.6.1 buildサブコマンドの使い方
- 3.6.2 Dockerfileで使用する命令
第4章 Dockerの内部構造と関連ツール
4.1 Dockerの内部構造
- 4.1.1 コンテナー内部のプロセス管理
- 4.1.2 コンテナーイメージ管理
- 4.1.3 複数ホストのネットワーク管理
4.2 Kubernetesによるオーケストレーション
- 4.2.1 Kubernetesのアーキテクチャ
- 4.2.2 Kubernetesのインストール
- 4.2.3 Webサーバーの負荷分散構成例
4.3 Atomic Hostの利用
- 4.3.1 Atomic Hostの特徴
- 4.3.2 rpm-ostreeによるバージョン管理
- 4.3.3 SPC(Super Privileged Container)の利用
4.4 今後の発展
- 4.4.1 overlayfsによるコンテナーイメージ管理
- 4.4.2 CRIUによる稼働状態コンテナーの保存
おわりに
サポート
ダウンロード
本書で使用している,スクリプトなどのソースコードは,すべてダウンロードして利用できます。
以下からダウンロードし,各種解凍ツールで解凍してご利用ください。
- ダウンロード
- dockerbon_20150807.tgz
補足情報
Kubernetesのバージョンアップに伴う導入手順の変更
Kubernetesのバージョンアップに伴い,「4.2 Kubernetesによるオーケストレーション」に記載の手順では,正しく導入できない場合があります。RPMパッケージのインストールコマンドを下記のように変更して,書籍が前提とするバージョンを明示的に指定するようにしてください。
(2015年10月21日更新)
P.157
誤 |
# yum -y install etcd kubernetes-master
|
正 |
# yum -y install etcd-2.0.11-2.el7 kubernetes-master-0.17.1-4.el7
|
P.159
誤 |
# yum -y install kubernetes-node
|
正 |
# yum -y install kubernetes-node-0.17.1-4.el7
|
P.160
誤 |
|
正 |
# yum -y install flannel-0.2.0-7.el7
|
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。
(2015年10月21日更新)
P.58 図2.13の設定ファイル名
誤 |
/etc/docker-registry.yaml
|
正 |
|