DockerのUbuntuイメージでapt-getするには

Linux Mint 18.3にDockerをインストールし、Ubuntu 16.04のイメージを元に自分の環境を作成しようと考えた。
この記事はそのときのメモである。

# Docker環境の準備

## インストール

```
$ sudo apt install docker.io
```

# マイアカウントでdockerコマンドを実行可能に設定

```
$ sudo usermod -G docker -a マイアカウント
```

ここで一旦ログアウトして再度ログイン。

# Ubuntuコンテナーを試す

## 先ずはUbuntuイメージを取得して実行

```
$ docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
Digest: sha256:e348fbbea0e0a0e73ab0370de151e7800684445c509d46195aef73e090a49bd6
Status: Downloaded newer image for ubuntu:latest
root@69b685dbca2a:/# 
```

## そしてapt-getしてみる

```
root@69b685dbca2a:/# apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim
```

vimパッケージの在り処が分からないと言っている。

## リポジトリ情報の更新が必要（これ大事！）

```
root@69b685dbca2a:/# apt-get update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
  :
  :
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7705 B]                                          
Fetched 25.0 MB in 33s (753 kB/s)                                                                                                  
Reading package lists... Done
```

## 再度vimをインストール

```
root@69b685dbca2a:/# apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal libpython3.5-stdlib libsqlite3-0 libssl1.0.0
  mime-support vim-common vim-runtime
Suggested packages:
  gpm ctags vim-doc vim-scripts vim-gnome-py2 | vim-gtk-py2 | vim-gtk3-py2 | vim-athena-py2 | vim-nox-py2
The following NEW packages will be installed:
  file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal libpython3.5-stdlib libsqlite3-0 libssl1.0.0
  mime-support vim vim-common vim-runtime
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.2 MB of archives.
After this operation, 58.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
  :
  :
```

## 終了してもこれまでやったことは忘れない

```
root@69b685dbca2a:/# exit
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
69b685dbca2a        ubuntu              "bash"              32 minutes ago      Exited (0) 3 seconds ago                       pedantic_heyrovsky
```

# 自分のUbuntuコンテナーを作成

## 簡単なDockerfileを作成

```
$ mkdir -p ~/docker/ubuntu
$ cd ~/docker/ubuntu
$ vim Dockerfile
```

以下の内容のDockerfileを作成。

```
FROM ubuntu
RUN apt-get update && apt-get -y upgrade
```

## 自分のubuntuイメージを作成

```
$ docker build -t 'my/ubuntu' .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM ubuntu
 ---> f975c5035748
Step 2/2 : RUN apt-get update && apt-get -y upgrade
 ---> Running in 8c60a01fadc1
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
  :
  :
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7705 B]
Fetched 25.0 MB in 19s (1256 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 ---> af427ee95dbf
Removing intermediate container 8c60a01fadc1
Successfully built af427ee95dbf
```

正常にmy/ubuntuができているかを確認。

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my/ubuntu           latest              af427ee95dbf        24 minutes ago      152 MB
ubuntu              latest              f975c5035748        3 days ago          112 MB
```

## vimをインストールして凍結

参考：[Dockerで、既存のイメージを少しだけ変えて再コミットする](https://qiita.com/udzura/items/484073046e2437c83a8c)

先ずはオンデマンドでインストール。

```
$ docker run -it my/ubuntu bash
root@cc59edb12ad6:/# apt-get -y install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  file libexpat1 libgpm2 libmagic1 libmpdec2 libpython3.5 libpython3.5-minimal libpython3.5-stdlib libsqlite3-0 libssl1.0.0
  mime-support vim-common vim-runtime
  :
  :
```

継続して作業したいと思うことが良くあるので、上記はそのままに、別の端末を開いて、コンテナーをコミットして凍結。

```
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
cc59edb12ad6        my/ubuntu           "bash"              4 minutes ago       Up 4 minutes                            fervent_lamport
$ docker commit cc59edb12ad6 my/ubuntu
sha256:17e86bb43336827af0d225efcca8a69411bd3135826249826035f810fd9fae00
```

念のため、動作を確認。

```
root@cc59edb12ad6:/# exit
$ docker run -it my/ubuntu bash
root@388b3bff5bd8:/# vim
```

vimが実行されれば正常。

一度に多くのパッケージをインストールしたい場合や再現性を確保したい場合はDockerfileに記述すべきなので、その点を考慮に入れながら作業して欲しい。

## このUbuntuのバージョンは？

最後にこのUbuntuのバージョンを確認しておこう。

```
root@388b3bff5bd8:/# cat /etc/os-release 
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
```