無限大な夢のあと

テニスとアニメが大好きな厨二病SEのブログ

【書評】プログラマのためのDocker教科書( @yyamada ) 

今回もWINGSプロジェクト様( @yyamada )の書籍レビュアーに応募させていただき書評を書かせていただくことになりました。
WINGSプロジェクトの皆様、著者の山田様ありがとうございます。
今回は表題にもある以下のURLの書籍を献本していただきましたので、こちらのレビューをさせていただきます。

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化


私の書籍を読む前のDockerの理解度ですが、下記の書籍のDockerの特集を読み、1-2年前に動かしたくらいでそこからは活用できていませんでした。

WEB+DB PRESS Vol.79

WEB+DB PRESS Vol.79

  • 作者: 成瀬ゆい,そらは(福森匠大),西磨翁,小川航佑,佐藤新悟,塚越啓介,藤原亮,堀哲也,田村孝文,桑野章弘,松浦隼人,中村俊之,田中哲,福永亘,杉山仁則,伊藤直也,登尾徳誠,近藤宇智朗,若原祥正,松木雅幸,奥野幹也,後藤秀宣,羽二生厚美,笹田耕一,平河正博,東舘智浩,渡邊恵太,中島聡,A-Listers,はまちや2,川添貴生,山田育矢,伊藤友隆,村田賢太,まつもとゆきひろ,佐野岳人,山口恭兵,千葉俊輝,平松亮介,WEB+DB PRESS編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2014/02/22
  • メディア: 大型本
  • この商品を含むブログ (5件) を見る

今回の書籍レビューア応募により、ただ記事にある通りに動かしただけでなく、色々な使い方ができるのを学ぶことができたので、現場で活用する機会がある時に提案できるくらい学ぶことができました。
ありがとうございます。

ここから書籍レビューに入らせていただきます。
今回書籍を読んで、思った一番の印象はインフラに詳しくない人が挫折しないように、本当に丁寧に書かれているということでした。
例えば、1章の導入編では、システム基盤・ネットワーク/ハードウェア、Linuxミドルウェア、インフラ構成管理の基礎知識を学ぶことができます。
個人的には、普段アプリケーションエンジニアのレイヤーで仕事をしていることもあり、システム基盤の構築/運用の流れについて、すべての流れをまだ経験したこともないこともあり、今後参考にしていきたいと感じました。
また、Linuxの基礎知識に関しては、現場で学んだことやLPIC Level1/Level2で学んだことなどが凝縮されて、うまくまとまっていると感じました。

Linux教科書 LPICレベル1 第5版

Linux教科書 LPICレベル1 第5版

Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応

Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応

Linux教科書 LPICレベル2 Version4.0対応 (EXAMPRESS)

Linux教科書 LPICレベル2 Version4.0対応 (EXAMPRESS)

Linux教科書 LPIC レベル2 スピードマスター問題集 Version4.0対応

Linux教科書 LPIC レベル2 スピードマスター問題集 Version4.0対応

2章もコンテナ仮想化/Dockerの話が基礎からまとまっていて、3章以降の理解を助けてくれます。
Dockerが動く仕組みをLinuxカーネルの機能理解(namespaceなど)から説明してくれていて、知らなかったことだらけで勉強になりました。

3章-5章は、Dockerの基本的な使い方から実際のサーバ構築、Dockerイメージの共有について書かれています。
こちらは、1-2章の理解があれば、実際に使用する際にコマンドリファレンス的に使うことができます。
6-8章からは、実際にWordPressのシステム構築やマルチホスト環境/クラウドでのDocker運用と、実務で実際に使う際のヒントとなる内容が記載されています。

まとめとして、Infrastructure as Codeの話はよく聞くけどどんなものかを知らない方やDockerってどんな場面に活用できるかといういうのがいまいちわからない方、Dockerを使用することになった方などにおすすめできる書籍となっています。
繰り返しになりますが、題名にもある通りインフラに詳しくないプログラマの方でも学びやすい書籍になっているため、該当される方はぜひ購入してみてください。

以上、レビューとさせていただきます。
最後に目次も紹介させていただきます。
以下のページから引用させていただきました。
[http://www.wings.msn.to/index.php/-/A-03/978-4-7981-4102-2/


第1章 おさえておきたいシステム/インフラの知識
1-1 システム基盤の基礎知識
 システム基盤の構成要素
  機能要件(functional requirement)
  非機能要件(non-functional requirement)
  ハードウェア
  ネットワーク
  OS(オペレーションシステム)
  ミドルウェア
 システム基盤の種類(クラウドとオンプレミス環境)
  オンプレミス(on-premises)
  パブリッククラウド(public cloud)
  プライベートクラウド(private cloud)
  クラウドが適しているケース
  オンプレミスが適しているケース
 システム基盤の構築/運用の流れ
1-2 ネットワーク/ハードウェアの基礎知識
 ネットワークアドレス
  MACアドレス物理アドレスイーサネットアドレス)
  IPアドレス
 OSI基本参照モデル通信プロトコル
  アプリケーション層(レイヤー7)
  プレゼンテーション層(レイヤー6)
  セッション層(レイヤー5)
  トランスポート層(レイヤー4)
  ネットワーク層(レイヤー3)
  データリンク層(レイヤー2)
  物理層(レイヤー1)
 ファイアウォール
  パケットフィルタ型
  アプリケーションゲートウェイ
 ルータ/レイヤー3スイッチ
 サーバ機器
  CPU
  メモリ
  ストレージ
1-3 OS(Linux)の基礎知識
 Linuxの概要
  Linuxカーネル
  Linuxディストリビューション
 Linuxカーネル
  デバイス管理
  プロセス管理
  メモリ管理
 Linuxファイルシステム
 Linuxのディレクトリ構成
 Linuxのセキュリティ機能
  アカウントによる権限設定
  ネットワークフィルタリングによる機能
  SELinux(Security-Enhanced Linux
1-4 ミドルウェアの基礎知識
 Webサーバ/Webアプリケーションサーバ
 データベースサーバ
 システム統合運用監視ツール
1-5 インフラ構成管理の基礎知識
 インフラ構成管理
 Infrastructure as Code
 代表的なインフラ構成管理ツール
  OSの起動を自動化するツール(Bootstrapping)
  OSやミドルウェアの設定を自動化するツール(Configuration)
  複数サーバの管理を自動化するツール(Orchestration)
第2章 コンテナ仮想化技術とDocker
2-1 仮想化技術
 仮想環境
 ホスト型仮想化
 ハイパーバイザー型仮想化
 コンテナ型仮想化
2-2 コンテナ仮想化技術の歴史
 2000年~FreeBSD Jail
  プロセスの区画化
  ネットワークの区画化
  ファイルシステムの区画化
 2005年~Solaris Containers
  Solarisゾーン機能
  Solarisリソースマネージャ機能
2-3 Dockerの特徴
 移植性
 相互接続性
 Docker専用Linuxディストリビューション
  Red Hat Enterprise Linux Atomic Host(RHEL Atomic Host)
  Project Atomic
  Snappy Ubuntu Core
  CoreOS
2-4 Dockerの基本機能
 Dockerイメージを作る機能
 Dockerコンテナを動かす機能
 Dockerイメージを公開/共有する機能
 Dockerコンポーネント
  Docker Engine(Dockerのコア機能)
  Docker Kitematic(DockerのGUIツール
  Docker Registry(イメージ公開/共有)
  Docker Compose(複数コンテナ一元管理)
  Docker Machine(Docker実行環境構築)
  Docker Swarm(クラスタ管理)
2-5 Dockerが動く仕組み
 コンテナを区画化する仕組み(namespace)
  PID namespace
  Network namespace
  UID namespace
  MOUNT namespace
  UTS namespace
  IPC namespace
 リソース管理の仕組み(cgroup)
 ネットワーク構成(仮想ブリッジ/仮想NIC
  Dockerコンテナ同士の通信
  Dockerコンテナと外部ネットワークの通信
 Dockerイメージのデータ管理の仕組み
  Btrfs
  AUFS
  Device Mapper
  overlay
第3章 Dockerのインストールと基本コマンド
3-1 Dockerのインストールと動作確認
 Windowsへのインストール
  Docker Toolboxのダウンロードとインストール
 Linuxへのインストール
 TeraTermのインストールと使い方
 Dockerで「Hello world
 Docker KitematicによるGUIでのDockerの動作確認
3-2 Dockerイメージの操作
 Docker Hub
 イメージのダウンロード(docker pull)
 イメージの一覧表示(docker images)
 イメージの詳細確認(docker inspect)
 イメージのタグ設定(docker tag)
 イメージの検索(docker search)
 イメージの削除(docker rmi
 Docker Hubへのログイン(docker login)
 イメージのアップロード(docker push)
 Docker Hubからのログアウト(docker logout)
3-3 Dockerコンテナの生成/起動/停止
 Dockerコンテナのライフサイクル
  コンテナ生成(docker createコマンド)
  コンテナ生成/起動(docker runコマンド)
  コンテナ起動(docker startコマンド)
  コンテナ停止(docker stopコマンド)
  コンテナ削除(docker rmコマンド)
 コンテナの生成/起動(docker run)
 コンテナのバックグラウンド実行(docker run)
 コンテナのネットワーク設定(docker run)
 リソースを指定してコンテナを生成/実行(docker run)
 コンテナを生成/起動する環境を指定(docker run)
 稼働コンテナの一覧表示(docker ps)
 コンテナの稼働確認(docker stats)
 コンテナの起動(docker start)
 コンテナの停止(docker stop)
 コンテナの再起動(docker restart)
 コンテナの削除(docker rm)
 コンテナの中断/再開(docker pause/docker unpause)
3-4 稼働しているDockerコンテナの操作
 稼働コンテナへの接続(docker attach)
 稼働コンテナでプロセス実行(docker exec)
 稼働コンテナのプロセス確認(docker top)
 稼働コンテナのポート転送確認(docker port)
 コンテナの名前変更(docker rename)
 コンテナ内のファイルをコピー(docker cp)
 コンテナ操作の差分確認(docker diff)
3-5 Dockerの情報確認
 Dockerのバージョン確認(docker version)
 Dockerの実行環境確認(docker info)
3-6 コンテナからイメージの作成
 コンテナからイメージ作成(docker commit)
 コンテナをtarファイル出力(docker export)
 tarファイルからイメージ作成(docker import)
 イメージの保存(docker save)
 イメージの読み込み(docker load)
第4章 Dockerfileを使ったコードによるサーバ構築
4-1 Dockerfileの基本
 Dockerfileの用途
 Dockerfileの基本構成
 Dockerfileの作成
 DockerfileからDockerイメージの作成
 Dockerイメージのレイヤー構造
4-2 コマンド/デーモンの実行
 コマンドの実行(RUN命令)
  Shell形式での記述
  Exec形式での記述
 デーモンの実行(CMD命令)
  Shell形式での記述
  Exec形式での記述
  ENTRYPOINT命令のパラメータとしての記述
 デーモンの実行(ENTRYPOINT命令)
  Shell形式での記述
  Exec形式での記述
 ビルド完了後に実行される命令(ONBUILD命令)
  手順1 ベースイメージの作成
  手順2 Webコンテンツの開発
  手順3 Webサーバ用イメージの作成
  手順4 Webサーバ用コンテナの起動
4-3 環境/ネットワークの設定
 環境変数の設定(ENV命令)
  key value型で指定する場合
  key=valueで指定する場合
 作業ディレクトリの指定(WORKDIR命令)
 ユーザの指定(USER命令)
 ラベルの指定(LABEL命令)
 ポートの設定(EXPOSE命令)
4-4 ファイルシステムの設定
 ファイル/ディレクトリの追加(ADD命令)
 ファイルのコピー(COPY命令)
 ボリュームのマウント(VOLUME命令)
  手順1 ログ用イメージの作成
  手順2 ログ用コンテナの起動
  手順3 Webサーバ用イメージの作成
  手順4 Webサーバ用コンテナの起動
  手順5 ログの確認
4-5 Dockerイメージの自動生成/公開
 Automated Buildの流れ
 GitHubへの公開
 Docker Hubのリンク設定
 Dockerfileのビルド
 Dockerイメージの確認
第5章 Dockerイメージの共有――Docker Registry
5-1 プライベートレジストリの構築/管理
 Dockerレジストリの構築
 イメージのアップロード
 イメージのダウンロード
5-2 Amazon S3を使ったイメージ共有
 Amazon S3バケットの作成
 Amazon S3バケットのアクセスキー取得
 プライベートレジストリの起動
 イメージのアップロード/ダウンロード
第6章 複数コンテナの一元管理――Docker Compose
6-1 DockerによるWebシステム構築の基礎知識
 Web3層システムアーキテクチャ
  フロントサーバ
  アプリケーションサーバ
  データベース(DB)サーバ
 永続データの管理
  データのバックアップ/リストア
  ログの収集
 Dockerコンテナ間のリンク
6-2 Docker Composeのインストール
 Docker Compose
 Docker Composeのインストール
6-3 構成ファイル(docker-compose.yml)の構文
 docker-compose.ymlによる構成管理
 ベースイメージの指定(image/build)
 コンテナ内で動かすコマンド指定(command)
 コンテナ間Link連携(link/external_links)
 コンテナ間の通信(ports/expose)
 コンテナのデータ管理(volumes /volumes_from)
 コンテナの環境変数指定(environment)
 コンテナの情報設定(container_name /labels)
6-4 Docker Composeコマンド
 Docker Composeのコマンド
 複数コンテナの生成(up)
 生成するコンテナ数の指定(scale)
 複数コンテナの確認(ps/logs)
 コンテナでのコマンド実行(run)
 複数コンテナの起動/停止/再起動(start/stop/restart)
 複数コンテナの強制停止/削除(kill/rm)
6-5 Docker Composeを使ったWordPressシステム構築
 WordPressのシステム構成
 データ専用コンテナの作成
  1.ベースイメージの取得
  2.作成者情報
  3.データの設定
 WebサーバとDBサーバ用のコンテナ作成
  1.Webサーバ(webserverコンテナ)
  2.DBサーバ(dbserverコンテナ)
  1.Webサーバの設定
  2.DBサーバの設定
 コンテナの起動とデータの確認
 コンテナ群の稼働確認/コマンド実行/停止/削除
 データ専用コンテナのバックアップとリストア
第7章 マルチホスト環境でのDocker 運用――Docker Machine、Docker Swarm
7-1 マルチホスト環境でのコンテナ運用
 マルチホスト環境とクラスタリング
  可用性(アベイラビリティ
  拡張性(スケーラビリティ)
 Docker MachineとDocker Swarm
7-2 Docker Machineコマンド
 Docker Machineのコマンド
 実行環境の作成(create)
 実行環境の一覧表示(ls/status)
 実行環境へのSSH接続(ssh
 環境変数の確認(env)
 実行環境の起動/停止/再起動(start/stop/restart)
 実行環境からのファイルダウンロード(scp)
 実行環境の削除(rm/kill)
 実行環境の情報確認(ip/inspect)
7-3 Docker MachineによるDocker実行環境構築
 Docker Machineを使ったDcoker実行環境の構成
 VirtualBoxでのDocker実行環境構築手順
 Amazon EC2でのDocker実行環境構築手順
7-4 Docker Swarmによるクラスタ管理
 Docker Swarmによるクラスタ環境構築
 クラスタ環境でのコンテナ動作確認
7-5 SaaSによるコンテナ監視
 サーバ稼働監視の概要
  マシンの死活監視
  サービスの稼働監視
  サーバ/ネットワークのリソース監視
  ジョブ監視
 Mackerelでのコンテナ監視手順
  アカウントの作成
  Dockerコンテナの監視
 Datadogでのコンテナ監視手順
第8章 クラウドでのDocker運用
8-1 クラウド環境でのDockerサポート
 Dockerをとりまくクラウド環境
  Amazon Web Service
  Microsoft Azure
  Google Cloud Platform
  IBM SoftLayer
  Joyent Public Cloud
 Amazon Web ServicesのDockerサポート
  Amazon EC2を使う
  Amazon ECSを使う
  Elastic Beanstalkを使う
8-2 Amazon EC2 Container ServiceでのDocker実行環境構築
 Amazon EC2 Container Service
  Amazon ECSの主な特徴
  AWS用語
 Amazon ECSでのDocker実行環境構築/運用
  タスク定義
  サービス定義
  クラスタ設定
note
クラウドサービスのオートスケール機能
シェルの種類
Linuxカーネルの正体「vmlinuz」の名前の由来
システム運用設計の難しさ
コンテナの統一仕様を進める「Open Container Project」
Dockerイメージの改ざん防止機能
NATとNAPTの違い
Dockerのオープンソース開発
Mac OSへのDockerのインストール
イメージのなりすましや改ざんを防ぐには
プロンプト
Linuxコマンドは覚えないとダメ?
ウェルノウンポートについて
export/importとsave/loadの違い
中間イメージの再利用
Docker Hubはどんどん肥大化しない?
イメージのレイヤーの制限
コンテナ実行時にコマンド引数を任意に指定したいときは
ONBUILD命令を使ったチーム開発の進め方
ビルドに不必要なファイルの除外
Dockerfileの格納場所
時刻合わせのプロトコルNTPとは
GitとGitHub
ディザスタリカバリシステム
Amazon Web Services
Dockerを開発環境で利用する
コンテナで永続データを扱うときの注意点
ドメインネームについて
docker-compose.ymlをGUIで作成できるWebサイト
Linuxのシグナル
FigとDocker Compose
Raspberry Piで動かすDocker
冗長化構成の種類
Docker Swarmのホスト決定方式
Dockerの運用ツールあれこれ
運用監視ツールのグラフ表示機能
コンテナ構成図を表示できる「Weave Scope」