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

docker

まえがき

この記事ではUbuntu 22.04にdockerをインストールする方法をメモしておきます。Dockerをインストールする方法はDocker公式サイトのドキュメントでは4つ紹介されています。

  1. Docker Desktop for LinuxにバンドルされているDocker Engineを利用する方法
  2. Dockerのaptリポジトリを登録してそこからインストールする方法
  3. DEBパッケージをダウンロードして手動でインストールする方法
  4. コンビエンススクリプトを使用して自動でインストールする方法(テスト・開発環境でのみ推奨)

ここでは1のDockerのリポジトリを登録してそこからインストールする方法を用いています。

関連記事

AlmaLinux 9.1にDockerをインストールした記事

環境

  • Ubuntu 22.04
  • Docker 23.0.1

古いバージョンの削除

旧バージョンのDockerを削除したい場合は削除しておきます。

$ sudo apt remove docker docker-engine docker.io containerd runc

上記コマンドではDockerイメージ、コンテナ、ボリュームは削除されていません。もし、削除したい場合は次のコマンドを実行します。

$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd

Dockerリポジトリの設定

準備

はじめに、aptパッケージインデックスをapt-get updateコマンドで更新します。次に、aptがHTTPS通信できるようにパッケージをapt-get installコマンドでインストールします。

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

リポジトリの登録

はじめに、Dockerの公式GPGキーを取得します。

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

次に、リポジトリの登録をします。

$  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のインストール

最新バージョンのインストール

特にバージョンを指定しなければ最新バージョンがインストールされます。

$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

最後に、インストールが完了したらdockerのバージョンを確認します。

$ sudo docker -v
Docker version 23.0.1, build a5ee5b1

バージョンを指定したインストール

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

$ 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

ここではバージョン5:20.10.13~3-0~ubuntu-jammyをインストールします。

$ sudo apt 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

最後に、インストールされたDockerのバージョンを確認します。

$ docker -v
Docker version 20.10.13, build a224086

動作確認

docker runコマンドで動作確認します。docker run hello-worldとするとhello-worldイメージをダウンロードしてコンテナの実行を行います。Hello from Docker!が表示されていたら正常に動作しています。

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

毎回sudoコマンドで実行するのは面倒はとても面倒です。sudoコマンドを使わなくてもdockerを実行できるようにします。そのためには実行する一般ユーザをdockerグループに所属させる必要があります。

dockerグループを確認すると、最初は誰も所属していません。

$ getent group | grep docker
docker:x:999:

まず、ユーザhigmasanをdockerグループに所属させます。

$ sudo usermod -aG docker higmasan

再び確認すると、dockerグループにユーザhigmasanが追加されていることがわかります。

$ getent group | grep docker
docker:x:999:higmasan

変更を反映させるために一旦ログインし直します。ログイン後、idコマンドを実行します。するとdockerグループに所属していることが確認できます。

$ id
uid=1001(higmasan) gid=1001(higmasan) groups=1001(higmasan),27(sudo),999(docker)

最後に確認です。sudoコマンド無しでdockerを起動できるようになりました。

docker compose

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

$ docker compose version
Docker Compose version v2.16.0

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

$ tree
.
├ src
│ └ index.html
├ Dockerfile
└ compose.yaml
FROM nginx:1.23.3-alpine
services:
  nginx:
    build: ./
    image: nginx
    ports:
      - 8888:80
    volumes:
      - ./src:/usr/share/nginx/html
<h1>Hello World!</h1>

docker compose upでコンテナを起動します。docker compose psで起動したコンテナを確認してSTATUSがrunningになっていれば正常に動作しています。

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

localhost:8888にアクセスしてHello World!と表示されればOKです。

Webブラウザ以外のcurlコマンドで確認しても大丈夫です。

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

コメント