Software Design plusシリーズDocker実践入門
――Linuxコンテナ技術の基礎から応用まで

書籍の概要

この本の概要

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そのものです。新たに登場するツールや技術の表面的な違いにまどわされず,その本質を理解するための基礎知識を本書を通して身につけていただけることを期待しています。

設定ファイルなどは,本書の補足情報ページを参照ください。

この書籍に関連する記事があります!

なぜDockerが注目されているのか
コンピュータ上にコンピュータを作る――これが仮想化技術です。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

目次

はじめに

第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による稼働状態コンテナーの保存

おわりに

著者プロフィール

中井悦司(なかいえつじ)

1971年4月大阪生まれ。ノーベル物理学賞を本気で夢見て,理論物理学の研究に没頭する学生時代,大学受験教育に情熱を傾ける予備校講師の頃,そして,華麗なる(?)転身を果たして,外資系ベンダーでLinux エンジニアを生業にするに至るまで,妙な縁が続いて,常にUnix/Linux サーバと人生を共にする。最近は,Linux ディストリビュータに籍をおいて,企業システムでのLinux/OSS の活用促進に情熱を燃やす日々を過ごしながら,雑誌記事や書籍の執筆にも注力。
休日は,ロシア文学と哲学書を読みながら,ピアノジャズを楽しむはずが,今はなぜか,小学1年生の愛娘とスポーツクラブのプールに通う,近所で評判の「よいお父さん」。「世界平和」のために早めの帰宅を心がけるものの,こよなく愛する場末の飲み屋についつい立ち寄りがちな今日このごろ。
Linux/OSS による業務アプリケーションの開発から,全国の小売店舗で稼働する10,000 台以上のLinux サーバーの運用サポート,プライベートクラウドの設計・構築まで,さまざまなプロジェクトを通して身につけた,「プロの心構え」を若手エンジニアに伝えるために苦心中。最近は,機械学習理論などデータサイエンスの基礎知識の啓蒙にも活動範囲を拡大。