LinuxにDockerをインストールする

# まえがき

Ubuntu 18.04、lubuntu 18.04とCentOS 7.5にdockerをインストールする方法をメモしておきます。それぞれのディストリビューションのリポジトリからdockerパッケージをインストールする方法もあるみたいですが、ここではDockerの公式のリポジトリを登録してそこからdocker-ceパッケージをインストールする方法を取ります。基本的に[Docker公式サイト](https://docs.docker.com/install/linux/docker-ce/centos/)を参考にしています。
Ubuntu22.04については[こちら](https://qiita.com/yoshiyasu1111/items/17d9d928ceebb1f1d26d)に書きました。

# 環境

- Ubuntu 18.04 and lubuntu 18.04 and CentOS 7.5
- Docker 18.06.1、18.09.2

# 古いバージョンの削除

もし今までにDockerをインストールしたことがあって削除したい場合は削除しておきます。

-  Ubuntu and lubuntu

    ```
    ~# apt-get remove docker docker-engine docker.io
    ```

- centOS

    ```
    ~# yum remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-selinux \
                    docker-engine-selinux \
                    docker-engine
    ```

# dockerリポジトリの設定

## 準備

必要なパッケージをインストールします。

- Ubuntu and lubuntu

    ```
    ~# apt install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
    ```

- CentOS

    ```
    ~# yum install yum-utils device-mapper-persistent-data lvm2
    ```

GPG鍵の入手

- Ubuntu

  ```
  ~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key  add -
  ```

## リポジトリの登録

リポジトリを登録した後、リポジトリの設定ファイルが作成されたことを確認しています。

- Ubuntu and lubuntu

    ```
    ~# add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
    
    ~$ cat /etc/apt/sources.list | grep docker
    deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
    # deb-src [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
    ```

- centOS

    ```
    ~# yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    ~$ ls /etc/yum.repos.d/docker-ce.repo 
    /etc/yum.repos.d/docker-ce.repo
    ```

# Dockerのインストール

docker-ceパッケージをインストールすればよいのですが、インストールするバージョンを指定できるらしいので、寄り道してやってみました。

## インストール可能なdocker-ceのバージョンを調べる。

- Ubuntu and lubuntu

    ```
    ~$ apt-cache madison docker-ce
    docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    docker-ce | 18.03.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
    ```

- centOS

    ```
    ~$ yum list docker-ce --showduplicates | sort -r
    利用可能なパッケージ
    読み込んだプラグイン:fastestmirror
    docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
    docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
    ```

## Dockerのインストール

バージョンを指定してインストールしています。インストール後dockerコマンドを実行してインストールできたか確認をしています。

- Ubuntu and lubuntu

    ```
    ~# apt install docker-ce=18.06.1~ce~3-0~ubuntu

    ~$ docker --version
    Docker version 18.06.1-ce, build e68fc7a
    ```

- CentOS

    ```
    ~# yum install docker-ce-18.06.1.ce-3.el7

    ~$ docker --version
    Docker version 18.06.1-ce, build e68fc7a
    ```

    インストール途中で、リポジトリの鍵をインポートするか聞かれるのでyと答えてインポートする。

# Dockerの実行

## Dockerデーモンの起動

- Ubuntu and lubuntu

    デフォルトでDockerデーモンはactive(running)になっています。

    ```
    ~$ systemctl status docker
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e
    Active: active (running) since Mon 2018-09-17 11:54:00 JST; 3min 40s ago
        Docs: https://docs.docker.com
    Main PID: 17466 (dockerd)
    ...
    ```

- CentOS

    デフォルトでDockerデーモンはinactiveになっているので、Dockerデーモンを起動する。起動後にステータスを確認してactive(running)になっていればOK

    ```  
    ~# systemctl start docker # Dockerデーモンを起動する

    ~$ systemctl status docker # Dockerデーモンの状態を確認する
    ● docker.service - Docker Application Container Engine
    Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
    Active: active (running) since 月 2018-09-17 11:12:01 JST; 3s ago
        Docs: https://docs.docker.com
    Main PID: 1654 (dockerd)
        Tasks: 20
    Memory: 46.1M
    ...
    ```

## 一般ユーザでDockerを実行できるようにする

Dockerを実行するたびにsudoをしなくて済むように一般ユーザをdockerグループに所属させます。

- Ubuntu、lubuntu、CentOS共通

    初期状態ではdockerグループには誰も所属していません。usermodコマンドでユーザyoshiをdockerグループに所属させると、dockerグループにyoshiが追加されたことが確認できます。一度ログアウトしなければ設定が反映されないためログアウトします。

    ```
    ~$ getent group | grep docker # dockerグループに所属するユーザを確認する
    docker:x:994:

    ~# usermod -aG docker yoshi # dockerグループにユーザyoshiを追加する

    ~$ getent group | grep docker # dockerグループに所属するユーザを確認する
    docker:x:994:yoshi

    ~$ exit
    ```

## Dockerの実行

再ログイン後にdocker runコマンドで動作確認を行います。"Hello from Docker!"が表示されていればOK

- Ubuntu、lubuntu、CentOS共通

    ```
    $ docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    d1725b59e92d: Pull complete 
    Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
    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/
    ```