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のオブジェクトの削除方法
おわりに
索引
コマンド索引