🐳

【Linux初心者向け】WSL2環境のUbuntu22.04にDockerをインストールする

2022/07/15に公開

はじめに

WSLのUbuntu22.04にDockerをインストールするのに少し手間取ったのでインストール手順をメモします。
本記事の内容は目新しいものではありませんが、初めてLinuxに触れる方に向けて書いており、Linuxコマンドの説明やVimの操作に関しても少し触れています。

対象読者

WSL環境のUbuntu22.04にDockerをインストールするのに行き詰っている方
Linux、CLI操作に不慣れな方

事前準備

まず、異なるバージョンのDockerが混在しないよう、環境に存在するDockerを削除します。

Ubuntu Terminal
sudo apt remove docker docker-engine docker.io containerd runc

おまじない

ubuntuのパッケージの中で最新の情報にインストールできるものを取得します。

Ubuntu Terminal
sudo apt update

取得した情報からアップデート可能なパッケージを最新のものに更新します。

Ubuntu Terminal
sudo apt upgrade -y
sudoについて

super doの略であり、Windowsでいうところの“管理者権限で実行”に相当します。
コマンドの前にひとこと書き加えるだけで何でもできるようになるすごいやつです。

aptコマンドについて

Ubuntuのパッケージを管理するためのコマンドです。
基本的にsudo apt updatesudo apt upgradeは一つのセットとして取り扱われており、“おまじない”とも呼ばれています。
aptコマンドのほかにapt-getコマンドも存在しますが前者は後者の上位互換であるため、基本的にはaptを使えば大丈夫です。
sudo apt upgradeの末尾に-yオプションを書き加えることにより“アップデートしますか?”の文言をスキップできます。
sudo apt removeは指定したパッケージを消すコマンドです。

Dockerのインストール

Dockerの公式GPG鍵を取得します。

Ubuntu Terminal
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
GPG鍵とは

GPG(GNU Privacy Guard)鍵とは、インターネットから入手できるパッケージの配布先が公式のものかどうかのチェックなどに利用される鍵です。

curlコマンドについて

curlコマンドは様々なプロトコルのデータを転送するためのコマンドです。
今回の場合はDockerの公式サイトからGPG鍵をダウンロードしています。

gpgコマンドについて

復号化のために先ほどダウンロードしたGPG鍵を追加しています。

|(パイプ)について

1つ目のコマンドの実行結果を2つ目のコマンドに渡します。
ここではcurlコマンドでダウンロードしたGPG鍵をgpgコマンドで追加しています。

stableのリポジトリを追加します

Ubuntu Terminal
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
echoコマンドについて

文字を表示するコマンドですが今回は>があるため、出力先を/dev/nullに指定しています。

パッケージを更新した後にDockerをインストールします。

Ubuntu Terminal
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

ibtablesの整合性の確保

wsl環境のUbuntu22.04ではこの設定を行わないとDockerが起動しません。

Ubuntu Terminal
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternativesコマンドについて

ひとつのパッケージでも複数のバージョンがインストールされていることがよくあります。管理者に選択肢を提供し、異なる複数のバージョンを並行してインストールして使用できるようにするために、alternativesコマンドでは複数のバージョンの管理を行います。
ここではiptablesの参照先を変更しています。

Dockerの動作確認

Ubuntu Terminal
sudo service docker start
sudo docker run hello-world

hello from dockerの文言が表示されればDockerのインストールは完了です🙌

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/
service docker startについて

service docker startとはDockerデーモンを起動するコマンドです。
DockerデーモンはDockerの管理を行っており、Dockerイメージやコンテナとのやり取りをするため、Dockerデーモンが起動していないとdocker run等のコマンドが実行できません。

docker runコマンドについて

docker runコマンドはコンテナ内のプロセスを実行します。もととなるDockerイメージが存在しない場合はDocker hubからプルします。docker runには様々なオプションがあり、コンテナ内の環境でインタラクティブに操作できる-itオプションやローカル環境のディレクトリをコンテナ環境にマウントする-vオプションなどがあります。

おまけ sudoなしでDockerを実行する

現状ではDockerの実行にはsudoが必要になります。
Dockerを実行する度にsudoを入力するのも面倒なので、sudoなしでdockerを実行できるようにしましょう。(docker imageは使いたいけど気軽にsudoを使わせたくない…という方にはsingralityをオススメします。)

まずターミナルに下記のコマンドを入力し現行のユーザをグループに追加します。$USERには現行ユーザのユーザ名を入力します。また、ここで説明するグループとはlinuxシステムを管理するためのまとまりのことを指します。

Ubuntu Terminal
sudo gpasswd -a $USER docker

次にDockerグループに自信が追加されているかを確認します。コマンドを実行し、Dockerグループに現行ユーザの名前が含まれていれば問題ありません。

Ubuntu Terminal
getent group docker
gpasswdコマンドについて

gpasswdコマンドはユーザーが所属するグループの情報を管理するためのコマンドです。
今回の場合は-aオプションがついているので現行ユーザをdockerグループに追加しています。

getentコマンドについて

getentコマンドはユーザーやグループの情報一覧を表示するコマンドです。
今回はグループ表示することで現行ユーザが正しく追加されているかを確認しています。

Ubuntuを再起動し、sudoなしでdockerコマンドが実行できれば完了です!

Ubuntu Terminal
docker run hello-world

お疲れ様でした🙌

Discussion