初めて使う最低限のDockerコマンド

##コンテナの確認
docker ps -a

```
ekosh@kekosh-mbp python % docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                    PORTS               NAMES
61e626614dac        continuumio/miniconda3   "/bin/bash"              10 hours ago        Exited (0) 10 hours ago                       elated_boyd
1d6cf6b1489b        continuumio/miniconda3   "/bin/bash"              10 hours ago        Exited (0) 10 hours ago                       lucid_pascal
71f13efbdf47        hello-world              "/hello"                 12 hours ago        Exited (0) 12 hours ago                       boring_burnell
d19acf3bb6bb        6b362a9f73eb             "cowsay hello!"          2 months ago        Exited (0) 2 months ago                       competent_hofstadter
b7b8c84c7252        6b362a9f73eb             "hello"                  2 months ago        Created                                       nifty_matsumoto
648b7c18dd75        6b362a9f73eb             "cowsay Hello!"          2 months ago        Exited (0) 2 months ago                       inspiring_bassi
b3e145e1cafe        6b362a9f73eb             "cowsay goodbye!"        2 months ago        Exited (0) 2 months ago                       goofy_thompson
60b883ba5862        6b362a9f73eb             "cowsay Helloclear"      2 months ago        Exited (0) 2 months ago                       epic_solomon
7978c44ef364        6b362a9f73eb             "cowsay Hellodocker …"   2 months ago        Exited (0) 2 months ago   
```

##特定のコンテナを削除
docker rm [Container ID]

```
kekosh@kekosh-mbp python % docker rm f101ba4df6f0
f101ba4df6f0
```

##一括削除
docker rm $(docker ps -aq)

- -a : すべてを対象にする
- -q : 画面にIDのみ表示する。 
- dockerコマンド　$(コマンド):カッコ内のコマンド結果を変数としてdockerコマンドを実行する。(ループ処理)

```
kekosh@kekosh-mbp python % docker rm $(docker ps -aq) 
61e626614dac
1d6cf6b1489b
71f13efbdf47
d19acf3bb6bb
b7b8c84c7252
648b7c18dd75
b3e145e1cafe
60b883ba5862
7978c44ef364
e44c6a002484
0d927b281231
6f0b0267ba22
adbc5e5e443d
```

##取得済みDockerイメージの確認
docker images

```
kekosh@kekosh-mbp python % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
python-minicon           init                b9701ee9911d        10 hours ago        429MB
continuumio/miniconda3   latest              b4adc22212f1        4 months ago        429MB
hello-world              latest              fce289e99eb9        18 months ago       1.84kB
kekosh/my_whalesay       ver1                6b362a9f73eb        5 years ago         247MB
```

##imageの削除
docker rmi [imageID]

###イメージの削除
**イメージを削除するためには先にイメージに紐付いているコンテナを削除する必要がある。**

```
kekosh@kekosh-mbp python % docker rmi b9701ee9911d
Untagged: python-minicon:init
Deleted: sha256:b9701ee9911df562ba01ef99b7dfa4a3b2a3efc4bf9a059931281e5b86d3fa05
Deleted: sha256:79009b24f386f696f524b05869e52a1b0e644fda48683932c418e6b6a96ead4a
```

##dockerイメージのインストール
docker pull [イメージ名]

```
<サンプル>
kekosh@kekosh-mbp python % docker pull django
Using default tag: latest
latest: Pulling from library/django
75a822cd7888: Pull complete 
e4665cede9d1: Pull complete 
202a45aa091c: Pull complete 
7799136eb561: Pull complete 
7a7f9ca3fd40: Pull complete 
412f2d081014: Pull complete 
Digest: sha256:5bfd3f442952463f5bc97188b7f43cfcd6c2f631a017ee2a6fca3cb8992501e8
Status: Downloaded newer image for django:latest
docker.io/library/django:latest
```

※イメージを自作しない場合は、「Docker Hub」で探す。
https://hub.docker.com/

##イメージからコンテナを作成
docker run [-i -t (オプション)] imageID(またはイメージ名)

```
<サンプル：Anaconda公式イメージのコンテナを起動>
kekosh@kekosh-mbp python % docker run -i -t continuumio/anaconda3

(base) root@923d9b66994b:/# 
```
- 最後に「/bin/bash」を指定してすることで、コンテナ起動直後からターミナルでコンテナ側のbash入力状態になる。（「(base）」の行)
- 作成するコンテナに別名を付ける場合は、「--name "別名"」を　run のあとに付ける。
- 共有フォルダをマウントする場合は、「-v ホストのマウントフォルダ:コンテナのマウントフォルダ」
- 共有フォルダをマウントする場合は、事前に docker>Preference>FILE SHARING でマウントするホストレィレクトリを指定する必要がある。

```
kekosh@kekosh-mbp docker % docker run --name continuumio -v /Users/kekosh/work/docker:/home/continuumio -i -t bdb4a7e92a49 
```

####コンテナとローカルのポートを繋げる場合
Dockerで開発したWebアプリをの動作を確認する場合、ローカルのブラウザから確認できないとどうにもならない。
そのため、コンテナのポートとローカルのポートをつなげる。(つなげるという表現は正しくないけど理解のためにこの表現にする。)

```
kekosh@kekosh-mbp ~ % docker run --name pyworks -v /Users/kekosh/work/docker:/home -i -t -p 5000:5000 bdb4a7e92a49 /bin/bash
```
- -p ローカルのポート：ホストのポート　で指定する。
- ポート番号は両者で異なっても問題ない。

##コンテナを起動
docker start [ContainerID]

```
kekosh@kekosh-mbp ~ % docker start 923d9b66994b
923d9b66994b

#STATUSがUPになっている。
kekosh@kekosh-mbp ~ % docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
923d9b66994b        continuumio/anaconda3   "/bin/bash"         9 hours ago         Up 12 seconds                           zen_ride
```
この状況ではコンテナが起動しただけでアクセスはできていないので、アクセスしてセッションを作成するコマンドを実行する必要がある。

##コンテナにアクセス（ターミナルを接続状態）にする。
docker exec -it [ContainerID] [/bin/bash]

- /bin/bashの部分は実行したいコマンドに置き換え可能。

```
kekosh@kekosh-mbp ~ % docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
923d9b66994b        continuumio/anaconda3   "/bin/bash"         9 hours ago         Up 4 minutes                            zen_ride

#コンテナにアクセスする。(-itはとりあえず指定しておく)
#「(base)」という表示がターミナルに出たらコンテナにアクセスできている。
kekosh@kekosh-mbp ~ % docker exec -it 923d9b66994b /bin/bash
(base) root@923d9b66994b:/# 
```
##コンテナの停止
コンテナを停止する。

docker stop [ContainerID]

```
#起動中のコンテナ(ターゲット)を確認
kekosh@kekosh-mbp ~ % docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
923d9b66994b        continuumio/anaconda3   "/bin/bash"         8 hours ago         Up About a minute                       zen_ride

#コンテナを停止
kekosh@kekosh-mbp ~ % docker stop 923d9b66994b                      
923d9b66994b

#コンテナを停止すると、STATUSが「Exit」になる。
kekosh@kekosh-mbp ~ % docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                     PORTS               NAMES
923d9b66994b        continuumio/anaconda3   "/bin/bash"         8 hours ago         Exited (0) 2 minutes ago                       zen_ride
```

##コンテナからのログアウト
Ctrl + Q または P
- デタッチと呼ぶ。
-  コンソールの例えばpythonから抜ける感覚で「exit」 としてしまうとコンテナ自体が停止（シャットダウン）されてしまうので注意。

-- 追記 --
- Ctrl + D でも同様の結果になる。
- exitで抜けてもコンテナが停止しない。

```
#ここでCtrl+Qを押下
(base) root@923d9b66994b:/# 
```

##ホスト側フォルダとコンテナのフォルダをマウントする。
コンテナ上の所定ディレクトリに作成したファイルがホスト側にも残る。

docker run -it -v ホスト側マウントディレクトリ:コンテナ側ディレクトリ イメージID 起動時コマンド

```
kekosh@kekosh-mbp ~ % docker run -it -v /Users/kekosh/work/docker/continuumio:/home/work bdb4a7e92a49 /bin/bash
(base) root@2db318e47b40:/# 
```

参考
https://qiita.com/Yarimizu14/items/52f4859027165a805630

##マウントしたディレクトリの確認
docker inspect [コンテナ名]

```
kekosh@kekosh-mbp docker % docker inspect pyworks       
[
    {
        "Id": xxxxxxxxxxxxxxxxxx,
        "Created": "2020-08-08T06:22:29.0645659Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,

        〜〜〜〜〜　省略　〜〜〜〜〜〜〜
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/kekosh/work/docker",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],