[Docker]入門から導入までに読むべき記事集

# 前置き
* Dockerを知らない人からスタートしてDockerを導入するまでに最低限必要そうな知識を集めてみました
* 指摘があればコメントにお願いします 
  * 「こういう視点の記事も入れたほうがいいんじゃないの」とか
* 監視等は後日Kubernetesの記事としてまとめるつもりです
  * そういうのってスタンドアロンのDockerであまり必要にならないと思うので  

# 入門編
## もしVM・仮想化がわからなければ読む
* [仮想マシンとは？よく聞く"仮想化" "仮想マシン"の基礎知識と特徴を解説](https://ferret-plus.com/8461)
    * 仮想化の概念をつかむのには良いが、次の点に留意
      * この記事で解説されているのはDockerが流行る前のホスト型・ハイパーバイザ型と呼ばれる仮想化技術
      * Dockerの用いているコンテナ型仮想化との違いは次の記事で出てくる

## dockerとは何かをつかむ
* [「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門](https://qiita.com/bremen/items/4604f530fe25786240db)

## dockerを触ってみる
### 構築(自分の環境に合わせて記事を選ぶ)
* [macOSでDocker環境構築](https://qiita.com/mks1412/items/9356187a3bcb20b64e82)
* [Docker for Windows をインストールしCentOSを起動するまでの手順をまとめる](https://www.orangeitems.com/entry/2018/06/18/153510)
  * Windows 10 Professional　か Enterprise 64-bit でないとできない
  * VirtualBox等は動かなくなる
* [VirtualBox+Vagrantで楽々Docker環境構築（Windows）](https://qiita.com/mikoski01/items/7ed36ac9e402658bb93e)
  * Windowsで上の記事の条件を満たせない場合はこっち
  * Windows上に仮想マシンを立て、仮想マシンにLinuxをインストールして、 そのLinux上でDockerを使う
  * 記事内にDocker toolboxへの言及があるがDocker toolboxは廃止された
* [最も簡単なDockerの公式セットアップ方法(CentOS/Ubuntu)](https://qiita.com/zembutsu/items/bedb18e1061303e217b8)

#### 構築の補足
* プロキシ環境の場合
  * Docker Desktop(Docker for Windows, Docker for Mac) の場合は設定画面でプロキシを入れる
  * Linuxの場合は設定ファイルに書く。
      * [Proxy環境下のためのDockerの設定](https://qiita.com/homines/items/00eebe3c36a9591c3803)

### 動かしてみる
* [Dockerでプログラマが最低限知るべきことが、最速でわかるチュートリアル](https://qiita.com/woz/items/43462398765f8036f3a8)
* [Docker入門（第一回）～Dockerとは何か、何が良いのか～](https://knowledge.sakura.ad.jp/14427/)
  * Dockerを動かすのは第二回から

#### 補足
* 手元の環境が記事と違う方法で構築したものかもしれないが、基本的に問題なく記事のコマンドを実行できるはず

# コマンド集
* [Dockerコマンドメモ](https://qiita.com/curseoff/items/a9e64ad01d673abb6866)

# Dockerfileの書き方
* [効率的に安全な Dockerfile を作るには](https://qiita.com/pottava/items/452bf80e334bc1fee69a)
* [Dockerfileを書くときに気をつけていること10選](https://qiita.com/c18t/items/f3a911ef01f124071c95)
* [Dockerfile のベストプラクティスを自分なりに整理してみた](https://qiita.com/ao_log/items/f615e0e82164ad854792)

# ログの見方
* [docker logsコマンドの使い方（実例付）CE対応](https://www.memotansu.jp/docker/750/)
    * コンテナの中のログを見る方法
* [Dockerデーモンの設定とトラブルシューティング](https://code-examples.net/ja/docs/docker~17/engine/admin/index)
 * Docker本体のログ確認
 * この[公式Doc](https://docs.docker.com/config/daemon/) の和訳
* OSのログを読む
   * 稀にDockerがカーネルパニックを起こすので見ておく
   * Ubuntuだと`/var/log/kern.log`
   * (記事見つからなかったので誰かいいのがあれば教えてください)

# トラブルシュート
* Docker本体が起動してるか確認
    * Linuxホストの場合: `systemctl status docker`
    * Docker for Windows/Mac の場合はGUIで確認  
* [[Docker]docker inspcetコマンドでコンテナの情報を確認する](https://qiita.com/toshihirock/items/b2180607d2b12c292890)
* [docker topを使用して、コンテナで実行しているプロセスを確認する](http://alpha-will.co.jp/app-def/S-102/grm/it/docker-top/)
* [troubleshooting-container-networking](https://success.docker.com/article/troubleshooting-container-networking)

# Dockerの仕組み
* [Docker の基本学習 ~ Docker のネットワーク](https://qiita.com/Arturias/items/b538e6bbf05dd3364397)
  * 記事自体は古いが、Dockerの仕組みとしては今も変わってないはず 
* [いまさらDockerに入門したので分かりやすくまとめます](https://qiita.com/gold-kou/items/44860fbda1a34a001fc1)
  * Dockerの仕組みとDockerのコマンド解説
* [Docker の Data Volume まわりを整理する](https://qiita.com/lciel/items/e21a4ede3bac7fb3ec5a)
* [dockerの基礎（仕組みなど）](https://qiita.com/mochizuki875/items/72c77c25cf4a7d4cef1c)
* [Docker内部で利用されているLinuxカーネルの機能 (namespace/cgroups)](https://qiita.com/wellflat/items/7d62f2a63e9fcddb31cc)
  * C言語でシステムコールを呼び出してコンテナ分離機能を実際に試している
* [–cap-dropオプションを使ったDockerコンテナの安全性を高める工夫](https://postd.cc/secure-your-containers-with-this-one-weird-trick/) 

# ランタイム(runC)とその差し替え
* [はじめてのrunC](https://qiita.com/sysvirt/items/d362dd26eeb30c5250aa)
  * DockerのデフォルトではrunCが使われる
* [runC vs. cc-runtime vs. kata-runtime？コンテナランタイムの内部構造と性能比較](https://thinkit.co.jp/article/14032)
  * 読むにはkubernetesの知識も少し必要
* [gVisorを使ってdockerコンテナをより安全に利用する](https://qiita.com/tomoyamachi/items/ac52f906816804e7cf1b)
  * カーネル分離できる  
* [nvidia-docker2を試してみる](https://qiita.com/ishouyou/items/3c280144a14fe8bb082b)
  * GPUが使えるDockerコンテナが作れるようになる 

# ベストプラクティス・本番環境
* [Google、コンテナ作成の7つのベストプラクティスを公開](http://www.atmarkit.co.jp/ait/articles/1807/13/news054.html)
* [Dockerコンテナを本番環境で使うためのセキュリティ設定](https://qiita.com/muff1225/items/4edea7b039dd9f26098f)
* [事例から考えるDockerの本番利用に必要なこと](https://thinkit.co.jp/article/9701)
* [Docker Bench for Securityを触った(1. Dockerホストの設定編)](https://qiita.com/RyoMa_0923/items/8537f0db6f6ba717cf39)

# レジストリ
* [プライベートなDockerレジストリサーバーをコンテナで立てる](https://qiita.com/rsakao/items/617f54579278173d3c20)

## 備考
* プライベートレジストリを使う場合は次の2点を気を付ける
  * insecure-registry
      * プライベートレジストリをhttpにする場合や、信頼できるhttpsの証明書を用意できない場合に必要な設定 
      * [最近のUbuntu（15.04以降）でDockerの--insecure-registryの設定](https://qiita.com/kichiki/items/c09eb74d5e2e5764d8dc)
  * no_proxy
      * proxy環境下だとno_proxy設定を入れないとプライベートレジストリへのアクセスにproxyを見に行ってしまう

# バックアップリストア
* システム次第なので参考程度に
* Kubernetesを使うのであればPVでストレージを使い、ストレージ側をバックアップする手もある
  * [Dockerコンテナを移行してみる【成功編】](https://qiita.com/Osbrewery/items/57feacd9d1f84f8813aa)
      * データボリュームでやる 
  * [PostgreSQL コンテナの backup / restore をする](https://qiita.com/dtan4/items/5147a3f858d5919965c9)
      * コンテナ内のバックアップリストアコマンドを使う（Postgresの例）

# 監視
* [PrometheusでDockerホスト + コンテナを監視してみた](https://techracho.bpsinc.jp/ika/2017_07_18/43117)



# その他
* [公式Doc](https://docs.docker.com/)
* [まっさらな状態から Docker イメージを作る](https://blog.amedama.jp/entry/2018/02/04/034707)
* [コンテナ時代の Twelve-Factor App](http://na-o-s.hateblo.jp/entry/2016/09/23/210224)
* [ソースコード](https://github.com/moby/moby)
  * mobyという名前については「[GitHubの docker/docker は moby/moby になりました。](https://dev.classmethod.jp/tool/docker/docker-moved-github-repository/) 」を参照