【Docker】軽量版Ubuntuイメージをunminimizeで通常に戻す

## はじめに
シェルの勉強をしようと思って、Ubuntuイメージでコンテナ起動したときに、一部コマンドが使えなかったので調べて使えるようにした際の備忘録です。

**エラーメッセージちゃんと読みましょうという結論でした。**

## 環境構築
dockerイメージをダウンロードする
```bash
docker pull ubuntu:20.04
```

イメージの確認
```bash
docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       20.04     9522b5ff29b8   2 weeks ago   72.8MB
```

コンテナに入って、シェル起動
```bash
docker run -it --name ubuntu-test 9522b5ff29b8
```

## 使えないコマンド発覚
公式のUbuntuイメージは軽量化されているようです。
unminimizeコマンドで復元できるらしい。
AlpineやBusyboxなんかは軽量化されていて必要最小限なのは知っていたけど、Ubuntuも軽量化されているんだね。
```bash
root@9af84acf4d00:/# man ls
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, including manpages, you can run the 'unminimize'
command. You will still need to ensure the 'man-db' package is installed.

# DeepL翻訳
このシステムは、ユーザーがログインしないシステム上で不要なパッケージやコンテンツを削除することで最小化されています。

manページを含むこのコンテンツを復元するには、「unminimize」コマンドを実行します。
ただし、「man-db」パッケージがインストールされていることを確認する必要があります。
```

## unminimize コマンドを実行してみる
```bash
root@9af84acf4d00:/# unminimize
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

This script restores content and packages that are found on a default
Ubuntu server system in order to make this system more suitable for
interactive use.

Reinstallation of packages may fail due to changes to the system
configuration, the presence of third-party packages, or for other
reasons.

This operation may take some time.

Would you like to continue? [y/N] y


# DeepL翻訳
このシステムは、ユーザーがログインしないシステムで必要のないパッケージやコンテンツを削除することで最小化されています。

このスクリプトは、Ubuntuサーバーシステムのデフォルトでインストールされているコンテンツとパッケージを復元し、
このシステムを対話的な使用に適したものにします。

パッケージの再インストールは、システム構成の変更、サードパーティパッケージの存在、その他の理由により失敗する可能性があります。

この操作には時間がかかる場合があります。

続行しますか? [y/N] y
```

## 再確認
```bash
root@9af84acf4d00:/# man ls
bash: /usr/bin/man: No such file or directory
```

## 使えなかったので、man-db パッケージをインストールしてみる
```bash
root@9af84acf4d00:/# apt install man-db
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  bsdmainutils groff-base libbsd0 libgdbm6 libpipeline1 libuchardet0
Suggested packages:
  cpp wamerican | wordlist whois vacation groff gdbm-l10n apparmor less www-browser
The following NEW packages will be installed:
  bsdmainutils groff-base libbsd0 libgdbm6 libpipeline1 libuchardet0 man-db
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 2306 kB of archives.
After this operation, 7775 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
```

## 再々確認
使えるようになった！
```bash
root@9af84acf4d00:/# man ls
LS(1)                                                                User Commands                                                               LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..
```

## 参考
https://qiita.com/ssc-ynakamura/items/d69307a3d94bf81c363d