【Linux】Ubuntu上にdockerをインストールする。

Docker
この記事は約8分で読めます。

環境

  • OS
cat /etc/os-release | grep -i pretty
> PRETTY_NAME="Ubuntu 20.04.6 LTS"

※特別な記述がない限り、基本的にスーパーユーザー権限(root)での説明となります。

docker インストールの前準備

  • まずは update
apt update
  • すでにインストールされていると思うけど、念のためインストール
apt install -y ca-certificates curl gnupg lsb-release
ケン
ケン

ちなみにインストールされているかは以下コマンドで確認できるよ!

dpkg -l | grep ca-certificates
ほかのものも、ca-certificates 部分を変えて確認してみてね!

  • GPG鍵 を apt に登録するようの GPG鍵 のディレクトリを作成
mkdir -p /etc/apt/keyrings
  • curl で GPG鍵 をインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • インストールした鍵に読み取り権限を与える。
    (※すでに読み取り権限はついているが念のため)
chmod a+r /etc/apt/keyrings/docker.gpg
ケン
ケン

パッケージ管理コマンドである apt による dockerパッケージ の検証をするために、GPG鍵 を登録しているよ!後述でインストールする dockerパッケージ が不正なものではいことを検証するため、いわばセキュリティ対策のために必要なんだね!

  • apt のパッケージリストに docker を追加する
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

↑のコマンドはLinux固有の知識がいくつかあるので説明します!

$(dpkg –print-architecture), $(lsb_release -cs)
↑のように $(文字列)$(コマンドの出力結果) となります。
つまり、以下のような文字列が入ります。

dpkg --print-architecture
> amd64
lsb_release -cs
> focal

↑の文字列を展開すると以下のようになります!

echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu focal stable" > /etc/apt/sources.list.d/docker.list

echo “~~~”で文字列を出力して、リダイレクト記号といわれる「>」をもちいて、/etc/apt/sources.list.d/docker.list というファイルに書き込みをしています。

ケン
ケン

長ったらしいコマンドだけど、やってることは文字列をただファイルに書き込むっていう単純なことなんだなぁ。

  • これでパッケージリストに登録されたので、再度 update しましょう!
apt update

docker のインストール

  • インストール
apt install docker-ce docker-ce-cli containerd.io

・docker-ce: docker engine のデーモンと呼ばれるメモリ常駐型プロセス
・docker-ce-cli: dockerコマンド をCLI上で使えるようにする
・containerd.io: コンテナ起動と実行に必要となるソフトウェア

docker の後準備

  • グループに docker が追加されたことを確認
getent group | grep docker
> docker:x:999:
  • dockerコマンド の権限を確認する
which docker
> /usr/bin/docker
ls -la /usr/bin/docker
> -rwxr-xr-x 1 root root 35932768 Jul 22 05:35 /usr/bin/docker*

↑だと、dockerコマンド 自体は一般ユーザーで実行することができる。
けど、実際に一般ユーザーで dockerコマンド を実行すると以下のようなエラーが出る。

$ docker container ls
> permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

↑エラー文によると、/var/run/docker.sock に対して権限がないみたいだな。
確認してみよう!

ls -la /var/run/docker.sock
> srw-rw---- 1 root docker 0 Aug 13 14:47 /var/run/docker.sock=

↑なるほど、一般ユーザー(other)に対する権限はなに1つ許されてないな。。。
これでは一般ユーザーが dockerコマンド を利用する際に、常にsudoコマンドをプレフィックスにつける必要がある。

ケン
ケン

これはめんどくさすぎるな。
ということで、、、

  • dockerコマンド を実行するユーザーを dockerグループ に所属させる。
usermod -aG docker $USER

usermod -aG は-aはaddでGはセカンダリグループという意味。
つまり、現在コンソールでログインしているユーザーを dockerグループ に追加するということ。
※もちろん、root権限 で↑コマンドを実行すると、$USER には「root」が入ってきてしまうので、
それぞれ追加したいユーザー名を文字列で指定してあげるのがいいでしょう!

user にはプライマリグループとセカンダリグループがあるが、ここでは割愛。。。

ケン
ケン

一般ユーザーでも dockerコマンド を実行できるようになりましたが、
もし実行できない場合は再ログインしてみて再度実行してみてください!

実際に docker を動かしてみる!

  • 以下コマンドを実行。
docker run hello-world

以下のようなメッセージが表示されたら成功です!

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
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/

最後に!

これでスタート地点に立ったくらいです!
また、以上の手順で docker compose も使えるようになっていると思うので、以下で確認してみてください。

docker compose version
> Docker Compose version v2.20.2

docker compose はdockerコマンド(run, exec, build)を一通り学んだあとに、
1つのファイル, 1つのコマンドで dockerコマンド を実行してくれる画期的なものです。
必ず使用することになると思うので、頭のどこかに入れておくとそういうことかといういった感じになると思います!

ケン
ケン

docker は最初はとっつきづらいし、やってみてもエラーの嵐ですが、
身に着けると柔軟な開発環境がすぐ構築できるのでこれを機会に dockerマスターに
なってください!自分も頑張ります!!

コメント