【技術本】Docker実践ガイド第2版
https://amzn.to/4kEehyE
【技術本】Docker実践ガイド第2版
へポスト
書かれている内容は、Dockerを使用した複数コンテナを連携させた環境構築を繰り返して、各種機能(Dockerのコンテナ作成、起動、停止、破棄、各種引数設定、その他連携、管理など)を体系的に学べる記述になっている。そのため、業務レベルの作業未経験の初心者が読み始めると、最初からコマンドラインの引数パラメータをたくさん使用した場面に出くわすので、機能の絞り込みと整理に戸惑うかもしれない。初心者は「さわって学ぶクラウドインフラ docker基礎からのコンテナ構築」をオススメする。こちらは、単純な機能別に区切って実践していく形なので初心者でもわかりやすい。また、kindle版はkindle unlimitedの対象にもなっている。
さて話は戻るが、本書では基本機能に加え、応用レベルも含めて以下の内容を学べる。
・Docker Community Editionについて
・Docker Enterprise Editionについて
Universal Control Plane:Docker社純正のGUI ツール:ユーザ管理、コンテナ実行、コンテナオーケストレーション、負荷監視など、エンタープライズレベルで要求される機能を提供
Docker Trusted Registry:Dockerイメージの配信サービスを提供、管理GUIも提供、Dockerイメージの登録、セキュリティ脆弱性チェック機能を提供
・Docker Imageの作成、破棄、イメージの読み込み、イメージの書き出し
・Dockerfileを使ったイメージ作成
・コンテナのIPアドレス確認方法
・コンテナのアタッチ、デタッチ、シェルログイン
・コンテナの作成、起動(バックグラウンド起動含む)、停止、破棄
・コンテナのディスク領域提供、デバイスマウントなど
ボリュームマウント:Docker独自のボリューム
バイナリマウント:ホストOSのディスク領域にマウント
DVDドライブのマウント
サウンドカードの利用
Webカメラの利用
・コンテナのリソース状況確認
・コンテナ間の通信方法
ブリッジネットワーク:IPアドレスによる通信
Docker Swarmによる複数コンテナ通信
VXLANによるオーバレイネットワーク
MACLANによるホストOSとフラットなネットワーク
docker stackによる複数コンテナのグループ化
・コンテナ資源管理の方法
docker-composeによる複数コンテナの連携、依存性、環境変数設定
Docker Machineによる仮想マシン上のDocker管理
Docker Private RegistoryによるDockerイメージの社内配信、集中管理
PortainerによるDocker GUI管理ツール
GUIベースのコンテナ管理ツール
dockly:コマンドラインの仮想端末でコンテナの状況をグラフィカルに表示する管理ツール
Docker Swarm Visualizer:Docker Swarmクラスタ内のコンテナ状況をグラフィカルに表示
Cockpit:webブラウザを使ったコンテナ管理が可能
CRIUによるコンテナのライブマイグレーション
・コンテナ専用OS(CoreOS, RancherOS)での環境構築
・Kubernetesによるオーケストレーション:複数の物理サーバからなるマルチホストのdocker環境を倒語的に管理するフレームワーク
現状のDockerでできることをほぼ網羅して、実践を踏まえて紹介してくれている。ある程度の業務経験がある人で、Dockerの入門から応用まで体系的に学びたい人に価値が出てくる著作だと感じた。
以下、気になった内容メモ
---------
1章:Dockerとは
コンテナ:ホストOS上で独立したプロセスとして実行されるアプリケーション環境
OSの基本コマンド、アプリの実行バイナリ、ライブラリなどの実行環境全体をパッケージ化し、
それらをOSの分離された空間で実行する技術
従来のハイパーバイザー型の仮想化ソフトウェアに比べて極めて集約度の高い
(ハードウェア資源の消費や性能劣化の小さい)ITシステムを実現可能
世界中の開発者などが作ったOS/アプリケーション環境を、即座に利用することが可能
イミュイータブル(不変)インフラ
従来のようなパッチを適用して、不具合が発生して、環境構築の試行錯誤をするのから解放
問題あれば、コンテナを破棄し、途中まで環境構築されたコンテナイメージからやり直せばいい
迅速に構築、利用、破棄が行える。
ハードウェアの以降も簡単。dockerイメージを以降すればいい。環境構築不要
日々サービスが変化するシステムに適す
大量のコンテナを正常稼働させるシステム二するには、コンテナ自動配備、管理ソフトなど周辺ソフトも必要
オーケストレーションソフト:kubernetes
商用クローズドソースのソフトで明示的に動作確認がされてない。
HAクラスタなど正式対応していない
ベンダーとのサポート範囲を明確にする必要あり。
ミッションクリティカル領域でのdocker使用は控える。
ライブマイグレーション:完全サポート段階ではない。
稼働OS制約
ホストOSがlinuxの場合は、linux用のコンテナのみ稼働
Windowsコンテナと共存できない
>ハイパーバイザ型の仮想ソフトウェア必要
仮想ソフトウェア:
問題:
複数OSを集約した場合の性能劣化
OSとアプリを仲立ちする仮想ソフトウェア介在による障害発生時の問題切り分けの複雑化
ハイパーバイザ型仮想基盤とコンテナの違い
仮想基盤
ハイパーバイザーと呼ばれるソフトウェアが仮想的なハードウェアである仮想マシンを提供
仮想マシン
仮想BIOS
仮想CPU
仮想メモリ
仮想ディスク
仮想NIC
ゲストOSから、あたかも物理的なマシンで稼働しているかのように見える
ハードウェアをエミュレーション
コンテナ環境
ゲストOSに相当する分離された環境において、一般的なOSのブート手順がない
>オーバヘッドが少ないため、コンテナ起動・停止が高速
単一OS内で複数のコンテナがプロセスとして稼働
>リソース消費も少ない
ホストOS環境から直接実行されているため、コンテナ上のCPU利用はホストOSと同等
名前空間で、コンテナを管理
コンテナ同士を結びつけたり、見えないようフィルターもできる。
cgroup:ゲストOS内のリソースの使用割合をコントロール
一つのコンテナがリソースを食い尽くしてしまうのを防ぐ
2章:導入前の準備
Docker CE(コミュニティエディション)
Dockerを小規模に試す場合に適したエディション
大規模向け>有償Docker EE
デスクトップPC対応
Docker for Mac
v18.06以降はkubernetes内蔵
CentOS 7系でサポート:6系はテストされていない
ストレージドライバ:overlay2 > linuxディストリビューションで推奨
3章:Docker CE
Docker CEのインストール
Docker状態確認 docker info, docker version
Docker イメージの入手 docker image pull centos:7.5.1804
コンテナの起動 docker container run -it --name test02 centos:6.9 /bin/bash
IPアドレスの確認 yum install -y iprouteでap addr
Dockerイメージの作成
docker ontainer commit container id tag
コンテナ状態確認 docker container ls -a
イメージ一覧 docker image ls
コンテナ削除 docker container rm name
Dockerホストネーム指定 -h hostname
コンテナをバックグラウンド起動 -d
コンテナへのアタッチとでタッチ
コンテナの起動と停止:docker container start name, stop name
ホストOSからdockerコンテナへのディレクトリ提供
バイナリマウント
書き込み制限設定
ボリュームマウント
書き込み制限設定
tmpfsマウント:インメモリ
イメージのインポート docker image import
コンテナのインポート、エクスポート
Dockerイメージのセーブとロード:実ファイル書き出しと読み込み
docker image save, docker image load
リソース状況確認 docker container status
4章:docker file
docker fileを使ったイメージの作成
ミドルウェア:nginxなどの設定ファイルもコピーする処理を記述できる
引数で、環境変数を設定することも可能
ENTRYPOINTによる命令コマンド実行
マルチステージビルド:開発用、本番用のDockerイメージを1つのdockerfileで記述
HEALTHCHECKによる死活監視
SHELLによるシェルの変更 bashからtcshへの変更など
5章:ネットワーキング
ホストOS上でのコンテナ間の通信
ブリッジネットワーク:ホストのネットワークのIPアドレス割当
複数の物理ホストOSで稼働するdockerコンテナ同士の通信
・Docker Swarmによる複数コンテナの通信
VXLANによるオーバレイネットワーク
・Macvlanによるフラットなネットワーク作成
ホストOSとフラットなネットワーク、同一LANセグメントに
・Docker Swarmによるフラットネットワーク
・Docker Swarm: docker stackよ呼ばれる複数サービスのグループ化>管理簡略化
6章:資源管理
cpu,memory,disk,network資源の管理の仕組み
特定コンテナが資源を食い潰すことの防止
・CPU資源管理
・稼働するCPUコアの変更
・メモリ容量の制限
・ディスクi/o帯域幅の制限
GUIアプリ用コンテナ
GNOMEデスクトップ環境をVNC経由で利用できるコンテナ
コンテナでDVDドライブの利用:DVDドライブのマウント
コンテナでサウンドカードの利用
コンテナでWebカメラの利用
7章:管理ツール
・Docker-Compose
ymlファイルに、コンテナ同士の依存関係や環境変数、パラメータ指定して複数のコンテナを連携管理できる。
>wordpress環境のコンテナ、データベースコンテナを連携させたwordpress実行環境の構築
docker-compose経由でのコンテナんの停止、削除、起動
scaleコマンドによるコンテナのスケールアウト>コンテナごとにスケールできる
・Docker Machine
Dockerホストの構築
仮想マシン上のDockerホストを管理(作成・起動・操作・停止・削除)するソフトウェア
・Dockerイメージの社内配信、集中管理
Docker Private Registry=DPR
・Dockerに置けるGUI管理
Portainer:DockerのGUI管理ツール
・GUIベースのコンテナ管理ツール
dockly:コマンドラインの仮想端末でコンテナの状況をグラフィカルに表示する管理ツール
Docker Swarm Visualizer:Docker Swarmクラスタ内のコンテナ状況をグラフィカルに表示
Cockpit:webブラウザを使ったコンテナ管理が可能
・CRIUによるコンテナのライブマイグレーション
8章:CoreOSとRancherOS
コンテナOSの必要性
・OSで提供される機能を絞ることで脆弱性を持たないようにする
・コンテナ以外の利用でリソースが削がれることを防ぐ
・CoreOS:CoreOS社(現・RedHat)が提供するコンテナ専用OS
CoreOSでDocker起動環境を構築
・RancherOS:CoreOSと並んで広く利用されているコンテナ専用OS
RancherOSでDocker起動環境を構築
RancherOSは、Webブラウザから簡単にRancherOS上でコンテナを実行、管理できる
9章:Docker Enterprise Edition
高度なセキュリティ管理機能、多人数利用を想定したDockerイメージの管理、負荷監視
Universal Control Plane:Docker社純正のGUI ツール
ユーザ管理、コンテナ実行、コンテナオーケストレーション、負荷監視など、エンタープライズ
レベルで要求される機能を提供
Docker Trusted Registry:Dockerイメージの配信サービスを提供
管理GUIも提供、Dockerイメージの登録、セキュリティ脆弱性チェック機能を提供
10章:Kubernetesによるオーケストレーション
複数の物理サーバからなるマルチホストのdocker環境を倒語的に管理するフレームワーク
マスタノード、ワーカーノードの設定、構築
ReplicaSetリソースを使ったコンテナのスケール
付録A:dockerコマンドと使用例
付録B:Dockerfile命令一覧
付録C:Docker Swarmのコマンド一覧
付録D:Docker Composeのコマンド一覧
へポスト
