機能・要件 
 構成・方式 
    エンジン
    イメージ
    レジストリ
    コンテナ
    DockerFile​
    DockerFile​仕様
    DockerFile形式
    コンテナNW
    DockerMachine​​
    DockerToolbox​​
    Compose​​
    DockerDesktop​​
 タスク 
 導入 
 ToolBox導入 

 Docker Engine
 ・Docker利用に必要なクライアントサーバ型のアプリケーションパッケージ
コミュニティ版(CE、Community Edition)
エンタープライズ版(EE、Enterprise Edition)
 ・クライアント  (コンテナーを操作)
dockerコマンド(フロントエンド)の実体
CLIによりユーザからのコマンドを受け付けてサーバと通信
 ・サーバー  (Dockerデーモン)
ホストマシン上で稼働
コマンドを受け取ってコンテナの構築・実行などを行う。
 ・docker-ce(Linux)
stable(安定版) は3ヶ月毎に更新
edge(エッジ) は毎月機能を追加
 ・Docker Machine(Windows、MacOS)
Docker Toolbox
Docker Desktop

 Dockerイメージ (image)
 ・テンプレートで、コンテナ作成時に使われる構築(build)コンポーネント
 ・仮想マシンイメージとは異なり、実体としての1ファイルではない
抽象的なイメージレイヤ(image layer)の集まり
一般的にDockerイメージは、複数のイメージレイヤで構成される。
 ・読み込み専用
イメージレイヤは読み込み専用で、レイヤ間では親子の依存関係を持てる。
 ・イメージの情報
      REPOSITORY  リポジトリ名
 TAG  イメージに付いているタグ
 IMAGE ID イメージが持つ固有のイメージ ID(64桁、ショート12桁)
 CREATED  イメージがいつ作成されたか
 SIZE  イメージ実体のディスク消費の容量

 Dockerレジストリ (registry)
 ・配布(distribution)コンポーネント
パブリックまたはプライベートにイメージを保管
アップロードやダウンロードが行える。
 ・Docker Hub
パブリックなレジストリ
多くの利用可能なイメージが提供されている。

 Dockerコンテナ (container)
 ・コンテナ(container) とは
イメージのランタイム・インスタンス(runtime instance、実行状態にある物)
(イメージからメモリ内に展開し、実際に実行する何か)
 ・アプリケーション実行(run)コンポーネント
アプリケーションの実行に必要な全てが含まれている。
 ・Dockerイメージから生成
 ・Dockerは、コンテナの実行開始、停止、移動、削除ができる。
 ・各コンテナは分離されている。
 ・オーケストレーション  (コンテナ同士の協調)
実際のアプリの動作は複数のコンテナ同士が協調し合う事が多い。

 DockerFile
 ・Dockerイメージを自動構築できるように定義する設定ファイル
 ・このファイル内でイメージを構成する命令を書く。
 ・命令の一つ一つが、概念上のイメージレイヤに相当
 ・docker commitでコンテナからイメージを作成するよりも、構成管理がし易い。
 ・Dockerfileの利用手順
任意の場所にプロジェクト用のディレクトリを作成、中にDockerfileを作成
そこに記述されたファイルやディレクトリも準備して格納する。
docker build コマンドでDockerイメージをビルド
出来上がった新たなイメージを元に、docker run コマンドでコンテナを起動

 DockerFileの仕様
 ・書式
# コメント
命令 引数
 ・Dockerデーモンは命令を1行ずつ実行
 ・必要があれば命令ごとにコミット(レイヤ作成)
 ・最終的に作成された、新しいイメージのIDを出力
 ・命令(instruction)は、大文字と小文字を区別しない。
引数(arguments)と区別するために、大文字にすることが推奨される。
 ・#で始まる行をコメントとみなす。
 ・各種命令  (RUN命令がBuild時に実行される。)
       FROM     以降の命令で使うベースイメージを指定、最初の命令は必ず「FROM」
RUN     既存イメージ上で新しいレイヤとしてコマンドを実行、その結果をコミット
EXPOSE     コンテナが実行時にリッスンするポートを指定
ADD     ファイルやディレクトリをコピーして、コンテナ内に追加
COPY     ファイルやディレクトリ内の全てのファイルをコピーし、コンテナに追加
WORKDIR     ワーキングディレクトリをセット、相対パスの指定はWORKDIRが起点
 ・ENTRYPOINT命令とCMD命令  (コンテナ起動時に実行される。)
       ENTRYPOINT     docker runで指定するコマンドと引数を
    Dockerfile内で事前に指定
CMD     docker runで指定するコマンドと引数のデフォルト値を
    Dockerfile内で指定
 ※ENTRYPOINTを指定すると、docker runでコマンドを指定できない。
引数追加は可能
 ※ENTRYPOINT命令とCMD命令は、Dockerfile内で一度だけ指定可能
複数指定した場合は、最後に指定したものが有効

 DockerFile内の命令などの形式
 ・RUN命令の形式(2つのformを持つ。)
シェル形式  RUN <コマンド>
exec形式  RUN [“実行可能形式”,”パラメータ1”,”パラメータ2”]
 ・CMD命令の形式(3つのformを持つ。)
exec形式  CMD [“実行可能形式”,”パラメータ1”,”パラメータ2”]
ENTRYPOINTへの引数として提供  CMD [”パラメータ1”,”パラメータ2”]
シェル形式  RUN <コマンド>
 ・ENTRYPOINT命令の形式(2つのformを持つ。)
exec形式  ENTRYPOINT [“実行可能形式”,”パラメータ1”,”パラメータ2”]
シェル形式  RUN <コマンド>
 ・ADDとCOPYの形式(2つのformを持つ。)
ADD/COPY <src> <dest>
ADD/COPY ["<src>",・・・ "<dest>"]

 Dockerコンテナ・ネットワーク (container)
 ・ユーザ定義のネットワークを作成し、コンテナ間通信を行う。
 ・デフォルトネットワーク
Dockerインストールで、自動的に3つのネットワークを作成
 ・ユーザ定義のネットワーク作成
docker network create
 ・ネットワークを作成し、コンテナ起動時にdocker run --net=<ネットワーク名> のオプションを指定
そのネットワークに接続されたコンテナが作成
 ・ユーザ定義ネットワーク用の内部DNSサーバ

 Docker Machine​  (Docker EngineはLinux上でネイティブに稼働)
 ・Docker Machineを利用し、WindowsやMacの環境でDockerを動かす。
 ・Windows環境へ「Docker」をインストールする場合
  (使用するためのシステム要件がツールにより異なるため、2つの選択肢)
Docker Toolbox  (レガシーなツール)
Docker Desktop for Windows  (新しいツール)

 Docker Toolbox​
 ・VirtualBox仮想化システムを使用
VirtualBoxをドライバとして利用し、Dockerを動かす仮想マシンを作成
 ・インストールされる機能
Docker Engine
Docker Machine
Docker Compose
Kitematic
Boot2Docker ISO
VirtualBox

 Docker Compose​
 ・複数のコンテナで構成されるシステムで、
  Dockerイメージのビルドや各コンテナの起動・停止などを簡単に行えるツール
 ・Composeファイル
docker-compose.ymlファイルをプロジェクト用のディレクトリに作成

 Docker Desktop​
 ・必要なシステム要件  (Hyper-V仮想化システムが必須)
Windows 10(64bit)、Pro、Enterprise、Education(ビルド15063以降)
BIOSで仮想化が有効になっている。
CPUがSLAT(Second Level Address Translation)に対応している。
4GB以上のRAMが搭載されている。
 ・インストールされる機能
Docker Engine
Docker Machine
Docker Compose
Kitematic
Docker CLIクライアント