Ubuntu 20.04 LTS 日本語Remixへの Docker と Docker-compose インストール

# ubuntu 20.04 LTS 日本語Remix に DockerとDocker-compose をインストールしてみます。

## 導入の仕方を決める。

インストールされるパッケージを比較したら、aptでさくっと入れられるバージョンと
Docker公式から入手できる物に大きな差はなさそう。
と言う事で、簡単な標準リポジトリからインストールしちゃいます。

2020年5月19日 の比較

|パッケージ|標準リポジトリ|Docker公式サイト|
|:---|:---|:---|
|docker.io|19.03.8-0|19.03.8|
|docker-compose|1.25.0-1|1.25.5|

## Docker／Docker-composeのインストール

### 依存関係の確認

Docker-composeをインストールすればDockerもインストールされるみたい。

```shell
user01@ubuntu20:~$ apt depends docker-compose
docker-compose
  依存: python3-cached-property (>= 1.2.0)
  依存: python3-docker (>= 4.0.0)
  依存: python3-dockerpty (>= 0.4.1)
  依存: python3-docopt (>= 0.6.1)
  依存: python3-jsonschema
  依存: python3-requests (>= 2.20.0)
  依存: python3-six (<< 2)
  依存: python3-six (>= 1.3.0)
  依存: python3-texttable (>= 0.9.0)
  依存: python3-websocket (>= 0.32.0)
  依存: python3-yaml (>= 3.10)
  依存: <python3:any> (>= 3.6~)
    python3:i386
    python3
  依存: python3-distutils
  推奨: docker.io (>= 1.9.0)
user01@ubuntu20:~$ 
```

### Docker-composeのインストール

Docker-composeを指定してインストールをすれば、docker含め一式インストールできるから
インストールコマンドがとてもスッキリしてます。

```shell
user01@ubuntu20:~$ sudo apt -y install docker-compose
[sudo] user01 のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  bridge-utils cgroupfs-mount containerd docker.io git git-man liberror-perl pigz python3-attr python3-cached-property
  python3-distutils python3-docker python3-dockerpty python3-docopt python3-importlib-metadata python3-jsonschema
  python3-more-itertools python3-pyrsistent python3-setuptools python3-texttable python3-websocket python3-zipp runc
  ubuntu-fan
提案パッケージ:
  ifupdown aufs-tools btrfs-progs debootstrap docker-doc rinse zfs-fuse | zfsutils git-daemon-run | git-daemon-sysvinit
  git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn python-attr-doc python-jsonschema-doc
  python-setuptools-doc
以下のパッケージが新たにインストールされます:
  bridge-utils cgroupfs-mount containerd docker-compose docker.io git git-man liberror-perl pigz python3-attr
  python3-cached-property python3-distutils python3-docker python3-dockerpty python3-docopt python3-importlib-metadata
  python3-jsonschema python3-more-itertools python3-pyrsistent python3-setuptools python3-texttable python3-websocket
  python3-zipp runc ubuntu-fan
アップグレード: 0 個、新規インストール: 25 個、削除: 0 個、保留: 0 個。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

user01@ubuntu20:~$
```

### Dockerサービスの有効化

インストール後、docker.serviceを有効化しましょう。

```shell
user01@ubuntu20:~$ systemctl list-unit-files |grep docker
docker.service                             disabled        enabled      
docker.socket                              enabled         enabled      
user01@ubuntu20:~$ sudo systemctl start docker
[sudo] user01 のパスワード: 
user01@ubuntu20:~$ sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
user01@ubuntu20:~$ systemctl list-unit-files |grep docker
docker.service                             enabled         enabled      
docker.socket                              enabled         enabled      
user01@ubuntu20:~$ 
```

### 一般ユーザ（Docker管理者）をグループ docker に追加

一般ユーザ（Docker管理者）が sudo なしで docker を操作出来るように、グループdockerに追加します。

グループ docker に参加させることで sudo せずに dockerコマンドを実行できるようになります。
この設定をしなくてもsudoすれば良いだけなので必要に応じて任意で実行してください。
以下の設定例では $USER （ログイン中のユーザ） をDocker管理者に追加しています。
※ログイン中のユーザにはgroupの変更は反映されません。docker の操作前に再ログインしてください。

```shell
user01@ubuntu20:~$ sudo usermod -aG docker $USER
[sudo] user01 のパスワード: 
user01@ubuntu20:~$ id $USER
uid=1000(user01) gid=1000(user01) groups=1000(user01),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare),133(docker)
user01@ubuntu20:~$ 
```

## 動作確認

### hello-world を 実行

こんなメッセージが表示されれば、ちゃんと動いてると思います。

```shell
user01@ubuntu20:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

user01@ubuntu20:~$ 
```

## 参考

Ubuntuを入手：[Ubuntu Japanese Team](https://www.ubuntulinux.jp/home)
Dockerインストール手順（テスト手順を参照）：[Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)