Dockerを雰囲気でやっていたのでちゃんと本を一周読んで学んでみた。
なんとなく使っていた命令がなにをやっているかちゃんと理解できてよかった。
以下学べたことのメモ
### 用語説明
【CPU】
プログラムの計算や処理などを行う電子回路部品のこと
【メモリ】
CPUが直接アクセスできる記憶装置のこと。データ容量が大きい/データ転送速度が高速なほど高性能にhなる
【ストレージ】
データベースに書き込まれたでーたなどの永続データを保存するデバイス
補助記憶装置とも呼ばれる
【Linuxカーネル】
OSのコアとなる部分のこと。メモリ管理、ファイルシステム、プロセス管理、デバイス制御などOSとしてハードウェアやアプリケーションソフトを制御する基本機能を実装したソフトウェア
【Linuxディストリビューション】
Linuxは、Linuxディストリビューションという形でパッケージ化されて配布されています。Linuxディストリビューションには、Linuxカーネルに加えて、各種コマンド、ライブラリ、アプリケーションが含まれています。なお、Linuxカーネル以外の部分を、ユーザーランドと呼びます
【デバイス管理】
Linuxカーネルは、ハードウェア(CPU/メモリ/ディスク/入出力デバイスなど)を デバイスドライバー というソフトウェアを利用して制御します
【プロセス管理】
Linuxは命令を実行するときに、そのプログラムのファイルに書かれた内容を読み込み、メモリ上に展開します。そして、メモリ上のプログラムを実行します。この実行されたプログラムを プロセス と呼びます
## コンテナ技術とDockerの概要
【コンテナ】
ホストOS上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどを1つにまとめ、あたかも個別のサーバのように使うことができるようにしたもの。
docker container createコマンドでは、Dockerイメージに含まれるLinuxのディレクトリ、ファイル郡のスナップショットを取る。
スナップショットとは、ストレージ中に存在するファイルとディレクトリを特定のタイミングで取り出したもののこと。
【Docker イメージ】
Dockerイメージは実行環境で動くコンテナのもと(雛形)になる。
Dockerイメージの正体は、アプリケーションの実行に必要なファイル群が格納されたディレクトリです。
【Docker Engine(Dockerのコア機能)】
Dockerイメージの生成やコンテナの起動などを行うためのDockerのコア機能です。
Dockerコマンドの実行や、Dockerfileによるイメージ生成も行います
【Docker Compose(複数コンテナ一元管理)】
複数のコンテナの構成情報をコードで定義して、コマンドを実行することでアプリケーションの実行環境を構成するコンテナ群を一元管理するためのツール
【Docker Machine(Docker実行環境構築)】
ローカルホスト用のVirtualBoxはじめ、Amazon Web Services EC2やMicrosoft Azureなどのクラウド環境などにDockerの実行環境をコマンドで自動生成するためのツール
## Dockerコマンド
【docker container diff】
コンテナ内で操作を行い、コンテナがイメージから生成されたときからの差分を確認出来る
【docker container commit】
コンテナからイメージを作成する
【docker container export】
動作しているコンテナのディレクトリ/ファイル郡をまとめてtarファイルを生成する。
【docker image import】
tarファイルからイメージを作成
## Dockerfile
- Dockerfileをビルドしてイメージを作成すると、Dockerfileの命令ごとにイメージを作成します
- 作成された複数のイメージはレイヤー構造になっています
- なので、命令は少ないほうがいいです
【Run命令】
FROM命令で指定したベースイメージに対して、アプリケーションのインストールや環境構築のためのコマンド実行などの命令をここに書く。
Dockerイメージを生成するときに実行される
【CMD命令】
- イメージをもとに生成したコンテナでコマンドを実行する際にCMD命令を使う
- Dockerfileには1つのCMD命令を記述することが出来る
- 複数書いても最後のコマンドのみが有効
- ENTRYPOINT命令のパラメータとしても使うことが出来る
【ENTRYPOINT命令】
- DockerfileからビルドしたイメージからDockerコンテナを起動するため、docker container runコマンドを実行したときに実行される
- CMD命令は、docker coninater runコマンド実行時に新たなコマンドを指定していた場合に、そのコマンドが優先される
【WORKDIR命令】
- Dockerfileで定義した命令を実行するための作業用ディククトリを指定する
- RUN, CMD, ENTRYPOINTm COPY, ADD を実行するための作業ディレクトリを指定する
- もし指定したディレクトリがなければ作成する
【EXPORSE命令】
EXPOSE命令は、Dockerに実行中のコンテナがlistenしているネットワークポートを知らせます。
またdocker container runコマンドの-pオプションを使用するときに、どのポートをホストへ公開するかを定義する
【ARG命令】
- Dockerfile内で扱える変数を定義する
【ADD命令】
- イメージにホスト上のファイルやディレクトリを追加する
【COPY命令】
- イメージにホスト上のファイルやディレクトリをコピーする
- ADD命令では、リモートファイルのダウンロードやアーカイブ機能があるがCOPYにはその昨日はない
- 単に配置しただけのときはCOPYでいい
【VOLUME命令】
- イメージにボリュームを割り当てる
- 永続化したいデータはコンテナ外のストレージに保存うるのがよい
## Docker Compose
【command, entrypoint】
- コンテナで動かすコマンドはcommandで指定する
- ベースイメージで指定されているCMDやENTRYPOINTは上書きされる
【links】
- 別コンテナと連携したいときはlinksで設定する
【depends_on】
- 複数サービスの依存関係を定義する
- linkとは違い、depends_onで書いたコンテナはそのコンテナの起動をまつ
【expors】
- ホストマシンへポートを公開せずにリンク機能を使って連携するコンテナのみにポートを公開するときはexporseを指定
- ホストマシンから直接アクセスしない場合に使う
【ports】
- コンテナが公開するポートと、ホストマシンからアクエスするためのポートをマッピングする
- ホストマシンから直接アクセスしない場合に使う
【volumes】
- コンテナにボリュームをマウントするときはvolumesを使う