初心者用Docker基本コマンド一覧(新旧スタイル対応)

Dockerをある程度よく使うようになりました。そのため、私がよく使うコマンドをメモしておきます。「これもよく使うだろう」という声も多いかもしれませんが、ご容赦ください。
インストール方法は記事[「Windows 8.1でDocker ToolboxをインストールしてDockerを動かす」](https://qiita.com/FukuharaYohei/items/a913f5ef5a5aa550f46a)に書きました。併せて記事[「【入門者向け解説】短時間で理解するDocker」](https://qiita.com/FukuharaYohei/items/1ec694eaf634ca14a51c)も書いています。

#前提
なんとなくコマンドを使っていて、よく知らなったのですが、Docker1.13から新しいスタイルのコマンドができました。[「Docker 1.13 – What’s New Including Docker Prune Features」](https://www.cloudshare.com/blog/dev-test/whats-new-docker-1-13)に新旧対応表があります。この記事では新旧を併記しています。旧スタイルの方が短くて使いやすい・・・
ちなみに[「プログラマのためのDocker教科書」](https://amzn.to/2HbZicN)という本で学習しています。OSやミドルウェアの知識が少ない自分のような人間にとって、丁寧に解説していてありがたいです。

#コマンド
##image関連
### [docker image pull / docker pull](https://docs.docker.com/engine/reference/commandline/image_pull/)
レジストリからイメージ/リポジトリダウンロード
構文: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

```docker
docker image pull gcr.io/tensorflow/tensorflow
```

### [docker image ls / docker images](https://docs.docker.com/engine/reference/commandline/image_ls/)
イメージの一覧表示

```docker
docker image ls [OPTIONS] [REPOSITORY[:TAG]]
```

### [docker image inspect / docker inspect](https://docs.docker.com/engine/reference/commandline/image_inspect/)
JSON形式でイメージの詳細確認。旧スタイルの"docker inspect"でコンテナIDを指定するとコンテナの詳細確認も可能。

```docker
docker image inspect [OPTIONS] IMAGE [IMAGE...]
```

### [docker image tag / docker tag](https://docs.docker.com/engine/reference/commandline/image_tag/)
イメージにタグ付けをします。[イメージのタグ付け、送信、取得](http://docs.docker.jp/linux/step_six.html)に詳細があります。

```docker
docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
```

### [docker image rm / docker rmi](https://docs.docker.com/engine/reference/commandline/image_rm/)
イメージの削除。イメージ名はREPOSITORYまたはIMAGE IDを指定。放置しておくとディスクを圧迫するのでよく使います。イメージを参照しているコンテナが残っていると削除できないので注意してください。

```docker
docker image rm [OPTIONS] IMAGE [IMAGE...]
```

|よく使うオプション|内容|
|:--|:--|
|--force , -f|強制削除|

### [docker build](https://docs.docker.com/engine/reference/commandline/build/)
Dockerfileを作ったイメージの作成。すごく便利です。他の人が作ったDockerfileをもとにイメージを作成できます。
※**カレントディレクトリからDockerfileを読み込む場合は最後に"."(ドット)をつけましょう。**最後のドットを見逃して、1時間ほど迷いました:joy:

```docker
docker build [OPTIONS] PATH | URL | -
```

|よく使うオプション|内容|
|:--|:--|
|--file , -f|Dockerファイルの名前(デフォルトは ‘PATH/Dockerfile’)|
|--tag , -t|名前とタグ(‘名前:タグ’)|

##container関連
### [docker container create / docker create](https://docs.docker.com/engine/reference/commandline/container_create/)
新しいcontainerを作成(起動なし)。CPU、メモリ関連等オプションが非常に多いです。

```docker
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

rem 使用例:Image"python"を使って"tesseract"という名前のcontainer作成。また、ポート80同士をマッピング。
docker container create -it --name tesseract -p 80:80 python
```

|よく使うオプション|内容|
|:--|:--|
|-i, --interactive|ホストの入力をコンテナの標準出力をつなげる。おまじないのように必ず使っています。|
|-t,--tty|コンテナの標準出力とホストの出力をつなげる。おまじないのように必ず使っています。|
|--publish , -p|コンテナポートの割当。外部からアクセスされるポート番号:コンテナ側のポート番号を指定。<br>例8080:80|
|--name|コンテナ名(ホスト名ではない)を割当<br>オプションなしだとランダムな命名なのでわかりやすい名前をつけましょう<br>[「Dockerで --name 指定しないでコンテナ実行するとヘンテコなデフォルト名がつく」](https://qiita.com/xsgk/items/9cec82fbbab0fff593c1)|

### [docker container run / docker run](https://docs.docker.com/engine/reference/commandline/container_run/)
新しいcontainerを作り、起動。CPU、メモリ関連等オプションが非常に多いです。オプションはdocker container createを参照ください。起動時に"/bin/bash"を最後につけてbashを実行することが多いです。

```docker
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
```

### [docker container start / docker start](https://docs.docker.com/engine/reference/commandline/container_start/)
containerの起動。

```docker
docker container start [OPTIONS] CONTAINER [CONTAINER...]
```

### [docker container stop / docker stop](https://docs.docker.com/engine/reference/commandline/container_stop/)
containerの停止。

```docker
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
```

### [docker container ls / docker ls](https://docs.docker.com/engine/reference/commandline/container_ls/)
Containerの一覧表示。

```docker
docker container ls [OPTIONS]

rem 使用例:全containerを表示
docker container -a
```
|代表的オプション|内容|
|:--|:--|
|--all , -a|全containerの表示。デフォルトは起動中のcontainerのみです。|

### [docker container rm / docker rm](https://docs.docker.com/engine/reference/commandline/container_rm/)
continerの削除。

```docker
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
```

|よく使うオプション|内容|
|:--|:--|
|--force , -f|強制削除|

### [docker container exec / docker exec](https://docs.docker.com/engine/reference/commandline/container_exec/)
起動中のcontainerに対してコマンド実行。"bash"を実行することが多いです。

```docker
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

rem 使用例:"cabocha"という名前のcontainerでbashを実行
docker container exec -it cabocha bash
```

|よく使うオプション|内容|
|:--|:--|
|-i, --interactive|ホストの入力をコンテナの標準出力をつなげる。おまじないのように必ず使っています。|
|-t,--tty|コンテナの標準出力とホストの出力をつなげる。おまじないのように必ず使っています。|

### [docker container cp / docker cp](https://docs.docker.com/engine/reference/commandline/container_cp/)
ファイル/フォルダのコピー。

```docker
docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

rem 使用例1:Local PCのカレントディレクトリのファイルneko.txtをcontainer"cabocha"のtmpフォルダにコピー
docker container cp neko.txt cabocha:tmp

rem 使用例2:container"cabocha"のtmp/out.txtをLocal PCのtmpフォルダにコピー
docker container cp cabocha:tmp/out.txt /tmp
```

##その他
### [docker-machine stop](https://docs.docker.com/machine/reference/stop/)
Machineの停止。Oracle Virtualbox上で動かしている場合、停止時にこのコマンドを実行します。

```docker
docker-machine stop [arg...]
```

### [docker-machine upgrade](https://docs.docker.com/machine/reference/upgrade/)
MachineのUpgrade。これやったらなぜかDockerが動かなくなり、defaultを消して再作成させられました。私の環境が特殊なだけ？

```docker
docker-machine upgrade [arg...]
```