Linux Mint に Docker をインストール

Docker 公式のおすすめに従って、Docker Desktop for Linux をインストールすることにした。

Linux Mint は Ubuntu がベースなので、Ubuntu のページを参考にする。

Docker は KVM を使うので、さきに KVM を有効にする。プロセッサは Intel だから、kvm_intelも有効にする。

takatoh@apostrophe:~$ modprobe kvm
takatoh@apostrophe:~$ modprobe kvm_intel

何も出力がないのはうまく行ったってことか。もし失敗したら kvm-ok コマンドで確認しろと書いてあるのでやってみる。

akatoh@apostrophe:~$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

大丈夫らしい。kvm モジュールが有効になってるかどうかは、つぎのようにしてチェックできる。

takatoh@apostrophe:~$ lsmod | grep kvm
kvm_intel 487424 0
kvm 1404928 1 kvm_intel
irqbypass 12288 1 kvm

これも大丈夫そうだ。

KVM デバイス(/dev/kvm)に対するアクセス権をつける。

takatoh@apostrophe:~$ sudo usermod -aG kvm $USER

さて、ここまではどのディストリビューションでも同様だけど、ここからは Ubuntu 特有の部分。

Docker の apt リポジトリを登録するが、その前に下準備。

takatoh@apostrophe:~$ sudo apt-get update
takatoh@apostrophe:~$ sudo apt-get install ca-certificates curl
takatoh@apostrophe:~$ sudo install -m 0755 -d /etc/apt/keyrings
takatoh@apostrophe:~$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
takatoh@apostrophe:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc

で、リポジトリを登録。

takatoh@apostrophe:~$ 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

登録したら、apt-get update

takatoh@apostrophe:~$ sudo apt-get update
ヒット:1 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble InRelease
無視:2 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages wilma InRelease
ヒット:3 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble-updates InRelease
ヒット:4 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble-backports InRelease
ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages wilma Release
ヒット:6 https://packages.microsoft.com/repos/code stable InRelease
無視:8 https://download.docker.com/linux/ubuntu wilma InRelease
ヒット:9 http://security.ubuntu.com/ubuntu noble-security InRelease
エラー:10 https://download.docker.com/linux/ubuntu wilma Release
404 Not Found [IP: 2600:9000:26a6:a600:3:db06:4200:93a1 443]
パッケージリストを読み込んでいます... 完了
E: リポジトリ https://download.docker.com/linux/ubuntu wilma Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

何やらエラーになった。リポジトリがおかしいようだけど……よく見ると、wilma とある。wilma は Linux Mint 22 のコードネームで、Ubuntu 24.04 は noble のはずだ。/etc/os-release ファイルがつぎのようになっている。

takatoh@apostrophe:~$ cat /etc/os-release
NAME="Linux Mint"
VERSION="22 (Wilma)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22"
VERSION_ID="22"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=wilma
UBUNTU_CODENAME=noble

つまり、リポジトリを登録するときに、$VERSION_CODENAME じゃなくて $UBUNTU_CODENAME を参照する必要があったってこと。今回はやり直す代わりに、直接ファイルを編集した。

takatoh@apostrophe:~$ sudo vim /etc/apt/sources.list.d/docker.list

今度は大丈夫のはず。

takatoh@apostrophe:~$ sudo apt-get update
ヒット:1 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble InRelease
ヒット:2 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble-updates InRelease
無視:3 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages wilma InRelease
ヒット:4 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble-backports InRelease
ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages wilma Release
取得:6 https://download.docker.com/linux/ubuntu noble InRelease [48.8 kB]
ヒット:7 https://packages.microsoft.com/repos/code stable InRelease
ヒット:8 http://security.ubuntu.com/ubuntu noble-security InRelease
取得:10 https://download.docker.com/linux/ubuntu noble/stable amd64 Packages [15.3 kB]
64.2 kB を 2秒 で取得しました (39.8 kB/s)
パッケージリストを読み込んでいます... 完了

あとは Docker (とその関連パッケージ)を apt-get install でインストール。

takatoh@apostrophe:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
docker-ce-rootless-extras libslirp0 pigz slirp4netns
提案パッケージ:
aufs-tools cgroupfs-mount | cgroup-lite
以下のパッケージが新たにインストールされます:
containerd.io docker-buildx-plugin docker-ce docker-ce-cli
docker-ce-rootless-extras docker-compose-plugin libslirp0 pigz slirp4netns
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 55 個。
123 MB のアーカイブを取得する必要があります。
この操作後に追加で 441 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble/universe amd64 pigz amd64 2.8-1 [65.6 kB]
取得:2 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble/main amd64 libslirp0 amd64 4.7.0-1ubuntu3 [63.8 kB]
取得:3 http://ftp.tsukuba.wide.ad.jp/Linux/ubuntu noble/universe amd64 slirp4netns amd64 1.2.1-1build2 [34.9 kB]
取得:4 https://download.docker.com/linux/ubuntu noble/stable amd64 containerd.io amd64 1.7.22-1 [29.5 MB]
取得:5 https://download.docker.com/linux/ubuntu noble/stable amd64 docker-buildx-plugin amd64 0.17.1-1~ubuntu.24.04~noble [30.3 MB]
取得:6 https://download.docker.com/linux/ubuntu noble/stable amd64 docker-ce-cli amd64 5:27.3.1-1~ubuntu.24.04~noble [15.0 MB]
取得:7 https://download.docker.com/linux/ubuntu noble/stable amd64 docker-ce amd64 5:27.3.1-1~ubuntu.24.04~noble [25.6 MB]
取得:8 https://download.docker.com/linux/ubuntu noble/stable amd64 docker-ce-rootless-extras amd64 5:27.3.1-1~ubuntu.24.04~noble [9,588 kB]
取得:9 https://download.docker.com/linux/ubuntu noble/stable amd64 docker-compose-plugin amd64 2.29.7-1~ubuntu.24.04~noble [12.7 MB]
123 MB を 2秒 で取得しました (70.1 MB/s)
以前に未選択のパッケージ pigz を選択しています。
(データベースを読み込んでいます ... 現在 545486 個のファイルとディレクトリがインストールされています。)
.../0-pigz_2.8-1_amd64.deb を展開する準備をしています ...
pigz (2.8-1) を展開しています...
以前に未選択のパッケージ containerd.io を選択しています。
.../1-containerd.io_1.7.22-1_amd64.deb を展開する準備をしています ...
containerd.io (1.7.22-1) を展開しています...
以前に未選択のパッケージ docker-buildx-plugin を選択しています。
.../2-docker-buildx-plugin_0.17.1-1~ubuntu.24.04~noble_amd64.deb を展開する準備をしています ...
docker-buildx-plugin (0.17.1-1~ubuntu.24.04~noble) を展開しています...
以前に未選択のパッケージ docker-ce-cli を選択しています。
.../3-docker-ce-cli_5%3a27.3.1-1~ubuntu.24.04~noble_amd64.deb を展開する準備をしています ...
docker-ce-cli (5:27.3.1-1~ubuntu.24.04~noble) を展開しています...
以前に未選択のパッケージ docker-ce を選択しています。
.../4-docker-ce_5%3a27.3.1-1~ubuntu.24.04~noble_amd64.deb を展開する準備をしています ...
docker-ce (5:27.3.1-1~ubuntu.24.04~noble) を展開しています...
以前に未選択のパッケージ docker-ce-rootless-extras を選択しています。
.../5-docker-ce-rootless-extras_5%3a27.3.1-1~ubuntu.24.04~noble_amd64.deb を展開する準備をしています ...
docker-ce-rootless-extras (5:27.3.1-1~ubuntu.24.04~noble) を展開しています...
以前に未選択のパッケージ docker-compose-plugin を選択しています。
.../6-docker-compose-plugin_2.29.7-1~ubuntu.24.04~noble_amd64.deb を展開する準備をしています ...
docker-compose-plugin (2.29.7-1~ubuntu.24.04~noble) を展開しています...
以前に未選択のパッケージ libslirp0:amd64 を選択しています。
.../7-libslirp0_4.7.0-1ubuntu3_amd64.deb を展開する準備をしています ...
libslirp0:amd64 (4.7.0-1ubuntu3) を展開しています...
以前に未選択のパッケージ slirp4netns を選択しています。
.../8-slirp4netns_1.2.1-1build2_amd64.deb を展開する準備をしています ...
slirp4netns (1.2.1-1build2) を展開しています...
docker-buildx-plugin (0.17.1-1~ubuntu.24.04~noble) を設定しています ...
containerd.io (1.7.22-1) を設定しています ...
docker-compose-plugin (2.29.7-1~ubuntu.24.04~noble) を設定しています ...
docker-ce-cli (5:27.3.1-1~ubuntu.24.04~noble) を設定しています ...
libslirp0:amd64 (4.7.0-1ubuntu3) を設定しています ...
pigz (2.8-1) を設定しています ...
docker-ce-rootless-extras (5:27.3.1-1~ubuntu.24.04~noble) を設定しています ...
slirp4netns (1.2.1-1build2) を設定しています ...
docker-ce (5:27.3.1-1~ubuntu.24.04~noble) を設定しています ...
man-db (2.12.0-4build2) のトリガを処理しています ...
libc-bin (2.39-0ubuntu8.3) のトリガを処理しています ...

これで完了。hello-world イメージを実行してみる。

takatoh@apostrophe:~$ sudo docker run hello-world

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/

問題なさそうだ。

バージョンの確認をしておく。つぎの通り。

takatoh@apostrophe:~$ docker --version
Docker version 27.3.1, build ce12230
takatoh@apostrophe:~$ docker version
Client: Docker Engine - Community
Version: 27.3.1
API version: 1.47
Go version: go1.22.7
Git commit: ce12230
Built: Fri Sep 20 11:40:59 2024
OS/Arch: linux/amd64
Context: default

Server: Docker Engine - Community
Engine:
Version: 27.3.1
API version: 1.47 (minimum version 1.24)
Go version: go1.22.7
Git commit: 41ca978
Built: Fri Sep 20 11:40:59 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.22
GitCommit: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c
runc:
Version: 1.1.14
GitCommit: v1.1.14-0-g2c9f560
docker-init:
Version: 0.19.0
GitCommit: de40ad0
takatoh@apostrophe:~$ docker compose version
Docker Compose version v2.29.7

mise で Ruby をインストール

Ruby をインストールするにはライブラリが足りなかったらしい。

ruby-build のページを参考に、つぎのようにライブラリをインストールしたら、Ruby のインストールもできた。

takatoh@apostrophe:~$ sudo apt install libz-dev libffi-dev libreadline-dev libssl-dev libyaml-dev

ただし、ruby-build のページではつぎのように紹介されている。上の実行例に出てこないパッケージは、いろいろ試行錯誤してたらからいつの間にかインストールされていたのかもしれない。

apt-get install autoconf patch build-essential rustc libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev uuid-dev

ともあれ、これで準備は整った。

takatoh@apostrophe:~$ mise use [email protected]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19.6M 100 19.6M 0 0 45.2M 0 --:--:-- --:--:-- --:--:-- 45.2M
mise [email protected] ✓ installed mise ~/.mise.toml tools: [email protected]

OK。つぎのようにして Ruby がインストールされているのを確認できる。

takatoh@apostrophe:~$ mise ls
Tool Version Config Source Requested
node 20.17.0 ~/.mise.toml 20
python 3.11.10 ~/.mise.toml 3.11
ruby 3.2.5 ~/.mise.toml 3.2
takatoh@apostrophe:~$ ruby --version
ruby 3.2.5 (2024-07-26 revision 31d0f1a2e7) [x86_64-linux]

Linux Mint で mise を使う

OS のインストールが済んだら次はツール、というかプログラミング言語のインストールだ。よく使う Python や Ruby なんかをインストールする。

で、今までは pyenv とか rbenv を使ってたんだけど、最近見つけた mise (ミース)を使ってみようと思った。

mise は Rust 製のツールなので、まずは Rust をインストールする。公式サイトの手順に従えばいい。rustup という Rust のツールチェインを管理するツールをまずインストールする。

takatoh@apostrophe:~$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

/home/takatoh/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory is located at:

/home/takatoh/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:

/home/takatoh/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

/home/takatoh/.profile
/home/takatoh/.bashrc

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


default host triple: x86_64-unknown-linux-gnu
default toolchain: stable (default)
profile: default
modify PATH variable: yes

1) Proceed with standard installation (default - just press enter)
2) Customize installation
3) Cancel installation
>

info: profile set to 'default'
info: default host triple is x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2024-09-05, rust version 1.81.0 (eeb90cda1 2024-09-04)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
15.9 MiB / 15.9 MiB (100 %) 10.1 MiB/s in 1s ETA: 0s
info: installing component 'rust-std'
26.8 MiB / 26.8 MiB (100 %) 13.5 MiB/s in 2s ETA: 0s
info: installing component 'rustc'
66.9 MiB / 66.9 MiB (100 %) 14.7 MiB/s in 4s ETA: 0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'

stable-x86_64-unknown-linux-gnu installed - rustc 1.81.0 (eeb90cda1 2024-09-04)


Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, you need to source
the corresponding env file under $HOME/.cargo.

This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env" # For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish" # For fish

Rust に関するツールはすべて ~/.cargo/bin にインストールされる。一旦シェルを終了して起動し直すと(あるいは新しいシェルを起動すると)、cargo コマンドが使えるようになる。

takatoh@apostrophe:~$ cargo --version
cargo 1.81.0 (2dbb1af80 2024-08-20)

rustup show コマンドでツールチェインを確認できる。

takatoh@apostrophe:~$ rustup show
Default host: x86_64-unknown-linux-gnu
rustup home: /home/takatoh/.rustup

stable-x86_64-unknown-linux-gnu (default)
rustc 1.81.0 (eeb90cda1 2024-09-04)

mise のインストールには、mise の公式ドキュメントに従ってインストール用のシェルスクリプトを使う。

takatoh@apostrophe:~$ curl https://mise.run | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6300 100 6300 0 0 50786 0 --:--:-- --:--:-- --:--:-- 50806
mise: installing mise...
######################################################################## 100.0%
mise: installed successfully to /home/takatoh/.local/bin/mise
mise: run the following to activate mise in your shell:
echo "eval \"\$(/home/takatoh/.local/bin/mise activate bash)\"" >> ~/.bashrc

mise: this must be run in order to use mise in the terminal
mise: run `mise doctor` to verify this is setup correctly

これでインストールできた。

takatoh@apostrophe:~$ ~/.local/bin/mise --version
2024.9.5 linux-x64 (1f0f03e 2024-09-17)

インストールはできたが、アクティベートする必要がある。そのためのコードを .bashrc ファイルに書き込む。

takatoh@apostrophe:~$ echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc

それから環境変数 PATH の設定……なのだけど、アクティベートすると設定しくれるらしい。もう一度シェルを起動し直す。

takatoh@apostrophe:~$ mise --version
2024.9.5 linux-x64 (1f0f03e 2024-09-17)

上の通り、フルパスを指定しなくても mise コマンドが使える。

さて、ここまで来たらプログラミング言語のインストールができる。ドキュメントに従って mise use コマンドで Node.js をインストールしてみる。

takatoh@apostrophe:~$ mise use node@20
mise [email protected] ✓ installed mise ~/.mise.toml tools: [email protected]
takatoh@apostrophe:~$ node --version
v20.17.0

うまく行った!

つぎは Python。

takatoh@apostrophe:~$ mise use [email protected]
mise hint use multiple versions simultaneously with mise use [email protected] [email protected]
mise hint disable this hint with mise settings set disable_hints python_multi or all with mise settings set disable_hints "*"
mise hint installing precompiled python from indygreg/python-build-standalone
if you experience issues with this python (e.g.: running poetry), switch to python-build by running mise settings set python_compile 1
mise hint disable this hint with mise settings set disable_hints python_precompiled or all with mise settings set disable_hints "*"
mise [email protected] ✓ installed mise ~/.mise.toml tools: [email protected]
takatoh@apostrophe:~$ python --version
Python 3.11.10

Ruby はどうか。

takatoh@apostrophe:~$ mise use [email protected]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14.6M 100 14.6M 0 0 75.4M 0 --:--:-- --:--:-- --:--:-- 75.6M
BUILD FAILED (Linuxmint 22 on x86_64 using ruby-build 20240917)
You can inspect the build directory at /tmp/ruby-build.20240918205818.20859.tDse9P
See the full build log at /tmp/ruby-build.20240918205818.20859.log
mise ~/.cache/mise/ruby/ruby-build/bin/ruby-build failed
==> Downloading openssl-3.0.15.tar.gz...
-> curl -q -fL -o openssl-3.0.15.tar.gz https://dqw8nmjcqpjn7.cloudfront.net/23c666d0edf20f14249b3d8f0368acaee9ab585b09e1de82107c66e1f3ec9533
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14.6M 100 14.6M 0 0 75.4M 0 --:--:-- --:--:-- --:--:-- 75.6M
==> Installing openssl-3.0.15...
-> ./config "--prefix=$HOME/.local/share/mise/installs/ruby/3.2.5/openssl" "--openssldir=$HOME/.local/share/mise/installs/ruby/3.2.5/openssl/ssl" zlib-dynamic no-ssl3 shared
-> make -j 6

BUILD FAILED (Linuxmint 22 on x86_64 using ruby-build 20240917)

You can inspect the build directory at /tmp/ruby-build.20240918205818.20859.tDse9P
See the full build log at /tmp/ruby-build.20240918205818.20859.log
mise ~/.cache/mise/ruby/ruby-build/bin/ruby-build exited with non-zero status: exit code 1
mise Run with --verbose or MISE_VERBOSE=1 for more information

あれ、なんか失敗したぞ?

でも ruby コマンドは使える。どういうこと?

takatoh@apostrophe:~$ ruby --version
ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux-gnu]

というわけで、今日はここまで。

[追記]

rubymise でインストールされたものじゃなく、もとから入ってるものだった。

takatoh@apostrophe:~$ which ruby
/usr/bin/ruby

これに対して、mise でインストールされた pythonnode は ~/.local/share/mise/installs/ 以下にある。

takatoh@apostrophe:~$ which python
/home/takatoh/.local/share/mise/installs/python/3.11/bin/python
takatoh@apostrophe:~$ which node
/home/takatoh/.local/share/mise/installs/node/20/bin/node

Linux Mint を試す

メインに使っている Linux マシンは Ubuntu 20.04 LTS で、その Ubuntu は今年の春に長期サポート版である Ubuntu 24.04 LTS がリリースされたわけだけど、これまで通り日本語REMIX版がリリースされるのを待っていた。ところが、今回からは日本語REMIX版はリリースされないことになったという。

そんなわけで、時期を逸してしまっていたんだけど、Ubuntu をベースにした Linux Mint を試してみることにした。

公式サイトから Linux Mint 22 Cinnamon Edition の ISOイメージをダウンロードして USB メモリのインストールメディアを用意した。

USB メモリからブートすると、Linux Mint が起動する。GUI 画面左上に「Install Linux Mint」アイコンがあるので、これをダブルクリックするとインストーラが起動する。あとはインストーラの案内の通りに進めるだけなので特に難しいことはない。

これでしばらく使ってみよう。

※時間ができたらもう少し書き足す。