Ubuntu 22.04にdockerをインストールする

# まえがき

Ubuntu 22.04にdockerをインストールする方法をメモしておきます。Dockerをインストールする方法は[公式ドキュメント](https://docs.docker.com/engine/install/ubuntu/)では3つ紹介されています。

1. Dockerのリポジトリを登録してそこからインストールする方法
2. DEBパッケージをダウンロードして手動でインストールする方法
3. コンビエンススクリプトを使用して自動でインストールする方法

ここでは1のDockerのリポジトリを登録してそこからインストールする方法をつかいます。基本的に[Docker公式サイト](https://docs.docker.com/engine/install/ubuntu/)に従っています。

# 環境

- Ubuntu 22.04
- Docker 20.10.17

# 古いバージョンの削除

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

```sh
$ sudo apt-get remove docker docker-engine docker.io containerd runc
```

# dockerリポジトリの設定

## 準備

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

```sh
$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
```

Dockerの公式GPGキーを取得する

```sh
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

## リポジトリの登録

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

```sh
$  echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

# Dockerのインストール

## Dockerのインストール

```sh
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```

バージョンの確認

```sh
$ sudo docker -v
Docker version 20.10.17, build 100c701
```

## バージョンを指定してDockerをインストールする

インストールするバージョンを指定したい場合は`apt-cache madison`コマンドでインストール出来るバージョンを調べてからインストールします。

```sh
$ sudo apt update
$ apt-cache madison docker-ce
 docker-ce | 5:20.10.17~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
```

```sh
$ sudo apt-get install docker-ce=5:20.10.13~3-0~ubuntu-jammy docker-ce-cli=5:20.10.13~3-0~ubuntu-jammy containerd.io docker-compose-plugin
```

バージョンの確認

```sh
$ docker -v
Docker version 20.10.13, build a224086
```

# 動作確認

```sh
$ sudo docker run hello-world

# 抜粋表示させています
Hello from Docker!
This message shows that your installation appears to be working correctly.
```

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

Dockerを実行するたびにsudoをしなくて済むように一般ユーザをdockerグループに所属させます。
最初dockerグループには誰も所属していなかったのが`usermod`コマンドでユーザをdockerグループに追加しています。

```sh
$ getent group | grep docker
docker:x:999:
$ sudo usermod -aG docker $USER
$ getent group | grep docker
docker:x:999:yoshi
```

一旦ログインし直して`id`コマンドでdockerグループに所属していることを確認しています。

```sh
$ id
uid=1001(yoshi) gid=1001(yoshi) groups=1001(yoshi),27(sudo),999(docker)
```

すろと`sudo`コマンド無しでdockerを起動できるようになりました。

```sh
$ docker run hello-world

# 抜粋表示させています
Hello from Docker!
This message shows that your installation appears to be working correctly.
```

# docker compose

docker composeは`docker-compose-plugin`パッケージをインストールするとdockerのサブコマンドとして使えるようになっています。

```sh
$ docker compose version
Docker Compose version v2.6.0
```

次のようなフォルダ構成でdocker composeの動作確認をしてみます。

```sh
.
├ src
│ └ index.yml
├ Dockerfile
└ docker-compose.yml
```

```sh
$ cat Dockerfile 
FROM nginx:1.21.6-alpine
```

```sh
$ cat docker-compose.yml 
version: '3'

services:
  nginx:
    build: ./
    image: nginx
    ports:
      - 8888:80
    volumes:
      - ./src:/usr/share/nginx/html
```

```sh
$ cat ./src/index.html 
<h1>Hello World!</h1>
```

`docker compose up`でコンテナを起動して`docker compose ps`で起動したコンテナを確認してSTATUSがrunningになっているのでOKです。

```sh
$ docker compose up -d
$ docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
yoshi-nginx-1       "/docker-entrypoint.…"   nginx               running             0.0.0.0:8888->80/tcp, :::8888->80/tcp
```

ブラウザでlocalhost:8888にアクセスしてHello World!と表示されればOKです。
ここでは環境の問題でcurlで確認しています。

```sh
$ curl localhost:8888
<h1>Hello World!</h1>
```

# 参考サイト

[Ubuntu 22.04にdockerをインストールする](https://higmasan.com/docker/ubuntu-20-04%e3%81%abdocker%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/)