今までおまじない的に使ってきたaptをちょっと勉強したので、アウトプットの練習も兼ねて実際にaptにDockerリポジトリを追加してDockerをインストールしてみる。
環境は以下の通り。
OS: Ubuntu 24.04
shell: fish
aptについては以下を参考にさせて頂いた。
aptにDockerリポジトリを追加する
とりあえずDockerのドキュメントを確認して手順通りにやってみる。
順にコマンドを実行していく。
❯ sudo apt install ca-certificates curl
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
ca-certificates はすでに最新バージョン (20240203) です。
curl はすでに最新バージョン (8.5.0-2ubuntu10.3) です。
関連パッケージは既にインストール済み。
sudo install -m 0755 -d /etc/apt/keyrings
install
コマンドなるものがあるらしい。
cp
と似ているけど、パーミッションの設定やディレクトリの作成などを同時にやってくれるっぽい。
これは単にディレクトリ作ってパーミッション設定してるぽい。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
Dockerの公開鍵を取得して、先程作成したディレクトリに出力している。
curlのオプションはいずれもエラー出力やリダイレクトに関するものなのであまり気にしなくて良さそう。
/etc/apt/keyrings🔒
❯ ll
合計 4.0K
-rw-r--r-- 1 root root 3.8K 9月 13 11:02 docker.asc
ちゃんとできてる。
sudo chmod a+r /etc/apt/keyrings/docker.asc
パーミッションを設定。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
とりあえず前部分だけ流して結果を見てみる。
❯ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable"
/etc/os-release (line 1): Unsupported use of '='. In fish, please use 'set PRETTY_NAME "Ubuntu 24.04.1 LTS"'.
PRETTY_NAME="Ubuntu 24.04.1 LTS"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
from sourcing file /etc/os-release
in command substitution
.: Error while reading file '/etc/os-release'
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu stable
なんかエラー出た。
バージョンコードネームの部分が取得できてないっぽい。
fishシェル使っているからその影響かな?
とりあえず、/etc/os-release
の中身を見てみる。
❯ cat /etc/os-release
(略)
VERSION_CODENAME=noble
(略)
この値が取れれば良さそう。
色々調べて見たところ、lsb_release
というコマンドでこのあたりの情報が取得できるっぽい。
というわけでこのパッケージを導入する。
❯ sudo apt install lsb-release
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
lsb-release はすでに最新バージョン (12.0-2) です。
入ってた。
❯ lsb_release -cs
No LSB modules are available.
noble
これで取れそうなので、一部書き換えて実行する。
❯ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable"
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
~
❯
大丈夫そうなので、改めてコマンドを流す。
❯ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
~
❯
参考にしたサイトには
Ubuntu公式のリポジトリ情報は/etc/apt/sources.listに記述され、サードパーティのリポジトリ情報は/etc/apt/sources.list.d/以下に「~.list」または「~.sources」というファイル名で記述する。
と記載があるので、Dockerのリポジトリをこの段階で追加していると見て良さそう。
ファイルの内容も確認しておく。
❯ cat /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
~
❯
Dockerをインストールする
リポジトリが追加できたので、Dockerをインストールしてみる。
❯ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
提案パッケージ:
aufs-tools cgroupfs-mount | cgroup-lite
以下のパッケージが新たにインストールされます:
containerd.io docker-buildx-plugin docker-ce docker-ce-cli
docker-compose-plugin
(中略)
docker-compose-plugin (2.29.2-1~ubuntu.24.04~noble) を設定しています ...
docker-ce-cli (5:27.2.1-1~ubuntu.24.04~noble) を設定しています ...
docker-ce (5:27.2.1-1~ubuntu.24.04~noble) を設定しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
~ took 20s
❯
インストールできた!
正常にインストールされているか確認
❯ docker -v
Docker version 27.2.1, build 9e34c9b
~
❯
問題なさそう。
listファイルの中身
こちらを参考に中身を見てみる。
中身の形式は以下のようになってるっぽい。
deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...]
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
uri
はリポジトリのURIを指定していて、
suite
にはUbuntuのコードネームを含む「noble stable」が指定されているという理解でいいのかな。
参考にしたサイトによると、全てのapt
コマンドのバージョンが1.4以上で、signed-by
に公開鍵のパスを指定すれば、鍵をdearmorしなくても大丈夫みたい。