dockerのコマンド、書き方をまとめた

随時更新、、、
docker composeについてもまとめるy

# dockerのコマンド一覧

|コマンド名|機能説明|
|:--|:--|
|docker image pull (イメージ名):(タグ名)|docker hubからimageをpullしてくる。タグ名なしの場合はdefaultでlatestとなる|
|docker image ls|pullしたimageの一覧を表示する|
|docker image rm (イメージ名)|imageを削除する|
|||
|docker container run (イメージ名)|imageからコンテナを起動する。imageがない場合はdockerHubからpullして実行する|
|docker container run --name (任意の名前) (イメージ名)|コンテナの名前を指定しながら起動する。|
|docker container run -it (イメージ名)|起動したコンテナでシェル操作ができるように起動する<br>-i —interactiveの略(標準入力をopenにする)　<br> -t —ttyの略(シェルでの操作をしやすくするもの)|
|docker container run --rm (イメージ名) (実行したいコマンド)|実行したいコマンドを動作後に直ちにコンテナを削除s|
|docker container ls -a|コンテナの一覧を全て表示する。-aがない場合up状態のコンテナのみ表示|
|docker container stop (コンテナ名 or id)|up状態のコンテナを停止→exited状態にする|
|docker container restart (コンテナ名 or id|exited状態のコンテナをupに再起動|
|docker container rm (コンテナ名 or id)|コンテナを削除。up中のものは削除できない|
|docker container prune|up状態以外のコンテナを全て削除する|
|docker image inspect (イメージ名)|イメージの詳細情報を表示。使用されるコマンドの種類など|
|docker container exec -it (コンテナ名) (実行したいコマンド)|up状態のコンテナに対して、コマンドを実行する|
|docker container run -d (イメージ名)|デタッチドモード(バックグラウンド)で実行|
|docker container attach (コンテナ名 or ID)|デタッチドモードで実行中のコンテナをフォアグラウンドに変更する|

# dockerfileの表記について
### dockerfile周りで使用するコマンド
|コマンド名|機能説明|
|:--|:--|
|docker image build (ディレクトリパス)|dockerfileからイメージを作成する|
|docker image build -t (任意の名前):(タグ名) (ディレクトリパス)|作成するイメージの名前とタグを指定する|
|docker image build -f (dockerfileを指定するパス) (ビルドコンテキストのパス)|ビルドするdockerfileと送りたいビルドコンテキストのパスをそれぞれ指定することができる|
|docker image build --target 名前　ビルドコンテキストのパス|作成したいステージ名を指定してイメージをビルドする|
|docker image history (イメージ名)|イメージのレイヤーを閲覧できる|

### dockerfileで使用される文言
|文法|機能説明|
|:--|:--|
|FROM|作りたいイメージのベースとなるものを取得|
|FROM ~ AS 名前|FROMステージに名前を付加する|
|RUN|イメージ作成時に記述されたコマンドを実行する。ベースイメージで何かしらのカスタマイズをするもの|
|COPY (追加したいファイルやディレクトリ) (追加したい場所の指定)|localのファイルやディレクトリを指定したディレクトリにコピーする|
|CMD["実行ファイル", "パラメータ1",,,]|イメージビルド時に実行したいコマンドを設定する|
|ENV 変数名="hoge"|イメージビルド、コンテナ内で使用できる環境変数の設定、値にspaceがある場合は""は必須|
|ARG 変数名="デフォルト値"|イメージビルド時のみ使用できる変数の設定(dockerfile内で使用できる)|
|WORKDIR (ディレクトリパス)|RUNやCMDなどで作業を行うディレクトリを設定する|
|COPY --from=(FROMステージの番号) (コピー元のパス) (コピー先のパス)|番号のFROMステージで作成された情報(コピー元のパス)をコピー先のパスへコピーする|
|COPY --from=名前 ~~|FROM ~ AS 名前でつけた名前を指定しても良い|

### dockerにおける概念
1. ビルドコンテキスト
    imegeのビルドはdockerデーモンにて行われているが、dockerfile以外にCOPYなどで指定されたファイルやディレクトリの情報などを事前に知っておく必要がある
    →必要なファイル一式(コンテキスト)をdocker image build (ディレクトリパス)のディレクトリバスの部分で指定して、dockerデーモン知らせている

2. dockerignore
    dockerデーモンにビルドコンテキストを送る際に、必要ないファイルを指定したもの
    →.dockerignoreファイルを作成し、その中にファイル名をしているする
    →セキュリティリスクのあるものやファイルサイズが大きいものを除外することが多い
3. イメージレイヤー
    dockerfileで記述した1行1行がレイヤーとなり積み重なる感じ
    ・レイヤーの数が少ない方が容量は少なくなる
    ・dockerfileを修正した際の差分のレイヤー変更の影響が大きくなる
    ・トレードオフの関係からバランスよく書く必要がある
4. ENVとARGの使い分け
    ・ENV：イメージビルド時、コンテナ実行時共に使用可能。
    ・ARG：イメージビルド時のみ使用可能。コンテナ実行時に不必要ならこっち
5. マルチステージビルド
    dockerfile内には複数のFROMのステージを記述できる
    →以前使用したFROMのステージで出来あがったファイルなりの情報は、最後に使用したFROMのステージ上で追加・コピーなどで使用される
    →最終的にイメージとして残るのは最後に使用したFROMのステージ内容のみ、またはコマンドで指定したステージ名のみ

# その他

### 1. ボリューム
ボリュームはdockerが管理している領域のこと。複数のコンテナからアクセスすることができる。コンテナが削除されてもボリューム領域内のデータが削除されることはない。ボリュームを削除しない限り永続化される。
|コマンド名|機能説明|
|:--|:--|
|docker volume create (名前)|(名前)のボリューム領域を作成する|
|docker volume ls|作成されたボリューム領域の一覧を表示する|
|docker volume inspect (名前)|(名前)のボリュームの詳細情報を表示|
|docker container run -v {vol名}:{コンテナ内の絶対パス} {イメージ}|ボリュームとコンテナの絶対パス内の領域を同期してコンテナを起動する|

### 2. バインドマウント
ホストマシンの任意のディレクトリと、コンテナ内の任意のディレクトリを同期させるもの
|コマンド名|機能説明|
|:--|:--|
|docker container run -v {ホストの絶対パス}:{コンテナ内の絶対パス} {イメージ}|ホストの絶対パスとコンテナ内の絶対パスを同期してコンテナを起動する|

ホストの絶対パスについて、現在のディレクトリを意味する **./** は認識しない
→これと同じ意味で **$(pwd)** と書くと認識する