Docker学習ログ(個人用メモ)(情報のごった煮)



## Dockerを学習する目的
可搬性のある開発環境構築ができるようになりたい　あと自分で適切な判断が下せる水準までレベルアップしたい

## この記事の概要

この記事は学習の進捗状況により適宜内容の追記を行います。個人用のメモやログとして公開しております。

コメント欄でおすすめのチュートリアル・記事・ドキュメント・学習方法・動画がありましたら是非教えてください　あと、質問などにも答えて頂けると助かります。頂いたコメントなどはこの記事に適宜反映していこうと思います。


### 初手O'REILLY Docker
出版日が2016年08月という古めの本の為、あんまり実践的な本ではないなと感じてはいるが、とりあえずざっくりとした概要を掴むのならO'REILLY が一番優れていると信じているので読む。351P 値段3,600円　中古で購入　人気があるのか中古市場でも中々高額。

### O'REILLY Docker　簡易的な目次

| 部   | 章   | 目次                          | P   |
| --- | --- | --------------------------- | --- |
| 1   | 1   | コンテナとはなにか、そしてなぜ注目されているのか    | 3   |
|     | 2   | インストール                      | 13  |
|     | 3   | はじめの一歩                      | 19  |
|     | 4   | Dockerの基礎                   | 35  |
| 2   |     | Dockerのあるソフトウェアライフサイクル      | 69  |
|     | 5   | 開発でのDockerの利用               | 71  |
|     | 6   | シンプルなWebアプリケーションの作成         | 85  |
|     | 7   | イメージの配布                     | 99  |
|     | 8   | Dockerを使った継続的なインテグレーションとテスト | 117 |
|     | 9   | コンテナのデプロイ                   | 139 |
|     | 10  | ロギングとモニタリング                 | 177 |
| 3   |     | ツールとテクニック                   | 207 |
|     | 11  | ネットワーキングとサービスディスカバリ         | 209 |
|     | 12  | オーケストレーション、クラスタリング、管理       | 257 |
|     | 13  | セキュリティとコンテナに対する制限           | 301 |
### O'REILLY Docker　読んだ感想
2部の7章まではギリなんとかついていけてたが、Dockerを使った継続的なインテグレーションとテストの章からは高度な内容になり、少し置いてけぼりを食らった気がします。jenkinsがわからん。それまでの章はハンズオン形式でDockerに慣れていこうよという形式でした。記事を書いてアウトプットするのに夢中でハンズオンできていないので、ソースコードを後で読み込んで慣れようと思います。(古い本なので動くかどうか少し怪しいのもある)　後述にDocker周辺・関連技術用語集を作りました。とにかく多くの聞きなれない専門用語が多く、中々素早く読めるような本ではありません。腰を据えて適宜ググりながら読む本だと思います。

O'REILLY Docker 内のソースコード置き場
[Github リポジトリ](https://github.com/using-docker)
[筆者のプロフィールページ](https://github.com/amouat)
### 次に読む本 Docker実践ガイド 第3版 (impress top gear)

2023/2/21に出版の中々新しめの本。人気があるらしく第3版も出ているので内容にも期待できそう。値段Kindle版 3,762円

### Docker実践ガイド 第3版　簡易的な目次

| 章   | 目次                          |
| --- | --------------------------- |
| 1   | Dockerとは                    |
| 2   | Docker導入前の準備                |
| 3   | Docker Community Edition    |
| 4   | Dockerfile                  |
| 5   | ネットワーキング                    |
| 6   | 資源管理                        |
| 7   | 管理ツール                       |
| 8   | Kubernetesによるコンテナオーケストレーション |
| 9   | コンテナ管理プラットフォーム              |
### Docker実践ガイド 第3版 読んだ感想
+ 未読

### (ほぼ)公式リンク集
+ [日本語版公式](https://www.docker.com/ja-jp/)
+ [Dockerhub](https://hub.docker.com/)
+ [日本語版DockerDesktop](https://www.docker.com/ja-jp/products/docker-desktop/)
+ [日本語版公式docs](https://docs.docker.jp/index.html)
+ [公式docs](https://docs.docker.com/)

### Docker周辺・関連技術用語集

| 用語                      | 意味                                                                                        |
| ----------------------- | ----------------------------------------------------------------------------------------- |
| Docker                  | アプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォーム                                                 |
| Dockerhub               | Dockerイメージ（コンテナ）の共有サービス                                                                   |
| DockerDesktop           | docker用のGUIソフト                                                                            |
| Dockerimage             | Dockerコンテナの動作環境となるテンプレートファイル                                                              |
| Dockerfile              | Dockerfile はテキストファイルであり、イメージを作り上げるために実行するコマンドライン命令を、すべてこのファイルに含められる。                      |
| DockerToolbox           | Docker Toolbox は Mac と Windows システム上に Docker 環境を迅速にインストールして起動します。                         |
| Swarm                   | Docker コンテナをクラスタリングして管理するオープンソースのツール                                                      |
| Kitematic               | Mac や Windows PC 上で、Docker を簡単かつ流れるように使うために構築されたオープンソースのプロジェクト　開発が中止されてるっぽい               |
| Machine                 | Docker Engine を搭載した仮想マシン（Docker ホスト）を作成・管理するツール                                           |
| コンテナ                    | コードと依存関係を一緒にパッケージ化するアプリ レイヤーの抽象化                                                          |
| Dockerデーモン              | Dockerデーモン_は Linux のデーモンプロセス                                                              |
| Dockerクライアント            | Docker とのやりとりを行うためのもの                                                                     |
| Dockerレジストリ             | レジストリ（registry）とは、ストレージとコンテント配送システムであり、Docker イメージの名前を異なったタグを付けられたバージョンで保持                |
| SElinux                 | SELinux とは _Security-Enhanced Linux の略_で、強制アクセス制御を実現する Linux システム用のセキュリティ機構               |
| Dockerエンジン              | アプリケーションを構築して コンテナ化するためのオープンソースの コンテナ化技術                                                  |
| DockerCompose           | 複数のコンテナを効率的に操作するためのツール                                                                    |
| Docker Trusted Registry | 元々Docker Hub Enterpriseと呼ばれていたDockerプライベートリポジトリを実行するサーバー                                  |
| オーケストレーション              | 複数のシステムやアプリケーション、サービスを調整して実行する技術                                                          |
| クラスタ管理                  | 複数のコンピュータをまとめて1つのシステムとして管理すること                                                            |
| ホスティング                  | インターネット上でウェブサイトやメールサービスなどのデータを運用できるようにするサービス                                              |
| .dockerignore           | DockerfileのCOPYコマンドでコピーしたくないファイルやディレクトリを指定するファイルのこと                                       |
| SSH                     | ネットワークを介して別のコンピューターやネットワーク機器に安全に接続するためのプロトコル                                              |
| Dockerfileの命令           | https://qiita.com/FumiyaShibusawa/items/a0be39d28139a044157d                              |
| Docker リンク              | 同一ホスト上のコンテナ間で通信する際に、接続したい相手のネットワーク情報(IPアドレスなど）を取得する仕組み。                                   |
| Docker　ボリューム            | _Docker_ コンテナーにおいて生成され利用されるデータを、永続的に保持する目的で利用される仕組みです。                                    |
| Docker コマンド             | [docs-ja](https://docs.docker.jp/engine/reference/commandline/index.html)                 |
| サスペンド                   | IT用語として、実行中のプログラムやデバイスを一時停止させること                                                          |
| Docker Registry         | Docker Registryは、Dockerイメージを一元管理するためのリポジトリサービスです。                                         |
| jenkins                 | CI/CDツールの1つで、アプリケーションのビルド、テスト、デプロイといったタスク実行を自動化                                           |
| Docker-in-Docker        | コンテナ内にホストマシンとは完全に独立した_docker_環境を構築する手法                                                    |
| スモークテスト                 | 開発途上のソフトウェアをテスト(試験)する手法の一つで、開発・修正したソフトウェアを実行可能な状態に組み立て、起動するかどうかや基本的な機能が動作するかなどをざっと確認すること。 |
| 継続的インテグレーション            | 開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行する DevOps ソフトウェア開発の手法                |
| _継続的デリバリー_              | ソフトウェア開発手法の 1 つで、コード変更が発生すると、自動的に実稼働環境へのリリース準備が実行されるというもの                                 |
| シェルスクリプト                | オペレーティングシステムのシェルまたはコマンドラインインタプリタから実行可能なコマンドの一連の流れをファイルにして再利用できるようにしたもの                    |
| プロセスマネージャ               | プロセスの運用活動を監視し、プロセスが期待通り実行されていることに責任を負う                                                    |
| Ansible                 | IT機器の管理を効率化・自動化するオープンソースの構成管理ツールです。 Ansibleを使うことでIT機器の煩雑な設定作業が自動化されるため、管理者の負担を大幅に軽減できます。  |
| cAdvisor                | Googleが提供および管理するオープンソースのコンテナ監視ツール                                                         |
| prometheus              | プル型のリソース監視ソフトウェア                                                                          |
| アンバサダー                  | コンテナ同士が通信する                                                                               |
| etcd                    | 設定情報の共有とサービス検出のための分散KVS                                                                   |
| SkyDNS                  | ググってもわからない                                                                                |
| Consul                  | クラスタ管理ツール                                                                                 |
| zookeeper               | 設定情報の集中管理や名前付けなどのサービスを提供するソフトウェア                                                          |
| サービスディスカバリ              | サービスのインスタンスがもつネットワーク上の位置を決定すること                                                           |
| SmartStack              |                                                                                           |
| Eureka                  |                                                                                           |
| WeaveDNS                |                                                                                           |
| Docker-discover         |                                                                                           |
| Flannel                 |                                                                                           |
| Calico                  |                                                                                           |
| Swarm                   |                                                                                           |
| fleet                   |                                                                                           |
| Kubernetes              |   コンテナの運用管理と自動化を行うために設計されたオープンソースソフトウェア                                                                                        |
| Mesos                   |                                                                                           |
| Marathon                |                                                                                           |
| Rancher                 |                                                                                           |
| Clocker                 |                                                                                           |
| Tutum                   |                                                                                           |
|                         |                                                                                           |
### 後で読む
+ [# 【入門】よく使う「Docker コマンド」一覧まとめ](https://www.kagoya.jp/howto/cloud/container/dockercommand/)
+ [Dockerのボリューム](https://zenn.dev/fdnsy/articles/e2024d73ec2bda)
+ [# Docker コマンドラインを使う](https://docs.docker.jp/engine/reference/commandline/cli.html)

### Dockerの情報を得るコマンド

| docker コマンド    | 説明                                 | リンク                                                                         |     |
| -------------- | ---------------------------------- | --------------------------------------------------------------------------- | --- |
| docker help    | `help` コマンドは各コマンドの使い方に関する情報を表示します。 | [docs-ja](https://docs.docker.jp/v19.03/swarm/reference/help.html)          |     |
| docker version | Docker バージョン情報を表示します。              | [docs-ja](https://docs.docker.jp/engine/reference/commandline/version.html) |     |
| docker info    | システムの幅広い情報を表示します。                  | [docs-ja](https://docs.docker.jp/engine/reference/commandline/info.html)    |     |

### コンテナの情報を得るコマンド

| docker コマンド    | 説明                                    | リンク                                                                         |
| -------------- | ------------------------------------- | --------------------------------------------------------------------------- |
| docker events  | サーバからリアルタイムのイベントを取得します。               | [docs-ja](https://docs.docker.jp/engine/reference/commandline/events.html)  |
| docker inspect | Docker オブジェクト上の ローレベル 情報を返します。        | [docs-ja](https://docs.docker.jp/engine/reference/commandline/inspect.html) |
| docker logs    | コンテナのログを取得します。                        | [docs-ja](https://docs.docker.jp/engine/reference/commandline/logs.html)    |
| docker port    | ポート 割り当て の一覧か、特定のコンテナに対する 割り当てを表示します。 | [docs-ja](https://docs.docker.jp/engine/reference/commandline/port.html)    |
| docker ps      | コンテナを一覧表示します。                         | [docs-ja](https://docs.docker.jp/engine/reference/commandline/ps.html)      |
| docker top     | コンテナで実行中のプロセスを表示します                   | [docs-ja](https://docs.docker.jp/engine/reference/commandline/top.html)     |
| docker diff    | コンテナのファイルシステム上で、ファイルやディレクトリの変更を調査します。 | [docs-ja](https://docs.docker.jp/engine/reference/commandline/diff.html)    |
### Docker要注意事項

| 攻撃名         |     |
| ----------- | --- |
| カーネルの不正利用   |     |
| Dos攻撃       |     |
| コンテナブレークアウト |     |
| 毒入りのイメージ    |     |
| 秘密情報の漏洩     |     |