Dockerの基礎から応用を学ぶために使用した技術書3選

Docker初心者の私がDockerを学ぶために使用したDocker技術書を3冊をご紹介します。

私自身がDockerの初心者ということもあり、Dockerを基礎から学んでいきたいと思い購入した技術書たちです。

## Docker技術書 [基礎編]
基礎を学ぶ1冊目は[開発系エンジニアのためのDocker絵とき入門]です。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/dba33b54-c57c-5eea-76af-80b63eb128b9.png)](https://amzn.to/45xH7L5)

### 章立て
| Key | Value |
| :----------- | :----------- |
| 第1部 | 仮想化とDockerについての基礎知識 |
| 第2部 | Dockerコンテナの活用例 |
| 第3部 | Dockerイメージの活用例 |
| 第4部 | Dockerfileの活用例 |
| 第5部 | Dockerコンテナの活用例 発展編 |
| 第6部 | ウェブサービス開発環境の構築例 |
| 第7部 | 実運用における工夫とトラブルシュート |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/1be426a7-3b54-8a3f-8cbb-a2490f077871.png)


目次はこんな感じになっており、全7部の構成となっております。
Dockerのインストール方法はWindowsもMacも両方解説されているので、どちらのOSを使っていたとしても安心です。

こちらの本、私が今まで見てきたDocker本の中でも群を抜いてわかりやすいと感じました。
色々なDockerの記事や本を読んできましたが、大抵のものはコマンドの説明が詳しく書かれていなかったりし、読み進めてはいるものの、実際に何をやっているのかがわからないといったことが大半でした。

しかしこちらの本は各コマンドの意味を丁寧に解説されており、また図を使って解説されているのでDocker初心者でも非常に読みやすい構成となっております。

例えば、よくある`--rm`というオプション
こちらについても図とハンズオンを用いて「コンテナ停止時に自動で削除する」ということがわかるように解説されています。


同様に`-it`というオプションがよく理解できていなかったのですが、
| ショート | ロング | 意味 | 用途 |
| :----------- | :----------- | :----------- | :----------- |
| `-i` | `--interactive` | コンテナの標準入力に接続する | コンテナを対話操作する |
| `-t` | `--tty` | 疑似ターミナルを割り当てる | コンテナを対話操作する |

上記のように解説されており、`--tty`オプションはコンテナをターミナルで操作するために必要で`--interactive`とセットでものであり、
コンテナにキーボードで文字を入力するために必要なオプションですよ、ということがわかりやすく解説されており、理解するのに苦労しませんでした。



本書のすべてのオプションはオプションをその意味がわかりやすくするためにロングオプションで表記されています。


### コマンドについて
本書のコマンドは`$ docker container run`のように2017年にリリースされたv1.13で登場したサブコマンドを用いた内容ですべてのコマンドが解説されています。

以前は`$ docker run` や `docker build`のようにdocker直下にコマンドが作られていたようですが、直下のコマンドが増えすぎてしまったためにサブコマンドが整理され、
`$ docker run` は `$ docker container run`
`$ docker build` は `$ docker image build`などとサブコマンドを使うことで、より分かりやすいコマンド表記になっております。

Dockerの基本的なコマンド操作はこちらの本で学んでおくと良いでしょう。

## Docker技術書 [応用編]
[開発系エンジニアのためのDocker絵とき入門]でDockerの基礎を学んだら次は応用編です。
応用編を学ぶための本は[Docker/Kubernetes実践コンテナ開発入門]です。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/19fbd742-5ff0-aaa6-1ed1-b5a1e9ecfc2b.png)](https://amzn.to/3z8QZ1Q)

### 章立て
| Key | Value |
| :----------- | :----------- |
| 1. | コンテナとDockerの基礎 |
| 2． | コンテナのデプロイ |
| 3． | 実用的なコンテナの構築とデプロイ |
| 4． | 複数コンテナ構成でのアプリケーション構築 |
| 5． | Kubernetes入門 |
| 6． | Kubernetesのデプロイ・クラスタ構築 |
| 7． | Kubernetesの発展的な利用 |
| 8． | Kubernetesアプリケーションのパッケージング |
| 9． | コンテナの運用 |
| 10． | 最適なコンテナイメージ作成と運用 |
| 11． | コンテナにおける継続的デリバリー |
| 12． | コンテナのさまざまな活用方法 |
| Appendix-A． | 開発ツールのセットアップ |
| Appendix-B． | さまざまなコンテナオーケストレーション環境 |
| Appendix-C． | コンテナ開発・運用Tips |


Dockerの基礎が全く分かっていない状態からこの本に入ると正直挫折するかと思いますが、[開発系エンジニアのためのDocker絵とき入門]で基礎を学んだ後であれば、ある程度は読めるようになってくるかと思います。

[開発系エンジニアのためのDocker絵とき入門]と比較すると文字が多いです。
そのため基礎がわかってないと取っつきにくくて、挫折してしまうというわけです。

しかし、こちらの本は基礎的なことだけでなく応用的なことまで網羅しているので、より実践的言える内容でしょう。

[開発系エンジニアのためのDocker絵とき入門]ではDockerの基本的なコマンドについて学びましたが、[Docker/Kubernetes実践コンテナ開発入門]ではDocker Composeについて学んでいきます。

以下一部を抜粋します。

### Docker Composeの解説
Docker Composeによる単一コンテナの実行方法から、複数コンテナの実行方法までcompose.ymlの例が載っていますので、簡易的なアプリケーション環境の構築をハンズオンすることができます。

compose.ymlを使ってコンテナが作られるアーキテクチャは以下の通りです。[^1]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/52e183f9-fb44-2240-8af6-5321885e1519.png)


### クレデンシャル(秘匿情報)の扱い方
コンテナの外からクレデンシャルをできるだけ安全に渡すためのsecretsの仕組みを使う。
mysql:8.0.33のコンテナにはrootパスワードを直接渡すMYSQL_ROOT_PASSWORDの他に、パスワードが記述されたファイルを渡すMYSQL_ROOT_PASSWORD_FILEという環境変数も備えています。

```yml
version: "3.9"

services:

    mysql:
        container_name: mysql
        image: mysql:8.0.33
        environment:
            MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password ## ①
            MYSQL_DATABASE: test
        sectets: ## ②
            - mysql_root_password

secrets: ## ③
    mysql_root_password: 
        file: ./mysql_root_password

```
##③で定義したsecrets要素ではコンテナの外(この場合ホスト環境)にクレデンシャル情報を記述したファイルを用意しておき、
##②で③で用意されたクレデンシャルファイルをコンテナにマウントすることで、
##①コンテナ内部で/run/secretsディレクトリにmysql_root_passwordを参照することができます。

Gitなどのバージョン管理システムで各ファイルを管理する場合にはクレデンシャルのファイルを`.gitignore`ファイルに記述することでバージョン管理の対象外とすることができます。


### 複数コンテナ構成でのアプリケーション構築
複数コンテナ構成でのアプリケーション構築の章では以下のようなアーキテクチャをもとにDockerfile、Compose.ymlなどのコードを記述していくハンズオンとなっております。

![IMG_1844.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/2b9900c9-e8b7-1b80-6777-76af1e03a54a.jpeg)


## Docker技術書 [概念理解編]
ここまで紹介した2冊のDocker本はハンズオンがメインの書籍でしたが、次に紹介する技術書はDockerの概念を丁寧な図解で解説している[イラストでわかるDockerとKubernetes(改訂版)]です。
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/680e62b7-7a2d-efe4-08e8-71174308260f.png)](https://amzn.to/3Vzlup4)

ハンズオンをしていて、この部分のアーキテクチャってどうなってるんだっけ？を解消してくれる本です。

Dockerから docker buildする際の図やコンテナイメージのレイヤー構造なども色付きの図で解説してくれています。
![IMG_1845.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/81a44613-31fe-c4d7-aeec-565bc4de85b8.jpeg)

![IMG_1846.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379725/aa1b8138-5941-ceaa-1dec-16afb0b14f34.jpeg)

## まとめ
いかがでしたでしょうか？
ご紹介した3冊でDockerを学習する際には、以下の要領で学んでいくとよいでしょう。
1. [開発系エンジニアのためのDocker絵とき入門]でDockerの基礎を学ぶ
2. [Docker/Kubernetes実践コンテナ開発入門]でDockerの応用を学ぶ
3. [イラストでわかるDockerとKubernetes(改訂版)]で1. 2. でわからなかった概念を補充する

こちらの記事が参考になれば幸いです。

個人ブログや会社ブログも執筆しているのでご興味ある方はご覧ください。

https://kyrieee.com


https://www.agent-grow.com/self20percent/author/yuki_izumi/


[^1]:こちらの内容は抜粋した内容ではなく筆者がオリジナルで加筆したものです。