Docker イメージ、コンテナを使う on Ubuntu

# はじめに
「環境構築のために Docker をインストールしたけどどう使えば良いのかわからない」といった方のために、Docker の使い方を説明します。

# 前提とする PC 環境
Docker がインストール済みの Ubuntu 20.04

# できるようになること
ターミナル上でのコマンドによる Docker イメージとコンテナの利用

# 今回行うこと
- イメージの操作
    - 取得
    - 一覧表示
    - 削除
- コンテナの操作
    - 作成
    - ログアウト
    - 一覧表示
    - 停止
    - 起動
    - ログイン
    - 削除
- Build Cache の削除

# イメージの操作
以下の作業を行います。
- 取得
- 一覧表示
- 削除

## 取得
例えば、Ubuntu 20.04 のイメージを取得します。
```
$ docker pull ubuntu20.04
```

## 一覧表示
取得済みのイメージをすべて表示します。
```
$ docker images
REPOSITORY                       TAG                IMAGE ID       CREATED         SIZE
ubuntu                           20.04              5a81c4b8502e   3 months ago    77.8MB
```
## 削除
取得済みのイメージを削除します。ただし、削除予定のイメージが紐付けられているコンテナがある場合、それを先に削除する必要があります。今回は既に削除済みであることとします。
- １つ目の方法
    ```
    $ docker image rm ubuntu:20.04
    ```
- ２つ目の方法
    ```
    $ docker rmi ubuntu:20.04
    ```

# コンテナの操作
以下の作業を行います。
- 作成
- ログアウト
- 一覧表示
- 停止
- 起動
- ログイン
- 削除
## 作成
取得済みのイメージからコンテナを作成します。作成と同時にコンテナにログインされます。
```
$ docker run -it ubuntu:20.04
root@cec011deb7bd:/# 
```

## ログアウト
ログイン中のコンテナをログアウトします。ショートカットキー `Ctrl + P` + `Ctrl + Q` を押してください。


## 一覧表示
コンテナの情報を一覧表示します。どのイメージから作成されたか、現在の状態、名前などを確認できます。
- すべてのコンテナを表示する場合
    ```
    $ docker ps -a
    CONTAINER ID   IMAGE                                      COMMAND                   CREATED        STATUS                    PORTS     NAMES
    cec011deb7bd   ubuntu:20.04                               "/bin/bash"               8 weeks ago    Exited (0) 3 hours ago              angry_rhodes
    ```
- 起動中のコンテナのみ表示する場合
    ```
    $ docker ps
    CONTAINER ID   IMAGE                                      COMMAND                   CREATED        STATUS                    PORTS     NAMES
    cec011deb7bd   ubuntu:20.04                               "/bin/bash"               8 weeks ago    Up 3 seconds                        angry_rhodes
    ```

## 停止
- ログイン中のコンテナを停止する場合
    - １つ目の方法
        ショートカットキー `Ctrl` + `D`
    - ２つ目の方法
        ```
        root@cec011deb7bd:/#  exit
        ```
- ログアウト中のコンテナを停止
    - １つ目の方法
        ```
        $ docker container stop angry_rhodes
        ```
    - ２つ目の方法
        ```
        $ docker stop angry_rhodes
        ```
## 起動
- １つ目の方法
    ```
    $ docker container start angry_rhodes
    ```
- ２つ目の方法
    ```
    $ docker start angry_rhodes
    ```

## ログイン
コンテナのシェルスクリプトを指定してログインする。例えば `bash` ファイルとする。
```
$ docker exec -it angry_rhodes bash
root@cec011deb7bd:/# 
```

## 削除
- １つ目の方法
    ```
    $ docker container rm angry_rhodes
    ```
- ２つ目の方法
    ```
    $ docker rm angry_rhodes
    ```

## Build Cache の削除
Docker イメージの取得時に生成される Build Cache を削除します。まず、Docker が使っているストレージ容量を確認します。
```
$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         5         13.46GB   10.12GB (75%)
Containers      7         1         7.673GB   5.008GB (65%)
Local Volumes   10        0         0B        0B
Build Cache     357       0         33.39GB   33.39GB
```
次に Build Cache を削除します。
```
$ docker builder prune
```

# おわりに
Docker イメージやコンテナの基本的な利用方法を紹介しました。大体の流れがわかった後は、VSCode の拡張機能を使ってコンテナを起動するのが楽なのでおすすめです。

# 参考文献
- [コンテナに入りたい？それ docker exec でできるよ](https://qiita.com/yosisa/items/a5670e4da3ff22e9411a)
- [Dockerコンテナの作成、起動〜停止まで](https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53)
- [DockerのBuild Cacheの削除](https://qiita.com/hyt-sasaki/items/e2cbc4cfb5ae698de498)