Docker のインストール on Ubuntu

2018.11 頃に書いて放置していた下書きの供養記事。
気が向いたら最近の状況に合わせて更新。

***

Docker (と Ubuntu) のインストールについてのメモ。
Docker Compose もインストールする。

# Ubuntu のインストール

Docker を動作させるための OS をインストールする。
雑誌 (日経Linux) の付録で Ubuntu 18.04 LTS があったのでそれを試すことにした。

付録のものはサーバ版ではなくデスクトップ版だが、不要なパッケージは削除すればいいと思ってそのまま使用した [^1] 。
ざっと調べた感じではサーバ版とデスクトップ版はカーネルが少し違うらしい。特に問題にはならないはず。
また、サーバ版は日本語インストーラがないらしく、インストール後に言語設定が必要になる。デスクトップ版はその辺を省略できるので少し楽かもしれない。

[^1]: インストール後、実際にデスクトップ関連のパッケージを削除して再起動をかけたところ OS が起動しなくなった。色々試したが諦めて OS を再インストールすることにした。デスクトップ版のパッケージ(約1～2GB)はあっても特に困るものではないので、余計なことはしない方がよい。

1. OS をインストール。
   - デフォルトの構成ではオフィスソフトやゲーム等が入るようなので、それらのない最小構成を選択した。
   - インストールが完了するとDVD の自動取り出しと再起動ボタンの表示がされるので、DVD をトレイから外して再起動ボタンを押す。
2. 再起動後の作業。
   - 諸々のパッケージを更新する。
       -  `sudo apt update`
       -  `sudo apt upgrade`
   - ネットワーク設定をごにょごにょ。
       - `/etc/netplan/` にある YAML ファイルを適宜変更して `sudo netplan apply`
   - SSH 接続して作業したい。
       -  `sudo apt install openssh-server`
   - デフォルトのエディタが nano 。人権がない :neutral_face: 。Vim を入れる。
       -  `sudo apt install vim`
       -  `sudo update-alternatives --config editor` で `vim.basic` を選択。

# Docker のインストール

Docker でググると色々情報が出てくるが、公式サイトに Ubuntu (とその他メジャーな OS) についてのインストール手順があるのでそれを参考にする。

- https://docs.docker.com/install/linux/docker-ce/ubuntu/

## Prerequisites

Docker インストール前の準備。

### Docker EE customers

Docker EE (Enterprise Edtion) をインストールしたい人は別のエントリを参考にしてね、という案内文。
今回は Docker CE (Community Edition) をインストールするのでここはスルー。

### OS requirements

OS の要件。
今回は x86_64 環境に Ubuntu 18.04 LTS をインストールしてある。ここも特に気にしなくてよし。

### Uninstall old versions

`docker` や `docker-engine` パッケージをはもう古いもの(なのでアンインストールする必要がある)らしい。おお、マジか。
今は `docker-ce` パッケージとのこと。
ググると古いパッケージでインストール手順を紹介している記事が多いので注意しよう。

- 一方で Ubuntu のパッケージ管理用のコマンドが `apt` ではなく `apt-get` で記載されてたりする。適宜読み替えていこう。

### Supported storage drivers

サポートしているストレージドライバの話。
ストレージドライバとは…？ :kissing: 　とりあえず後回し。

## Install Docker CE

Docker のインストール。
やり方は下記の 3種類がある。

- 大抵は Docker リポジトリを設定してそこからインストールする。公式のオススメはコレとのこと。
- ダウンロードした DEB の Docker パッケージを手動でインストールする。ネットに繋げない状況では便利。
   - ダウンロードはネットに繋げる環境でやる必要がある。
- テストおよび開発環境ではインストール用のスクリプトを使うこともできる。いくつかリスクがあるので本番環境での使用はオススメしない。

### Install using the repository

Docker リポジトリを設定して Docker をインストールする。

```
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt install docker-ce
$ sudo docker container run --rm hello-world
```

### Install from a package

DEB パッケージからのインストール。今回はスルー。

### Install using the convenience script

スクリプトを使用してのインストール。今回はスルー。

## Uninstall Docker CE

Docker のアンインストール。
アンインストールが必要になったとき参照する。

# Docker インストール後の設定

- https://docs.docker.com/install/linux/linux-postinstall/

## Manage Docker as a non-root user

`sudo` なしで `docker` コマンドを実行するための設定をする [^2] 。

[^2]: 公式の記事で **Warning** とされているように、本当はよくない。責任の取れる範囲でやりましょう。

```
$ sudo groupadd docker
groupadd: グループ 'docker' は既に存在します
$ sudo usermod -aG docker $USER
```

グループの設定を反映させるため、一度ログアウトして再度ログインする。

```
$ docker container run --rm hello-world
```

この後 `$HOME/.docker` を作り直す or オーナーとアクセス権限を変更する旨の手順があるが、
そもそも `$HOME/.docker` が存在しなかった。
このディレクトリは自動的に作成されるとのことなので、とりあえず気にしないことにした。

## Configure Docker to start on boot

OS の起動時に Docker サービスを開始するよう設定する。

```
$ sudo systemctl enable docker
```

以降の手順は急いでやる必要はない気がしたので、Docker の設定は一旦ここまでとする。

# Docker Compose のインストール

Docker のコンテナ管理をサポートする Docker Compose をインストールする。

- https://docs.docker.com/compose/install/

## Prerequisites

Docker Compose インストール前の準備。
Docker のインストールが終わっていれば特にやることはない。

## Install Compose

Docker Compose のインストール。
注意書きにあるように Docker Compose のリリースを確認して最新版をインストールする。
1.23 がまだ RC版だったので、今回はバージョン 1.22 をインストールした。

```bash
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
```

コマンドの補完ができると便利なので Command-line completion もインストールする。

```bash
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
```

## Master builds

開発中バージョンの 入手方法の紹介。今回は不要なのでスルー。

## Upgrading

Docker Compose 1.3 からコンテナの扱いが変わったので
1.2 以前のバージョンを使用していればアップグレードしましょう、というお話。
今回は気にしなくてよい。

## Uninstallation

Docker Compose のアンインストール。
Docker 同様にアンインストールが必要になったとき参照する。