とりとりとりぴ

ちょっと残しておきたいことをまとめています。

読書ログ:プログラマのためのDocker教科書 第2版

読んだ本

WINGSプロジェクト 阿佐 志保. プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化 (Japanese Edition) (Kindle Locations 92-93). Kindle Edition. f:id:toriChan:20210111020017j:plain

読んでみて

  • 最初の方はコンピュータの基礎用語から入っていてわかりやすい.
  • ただ初めて読むにも若干難しい単語がちらほらと出てきて,どこの層狙ってるのかあんまり分からない.
    • インフラを少しかじった人間がDocker導入したいというスタンスくらいならスラスラ読めそう.
  • コマンドの説明とかインストール方法とか丁寧に書かれている.知っている人だと少し冗長だなと思うところはあるかも.
    • Dockerを初めて導入するにのは良い.スクショがたくさんあって躓きにくそう.
    • コラムみたいなのはプラスαみたいな知識が得られてめっちゃいい
    • 図が結構書いてあってわかりやすい

気になった部分のメモ

1-3章

新しく覚えた単語

めっちゃ基本用語から書いてある.

オンプレミス オンプレってやたら聞くけど、あんまり意味理解していなかった。サーバやネットワーク機器を自社で調達し、システム要件に応じてインフラ構築し、ライセンスの管理やバージョンアップも自前で行う

パブリッククラウド インターネットを介して不特定多数に共有されるクラウドサービス GGPとかAWSとか使ってるやつだ。IaaS(Infrastructures as a serviceだっけ)は仮想マシンやストレージを選んで利用した時間やデータ量に応じて料金を支払う

プライベートクラウド 企業グループのみに提供されるクラウドサービス(図を見てもあんまり、パブリッククラウドと変わらなそう🤔

オンプレがむいている例

  • 高い可用性
  • 機密性が高い
  • 特殊要件

オンプレとクラウドが混在したハイブリッドクラウドや複数クラウド(GCP, Azure, AWSとか混在)を使ったマルチクラウドもよく使われるっぽい

継続的インテグレーション(CI) アプリケーションのコードを追加・修正するごとにテストを実行して確実に動作するコードを保持する手法

継続的デリバリー デプロイ方法の仕方、ブルーグリーンデプロイメントとかカナリアデプロイとかそういうやつ

Dockerの基本的な説明については元々あったイメージとはあまり変わらなかった。結構理解し始めているのかも?

DockerCompose(複数コンテナ一元管理) 複数のコンテナの構成情報をコードで定義して、コマンドを実行することでアプリケーションの実行環境を構成するコンテナ群を一元管理するためのツール。ただなんとなくcomposeコマンド打ってたけど、コンテナの構成情報を定義していたのか。便利ツール。composeファイルも常にコピペしてたしよくわかってなかった。

namespace コンテナを区画化する仕組み。実際のアクセスしている場所は変わらないんだけど、namespaceごとにコンテナが分けられてるように見せていることくらいはわかってるよ。

cgroups

  • リソース割り当ての仕組み

    • CPUの割り当ては親の割り当て量に依存していて、超えると親のcgroups制限にひっかかかる
  • ネットワークの仕組み

    • Dockerでは、NAPTの機能を使って接続する.1つのIPアドレスを複数のコンピュータで共有する技術で,IPアドレスとポート番号を交換する機能がある.一つのIPから複数のIPを変換する,IPマスカレードともいうらしい

$ calでカレンダー出てくるの知らなかった.衝撃すぎた.1番の学びだった

Docker networkみたいなコマンドでネットワークへの接続などの設定ができる

4章 Dockerコマンドの説明がいっぱい

Dockerのimageってインポートエクスポートのコマンドもあるっぽい. Docker container export/import 
Dockerファイルの受け渡しで個々のPCに必要なライブラリをpullすることが多いからimage直接動かせるの知らなかった

不要なイメージ・コンテナを一括削除

docker system prune

めっちゃ良さそう.知らなかった.超便利そう.暗記したいコマンド暫定No.1

5章

Dockerファイルの書き方が詳しく書いてある

マルチステージビルド アプリケーションをビルドするためのDockerイメージとプロダクション環境で実際に動作させるDockerイメージを同時に作成できる機能

ENTRYPOINT Docker container runコマンドを実行した時に実行される

ONBUILD ビルド完了後に実行される命令 若干雰囲気は違うかもだけど,ONBUILDをかくとGoのdeferコマンドみたいな感じで後で実行される,厳密にいうとイメージを設定してビルドした時に実行される Webコンテンツ開発とかで使われるっぽい

ヘルスチェック プロセスが正しく動いてるか確認する,(kubernetesでもあったなこれお)

6章

Docker hubとかgithubとかの公開とかその辺 公開したい時に調べれば良さそう.そんなにちゃんと読まなかった ラズパイでkubernetesクラスタ作りたい

7章 複数コンテナの運用管理

Docker-compose系のコマンドがめっちゃかかれている. Composeファイルの書き方,オプションの設定など

8章 マルチホスト環境でのDockerの実行環境構築

コンテナオーケストレーションツール 複数のホストマシン上でDockerを動作させて.高可用性(故障した時にも稼働できるような能力)/高拡張性(負荷が大きくなった時に処理を分散する)のアプリケーション実行環境を構築すること

9章 クラウド環境でのDockerオーケストレーション

コンテナオーケストレーションツールにkubernetesやDocker Engine, Apache Mesos, Marathonがある.Kubernetesと繋がった,なるほどね…
オーケストレーションツールにはkubernetesがメジャーなんだなこれ.

ここからkubernetes系の説明が始まる.

バックエンドデータベース(etcd) 分散キーバリューストア.etcdめっちゃみるけど何か全然わかってなかった.データベース なんだねこれ.kubernetesクラスタ構成を保持する分散KVS.どのようなpodをどう配置するかなどの構成情報を持っている(これGithubでコード見たら面白そう.

ノード > Pods(複数可能) > コンテナ(複数可能)

ReplicaSet これもめっちゃ聞くけどよく分からないやつ.簡単にいうと指定した数のPodを常に起動しておく仕組み.最低限のPod数を定義するってことかなぁ

Deployment Deployment = pods + replicaSet

Cloud source repositories GCPソースコードの管理ができるんだって,知らなかったー

GCPでDockerのイメージpushするのはやったことがあったので読み飛ばした. Blue/Greenデプロイメントのつなぎかえとかもあるので時間あったら試してみると楽しいかも

10章 クラウドを使ったDocker実行環境の運用管理

一番読みたい部分だけど一番ちゃんと読めてない.kurbernetes使ってシステム作ったときの運用管理について(正直Dockerあんまり関係ない)

ヘルスチェック 障害時に迅速に切り替えを行うために、現用機で障害が発生したことを検知する仕組み。サーバが健康かどうかを定期的にチェックする。ヘルスチェックは、サーバに対して一定間隔ごとに、なんらかの応答要求を出し、リプライが返ってくるかどうかで正常稼働を判断する。レイヤーが高くなるほど正確なヘルスチェックができますが、その分サーバに対して負荷もかかる。