ITエンジニアになる!チャレンジDocker仮想化環境構築入門


ITエンジニアになる! チャレンジDocker仮想化環境構築入門


秀和システム


著者:小島一也


はじめに
目次

Chapter 0 インフラエンジニアになる!
0-1 インフラエンジニアってどんな仕事?
 インフラエンジニアの仕事とは
 インフラエンジニアに必要とされるスキル
 インフラエンジニアの立ち位置
0-2 インフラエンジニアあるある
 インフラ障害時の復旧対応
 インフラ環境は正常に動作しているのが当たり前
 障害に備えた環境構築

Mission 1 Dockerを使ってRails開発環境を構築せよ
Chapter 1 Dockerについて理解しよう
1-1 Dockerとは何かを理解しよう
 Dockerとは
 Column VirtualBoxとは?
  コンテナのアプリケーションはどこで実行されるのか?
  Dockerがプラットフォームと呼ばれる理由
1-2 従来の仮想化との違いを理解しよう
 Dockerを使うメリットとデメリットは?
  コンテナとOSの関係について
 Column 構成管理ツールとは?

Chapter 2 Dockerをインストールしよう
2-1 Dockerのソフトウェアの種類
 Dockerのエディションについて
 Dockerのバージョンについて
  Linux OSでDockerを動かすには?
2-2 Docker for Macのインストール
 Docker for Macのダウンロード手順
  Docker Storeとは
 Docker for Macのインストール手順
  Dockerインストール後の動作確認について
2-3 Docker for Windowsのインストール
 Docker for Windowsのインストール手順
  LinuxコンテナとWindowsコンテナの動作モードの違いについて
2-4 WindowsへのDocker Toolboxのインストール
 Docker Toolboxとは
 Docker Toolboxのダウンロード
  Docker Toolboxのコンポーネントについて

Chapter 3 コンテナの起動方法を理解しよう
3-1 コンテナの実行と実行時の動作
 docker runコマンド実行による動作
  docker runコマンドについて
3-2 Docker Hubとは
 Docker Hubの概要
 公開されているイメージを検索する
  Docker Hubのイメージの見方について
 Docker Hub以外のレジストリ
  Docker Hub以外のレジストリについて
3-3 Dockerイメージとは
 Dockerイメージとは
  Dockerイメージの構造について
 Union File Systemのメリット
3-4 コンテナ起動時のコマンド指定
 コンテナでのコマンド実行
  コンテナ起動時にコマンドを指定しなかった場合の動作について
3-5 Dockerイメージの管理
 ダウンロード済みDockerイメージの一覧表示について
 Dockerイメージの削除コマンドについて
  docker rmiコマンドのエラーについて
  Dockerイメージのダウンロード時に流れるメッセージの意味について
3-6 Dockerfileとは
 Dockerfileとは
 Dockerfileの記述方法
  Dockerfileに命令を記述する順序や、レイヤ数について
3-7 Dockerイメージのビルド
 Dockerfileによるビルド方法
  docker buildコマンドで使用されるDockerfileとビルドコンテキストについて
3-8 Docker Hubのアカウント作成
 Docker Hubのアカウント登録
  Docker IDの用途について
3-9 Docker Hubへのイメージのpush方法
 Docker Hubへのイメージのpush手順
 docker loginコマンドによるレジストリサービスへのログイン
  Docker Hub以外のレジストリサービスへのログインについて
 docker tagコマンドによるイメージへのタグ付け
 docker pushコマンドによるレジストリへのイメージのpush
  リポジトリのPublic、Privateの違いについて
3-10 nginxコンテナの実行とデタッチドモード
 nginxコンテナの起動
  Docker Toolboxを使用している場合の、仮想マシンのIPアドレス
  nginxコンテナの起動時の動作について
3-11 ローカルのファイル/フォルダをコンテナに共有する
 ローカルのファイル/フォルダをコンテナに共有する
  コンテナ実行の失敗について
  コンテナの削除失敗について
3-12 DockerfileのCOPY命令、ADD命令について
 nginxの設定ファイルを変更してイメージに含める方法
  DockerfileのCOPY命令とADD命令の違いについて
  nginxのサービス再起動について
3-13 コンテナの状態を知る
 Dockerコンテナのライフサイクルとは
 Dockerコンテナの様々な状態について
 状態のステータス遷移について
 コンテナの状態の確認
  作成したコンテナの確認について
3-14 コンテナへのシェル接続
 コンテナ起動時に付けるオプションについて
 docker attachコマンドを使用したシェルへの接続
  attachしたコンテナのシェルをexitコマンドで抜けた際の動作について
 docker execコマンドを使用したシェルへの接続
  docker attachコマンドとdocker execコマンドのシェル接続の動作の
  違いについて
3-15 コンテナを元にしたイメージ作成
 コンテナのコミットとは
  コミットの使い道
 コンテナの状態をコミットしてイメージを作成する
3-16 コンテナのリンク機能
 コンテナのリンクとは
  linkフラグの使い道
 リンク機能の動作確認

Chapter 4 手動で行うビルドの手間をなくして、自動化しよう
4-1 Automated Buildの概要
 Automated Buildとは
 Automated Build(自動ビルド)の仕組み
4-2 GitHubのアカウント作成とリポジトリの作成
 GitHubの概要
 GitHubへのアカウント登録とリポジトリ作成
 gitコマンドのインストール
4-3 Automated Buildの設定
 Docker HubへのAutomated Build(自動ビルド)の設定
  GitHubにリンクする際の選択肢について
4-4 Automated Buildの実行
 gitの初期設定
 リポジトリの初期設定
  GitHubのリポジトリを使い始めるには
 Column gitの操作について
 Dockerfileの作成とPush
  自動ビルドの状況確認について

Chapter 5 Docker Machineを使用してDocker用の仮想マシンを作成しよう
5-1 Docker Machineとは
 Docker Machineとは何か
 Docker Machineで仮想マシンを立ち上げる際に必要な仮想化ソフトウェア
  Docker Machineで使用する仮想化ソフトウェアについて
5-2 Docker Machineを使用したDockerホストの管理(VirtualBoxドライバを使用する場合)
 docker-machineコマンドの使用方法
  docker-machineコマンドで起動したDockerホストを使用するには
  Docker Machineで起動したnginxコンテナにアクセスできない理由
5-3 Docker Machineを使用したDockerホストの管理 (Hyper-Vドライバを使用する場合)
 Docker for WindowsでDocker Machineを使用する場合の違い
  AdministratorでDocker Machineを実行する方法について
  hello-worldコンテナを起動できなかった原因について
5-4 Amazon Web Servicesのアカウントを作成しよう
 Amazon Web Services(AWS)のアカウント作成
5-5 AWSへのDockerホストのプロビジョニング
 IAMを使用したユーザーの作成
  Docker Machineで使用するAWSユーザーの作成について
 アクセスキーの設定
  アクセスキーの設定方法について
  EC2インスタンスで起動しているコンテナへのアクセスについて
5-6 Google Cloud Platformのアカウント作成
 Google Cloud Platform(GCP)のアカウント作成
5-7 GCPへのDockerホストのプロビジョニング
 IAMを使用したサービスアカウントの作成
  Docker Machineで使用するサービスアカウントの作成について
 Docker Machineでインスタンスを削除する

Chapter 6 Dockerのネットワークを設定してコンテナ間のネットワークを構築しよう
6-1 デフォルトのブリッジネットワークとユーザー定義のブリッジネットワーク
 ブリッジネットワークとは何か
  bridgeネットワークにおいてコンテナ名で名前解決する方法について
6-2 ノンネットワークとホストネットワーク
 ノンネットワーク、ホストネットワークとは何か
 ノンネットワークの設定
  ノンネットワークの割り当てが失敗した理由について
 ホストネットワークの設定
6-3 スタンドアローンSwarmのオーバーレイネットワーク
 オーバーレイネットワークとは
 スタンドアローンSwarmと今回作成する環境構成について
  マルチホストネットワーク環境の各ホストの役割について
 Swarmクラスタの作成
  スタンドアローンSwarmの動作状況の確認について
 オーバーレイネットワークの作成
  オーバーレイネットワークをSwarmクラスタ全体に反映する方法
 オーバーレイネットワークを介したエージェントノードからマスターノードへのアクセス
  Swarmクラスタでコンテナを実行する際の注意点

Chapter 7 Dockerのファイル管理について理解しよう
7-1 Dockerのファイル管理の概要
 Dockerコンテナ起動後に作成されたファイルやファイルの修正について
 Dockerのマウントタイプの種類について
  マウントタイプの使い分けについて
7-2 volumeを使ってみよう
 volumeの作成、確認、削除コマンドについて
 volumeのマウント方法について
 既に存在するディレクトリへのvolumeのマウントについて
  元々コンテナに存在するディレクトリへvolumeをマウントした場合の
  動作について
 読み取り専用でのvolumeのマウントについて
7-3 Bind Mountを使ってみよう
 Bind Mount(バインドマウント)の設定方法
  -vオプション、–mountオプションの使い分けについて
 コンテナのバインドマウントの設定を確認する方法
 読み取り専用でのバインドマウント
 バインドマウント使用時の注意点について
7-4 tmpfsを使ってみよう
 tmpfsの設定方法
  メモリが不足してしまった場合の動作について
 tmpfs使用時のオプション

Chapter 8 複数の役割のコンテナをまとめて起動しよう
8-1 Docker Composeの概要
 Docker Composeとは何か
 Column YAMLとは
 Docker Composeでアプリケーション実行環境を立ち上げる手順
 docker-compose.ymlの記述方法
  servicesの下のサービス名について
  volumesの設定について
  docker-composeで起動したコンテナのコンテナ間通信について
8-2 Docker Composeを使用したRuby on Railsの開発環境構築
 構築するRails開発環境について
 Rails実行環境のイメージを作成するためのDockerfileの作成
 Gemfileの作成
 Gemfile.lockの作成
 docker-compose.ymlの作成
  先輩のレビューによる指摘箇所
 ビルドの実行とRailsのプロジェクトの作成
 Railsで使用するデータベースの設定と作成
  docker-compose up実行後の状態について
 docker-compose upで立ち上げたコンテナが停止してしまった原因について
 Railsのscaffoldの機能を使用したユーザー名管理機能の作成
 docker-composeコマンドを使用したコンテナの停止、削除
8-3 Docker Composeを使用したDjangoの開発環境構築
 構築するDjango開発環境について
 Django実行環境のイメージを作成するためのDockerfileの作成
 requirements.txtの作成
 docker-compose.ymlの作成
 Djangoプロジェクトの作成
 Djangoのデータベース設定とWebサーバーの起動

Mission 2 RailsコンテナをAWSにプロビジョニングせよ
Chapter 9 Swarmモードによるクラスタ構成の構築
9-1 Docker Swarmの概要
 Swarmモードとは
 Swarmモードのクラスタ構成について
  Swarmモードのクラスタリング構成について
 Swarmモードのオーケストレーション機能について
9-2 Swarmクラスタの作成
 作成するSwarmクラスタの構成について
 Swarmクラスタを組む仮想マシンの作成
 Swarmクラスタの作成
  docker swarm joinコマンドについて
9-3 サービスとタスク
 Swarmモードにおけるサービスとは
 Swarmモードにおけるタスクとは
 サービスとタスクのイメージ図
 サービスの作成
  タスクの割り当て状況の確認方法について
9-4 サービスの管理コマンド
 サービスの作成コマンド
 サービスの更新コマンド
 サービスのロールバックコマンド
 サービスの詳しい情報を表示するコマンド
 サービスで作成されたタスクの情報を表示するコマンド
  docker service psコマンドの出力結果について
 サービスの削除コマンド
 タスクの割り振り先を指定する方法について
  特定のノードにタスクを割り振る方法について
9-5 ルーティングメッシュ
 ルーティングメッシュとは
  Swarmロードバランサーを使用しない場合について
9-6 グローバルモードとレプリカモード
 グローバルモードとレプリカモードとは
 グローバルモードでサービスを作成する
9-7 Swarmモードの可用性
 Swarmモードにおける可用性について
 複数台構成のマネージャノードについて
  マネージャノードの台数について
 複数台構成のワーカーノードについて
  ワーカーノードが一度停止した後に復旧した場合のサービスの動作について
9-8 ローリングアップデート
 ローリングアップデートとは
 ローリングアップデートのオプション
  ローリングアップデートに関連するオプションについて
 ローリングアップデートの実行
9-9 サービスのスケール
 サービスのスケールとは
 サービスのスケールコマンド
9-10 ノードのアベイラビリティ
 ノードのアベイラビリティとは
 アベイラビリティの変更
 アベイラビリティ変更の用途
  アベイラビリティを使い分ける用途
9-11 Composeファイルを使用したサービスの作成
 Composeファイルを使用してサービスを管理するメリット
 Composeファイルを使用してWordPressのサービスを作成する
  Dockerにおけるスタックとは

Chapter 10 AWSを使用したRailsアプリケーションのデプロイ
10-1 Docker Hubへのプライベートリポジトリ作成
 プライベートリポジトリの作成
10-2 本番リリース用イメージの作成
 本番リリース時に必要なイメージを検討する
  本番環境で使用するデータベースサーバーについて
 本番リリース用にRailsアプリケーションのイメージを作成する
10-3 セキュリティグループの作成
 セキュリティグループとは
 Swarmモード、Railsの動作に必要なセキュリティグループの設定
 セキュリティグループの作成
10-4 AWSのEC2を使用したSwarmクラスタ作成
 AWSへのSwarmクラスタ作成
10-5 RDSインスタンス作成
 RDSへのインスタンス作成
10-6 RailsアプリケーションをAWSのSwarmノードで実行する
 Railsアプリケーションで必要な環境変数の設定
  サービス作成時の環境変数の設定について
  サービス作成時のエラーメッセージについて

Mission 3 Kubernetesを試してみよう
Chapter 11 Kubernetesとは
11-1 Kubernetesの概要
 Kubernetesとは
 Kubernetesのクラスタリング
 Kubernetesの構成するコンポーネント
 Kubernetesでのコンテナの扱い
11-2 ローカルにKubernetesの環境を構築しよう
 Docker for Macのエッジ版をインストール
 Docker for Mac エッジ版のKubernetesの機能を有効化
 Kubernetesの動作を確認する
  Kubernetesの動作確認について
11-3 Kubernetesでnginxを動作させてみよう
 コマンドラインでのPodのデプロイ
  Pod内のコンテナへのアクセス方法
  Kubernetesのオブジェクトの削除方法

おわりに
索引
コマンド索引

書籍目次

Posted by shi-n