改めてDockerを理解する③[イメージの作成と削除編]

## はじめに
こんにちは！ITスクールRareTECHでCS（Customer Support）を担当している池村です！
今回の記事はDockerの基本③の解説記事になります。シリーズものですので、まず先に①と②を見ていただけますと幸いです。

https://qiita.com/ikemura-ren/items/dae9f599254b90167b06

https://qiita.com/ikemura-ren/items/3b5667eee6e83a63d0b2

※Dockerを初めて触る人向けの記事になります。

## 前回の復習
前回は`exec`コマンドでコンテナの中に入って色々中を触ってみました。

```Bash:execの復習
# 旧記法
docker exec -it コンテナID or コンテナ名 /bin/bash

# 新記法
docker container exec -it コンテナID or コンテナ名 /bin/bash
```
※コンテナのイメージによっては`/bin/sh`になります。

今回の記事のコマンドでは、実際にコンテナの中に入ってそのコンテナの情報をイメージとして保存する。といったことをするので、`exec`に慣れていない人は前の記事で復習してください。

### そろそろ`docker`と打つのも面倒になってませんか？
aliasに登録して打つコマンドの文字数は減らしていきましょう。
```Bash:aliasの設定
alias d="docker"
```
これで`d`と打てばシェルは`docker`と打ち込まれたと判断してくれます。今回の記事で書かれるコマンドは基本的に`docker`と書いていきます。
aliasの設定方法は以下の記事を参照してください。

https://qiita.com/ikemura-ren/items/c139204eaf66540cd4af#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

ではコマンドの学習に入っていきましょう。

## `commit`（コンテナをイメージ化して保存）
さて、コンテナの中を色々いじったら、次にコンテナをイメージ化して自分オリジナルのイメージを作ってみましょう。

今回はUbuntuの中に各種便利コマンドをインストールして、その状態でイメージを作成してみます。
```Bash:まずはubuntuを起動
# 旧記法
docker run -it ubuntu

# 新記法
docker container run -it ubuntu
```

起動をしたら、コンテナの中に入ったと思います。
では以下の順番でコマンドを叩いてみましょう。
```Bash:aptをアップデート
apt update
```

```Bash:各種コマンドをインストール
apt install -y fzf tmux tree zsh
```

`-y`はインストール時に求められる確認を全てYesで返答するものです。
これで必要なツールがインストールされたので、`exit`でコンテナから出てください。

次からが`commit`コマンドを使うところですね。
```Bash:commitコマンドの使い方
docker commit コンテナID 好きな名前
```

今回私はこんな形で実行しました。👇`my_ubuntu`という名前で、タグも一応つけておきました。タグをつけるには`:`をつけてお好きなタグ名をつけてください。
```Bash:私の環境上
docker commit b3 my_ubuntu:0.1
```
`b3`は私の環境上でのコンテナIDなので、ハンズオンをする際はご自分のコンテナIDを`docker ps -a`で確認をお願いします。

`images`で確認してみましょう。ご自身で作成したイメージがあると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/1b8c3e32-abdd-84f3-3cdc-ed11f2b42fb2.png)

では次に自作したイメージを元にしたコンテナを立ち上げてみましょう。
```Bash:自作イメージからコンテナを立ち上げる
# 旧記法
docker run -it 自作したイメージの名前
docker run -it my_ubuntu:0.1

# 新記法
docker container run -it 自作したイメージの名前
docker container run -it my_ubuntu:0.1
```

これでコンテナが立ち上がったと思います。
```Bash:zshを使ってみる
zsh
```

これで無事`zsh`が立ち上がっているなら問題なく、イメージをコンテナ化できました。
基本的にコンテナは削除した場合、コンテナ内でインストールしたものは消えてしまいます。（当たり前ですが）永続化したい場合、イメージとして作成する必要があります。（Dockerfileの件は置いておいて）


## `rmi`か`image rm`（イメージの削除）
もう使わないイメージ類は消してしまいましょう。
今回は`pull`してきたUbuntuのイメージを削除してみます。
```Bash:イメージを消してみる
# 旧記法
docker rmi イメージ名またはイメージID
docker rmi ubuntu

# 新記法
docker image rm イメージ名またはイメージID
docker image rm ubuntu
```

もちろん複数指定もできます。
```Bash:複数まとめて削除
# 旧記法
docker rmi イメージID1 イメージID2

# 新記法
docker image rm イメージID1 イメージID2
```

:::note warn
現在稼働中のコンテナで使われているイメージは削除できません。`stop`➡︎`rm`の順番です。
:::


## `prune`（まとめて）
一個一個削除するのは大変なので、まとめて削除を行うこともできます。まずはコンテナを一括削除する方法を見ていきましょう。
### コンテナの一括削除
```Bash:使い方
docker container prune
```

:::note warn
コンテナが停止していることが大前提です。
:::

### イメージの一括削除
```Bash:使い方
docker image prune
```
:::note warn
もちろん稼働しているコンテナに紐づくイメージは消せません。
:::

### その他の`prune`で消せるもの
Dockerにはネットワークとボリュームという仕組みもあります。これももちろん`prune`コマンドで一括削除が可能です。ここまでのDockerの記事でネットワークとボリュームの話は出てきていないので、今回は割愛します。

:::note info
もちろん次回の記事では説明します。
:::

### もう全てを一括削除
もちろん、まとめて吹き飛ばすコマンドもあります。
```Bash:使い方
docker system prune
```
上記を使うと、コンテナ、イメージ、ボリューム、ネットワーク、使われていない全てのリソースが消えてしまいます。

:::note alert
使い方に注意です。気をつけて使用してください。（確認メッセージが出る仕様ですが、無視するオプションもあります。興味があったら調べてみてください）
:::

## おわりに
ここまでの3つの記事で、コンテナの基本コマンドは使うことができるようになったと思います。この後はボリュームとネットワークの記事を執筆する予定です。次回も良かったら見ていただけたら嬉しいです。

次の記事👇

https://qiita.com/ikemura-ren/items/221cf630ad03fb4b41b3

まとめ記事に戻るにはこちら👇

https://qiita.com/ikemura-ren/items/b961642d55e4e6515203
## 余談
何事も習慣化するには3週間はかかる、というのはよく聞きますよね。私は今この記事を書いた時点でまだ1週間目です。一旦記事を書くことを習慣化したく書き始めましたが、世の中の何百本も記事を書いている人には頭が上がりません（笑）バケモノたちがたくさんいるなぁ〜と改めてIT業界の優秀な人達に脱帽です。