今回もWINGSプロジェクト様( @yyamada )の書籍レビュアーに応募させていただき書評を書かせていただくことになりました。
WINGSプロジェクトの皆様、著者の山田様ありがとうございます。
今回は表題にもある以下のURLの書籍を献本していただきましたので、こちらのレビューをさせていただきます。
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (1件) を見る
私の書籍を読む前のDockerの理解度ですが、下記の書籍のDockerの特集を読み、1-2年前に動かしたくらいでそこからは活用できていませんでした。
- 作者: 成瀬ゆい,そらは(福森匠大),西磨翁,小川航佑,佐藤新悟,塚越啓介,藤原亮,堀哲也,田村孝文,桑野章弘,松浦隼人,中村俊之,田中哲,福永亘,杉山仁則,伊藤直也,登尾徳誠,近藤宇智朗,若原祥正,松木雅幸,奥野幹也,後藤秀宣,羽二生厚美,笹田耕一,平河正博,東舘智浩,渡邊恵太,中島聡,A-Listers,はまちや2,川添貴生,山田育矢,伊藤友隆,村田賢太,まつもとゆきひろ,佐野岳人,山口恭兵,千葉俊輝,平松亮介,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/02/22
- メディア: 大型本
- この商品を含むブログ (5件) を見る
今回の書籍レビューア応募により、ただ記事にある通りに動かしただけでなく、色々な使い方ができるのを学ぶことができたので、現場で活用する機会がある時に提案できるくらい学ぶことができました。
ありがとうございます。
ここから書籍レビューに入らせていただきます。
今回書籍を読んで、思った一番の印象はインフラに詳しくない人が挫折しないように、本当に丁寧に書かれているということでした。
例えば、1章の導入編では、システム基盤・ネットワーク/ハードウェア、Linux、ミドルウェア、インフラ構成管理の基礎知識を学ぶことができます。
個人的には、普段アプリケーションエンジニアのレイヤーで仕事をしていることもあり、システム基盤の構築/運用の流れについて、すべての流れをまだ経験したこともないこともあり、今後参考にしていきたいと感じました。
また、Linuxの基礎知識に関しては、現場で学んだことやLPIC Level1/Level2で学んだことなどが凝縮されて、うまくまとまっていると感じました。
- 作者: 中島能和,濱野賢一朗
- 出版社/メーカー: 翔泳社
- 発売日: 2012/09/19
- メディア: 単行本(ソフトカバー)
- クリック: 5回
- この商品を含むブログ (7件) を見る
Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応
- 作者: 有限会社ナレッジデザイン山本道子,大竹龍史
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/06
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Linux教科書 LPICレベル2 Version4.0対応 (EXAMPRESS)
- 作者: 中島能和,濱野賢一朗
- 出版社/メーカー: 翔泳社
- 発売日: 2014/05/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
Linux教科書 LPIC レベル2 スピードマスター問題集 Version4.0対応
- 作者: 有限会社ナレッジデザイン大竹龍史
- 出版社/メーカー: 翔泳社
- 発売日: 2015/04/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
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」