しばらく前にアップグレードした Fedora 31 で Docker を動かそうとしたところ、エラーでコンテナを起動できない...
$ docker run node/test
docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.
ERRO[0000] error waiting for container: context canceled
Fedoraの最新版では Cgroup V1 から Cgroup V2 への移行が行われたが、Docker ではまだ Cgroup V2 をサポートしていないことが原因らしい。
そもそもFedoraではDockerパッケージは提供されていない。Cgroup V1に戻すことで使うこともできるが、おすすめは podman
らしい。
The Docker package has been removed from Fedora 31. It has been replaced by the upstream package moby-engine, which includes the Docker CLI as well as the Docker Engine.
However, we recommend instead that you use Package-x-generic-16.pngpodman, which is a Cgroups v2-compatible container engine whose CLI is compatible with Docker's.
Podman
Redhatが開発したコンテナ管理パッケージ。
オープンソースで、コンテナとイメージはOCI互換、CLIはDockerと互換性がある。
コンテナの管理はsystemdに統合されているらしい。(デーモンレス)
https://podman.io/getting-started/
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/using-systemd-with-containers_building-running-and-managing-containers
インストール
docker-ceは削除
$ sudo dnf remove -y docker-ce*
podmanをインストール
$ sudo dnf install -y podman podman-compose podman-docker
-
podman
コンテナの管理ツール。Docker互換のCLIを含む。 -
podman-compose
docker-compose.ymlをpodmanをバックエンドにして動かすためのツール。 -
podman-docker
dockerコマンドでpodmanを呼ぶシェルスクリプトを提供する。いらないけど一応入れてみた。
インストールを確認
$ podman -v
podman version 1.9.2
Podmanでコンテナイメージを起動する
Podman でも docker.io で配布されているイメージを利用することが出来る。
リポジトリの設定は /etc/containers/registries.conf
にある。
[registries.search]
registries = ['registry.fedoraproject.org', 'registry.access.redhat.com', 'registry.centos.org', 'docker.io']
左から定義されている順にイメージの検索が行われる。既定で docker.io
も利用できるようになっている。
動作確認に簡単な Dockerfile を用意した。nodeのイメージをベースにしてシェルを起動するだけのイメージ。
FROM node:lts-alpine
ENTRYPOINT /bin/sh
ビルドする。
$ podman build ./ -t node/test
STEP 1: FROM node:lts-alpine
STEP 2: ENTRYPOINT /bin/sh
STEP 3: COMMIT node/test
--> 3d522a27844
3d522a278442b3e028c8fdc3d0634d4e348ea54a403875d03734450c5f99b178
イメージの確認
$ podman image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/node/test latest 3d522a278442 13 minutes ago 93.1 MB
<none> <none> 7bf7394c1846 14 minutes ago 93.1 MB
docker.io/library/node lts-alpine 7a48db49edbf 3 weeks ago 93.1 MB
コンテナの起動
$ podman run -it --rm node/test
/ # npm -v
6.14.4
podman-compose でイメージを起動する
簡単な docker-compose.yml ファイルを作成。
version: '2'
services:
node:
build: .
イメージを実行する
$ podman-compose run --rm node
podman pod create --name=environment --share net
b740e843a42a7c85fe68dc1d72b27ee78e3b79c5806dfdcc0b45caea31501eeb
0
Namespace(T=False, cnt_command=[], command='run', detach=False, dry_run=False, e=None, entrypoint=None, file=['docker-compose.yml'], label=None, name=None, no_ansi=False, no_cleanup=False, no_deps=False, podman_path='podman', project_name=None, publish=None, rm=True, service='node', service_ports=False, transform_policy='1podfw', user=None, volume=None, workdir=None)
podman run --rm -i --name=environment_node_tmp1612 --pod=environment --label io.podman.compose.config-hash=123 --label io.podman.compose.project=environment --label io.podman.compose.version=0.0.1 --label com.docker.compose.container-number=1 --label com.docker.compose.service=node --add-host node:127.0.0.1 --add-host environment_node_1:127.0.0.1 --tty environment_node
/ # node -v
v12.16.3
気になったところあれこれ
-
podman-compose up
でサービス毎に起動出来ない。(最新版とかではひょっとすると実装されているかも)
$ podman-compose up -d node
services ['node']
Traceback (most recent call last):
File "/usr/bin/podman-compose", line 11, in <module>
load_entry_point('podman-compose==0.1.6.dev0', 'console_scripts', 'podman-compose')()
File "/usr/lib/python3.7/site-packages/podman_compose.py", line 1267, in main
podman_compose.run()
File "/usr/lib/python3.7/site-packages/podman_compose.py", line 755, in run
cmd(self, args)
File "/usr/lib/python3.7/site-packages/podman_compose.py", line 939, in wrapped
return func(*args, **kw)
File "/usr/lib/python3.7/site-packages/podman_compose.py", line 1038, in compose_up
return up_specific(compose, args)
File "/usr/lib/python3.7/site-packages/podman_compose.py", line 1033, in up_specific
raise NotImplementedError("starting specific services is not yet implemented")
NotImplementedError: starting specific services is not yet implemented
-
podman-compose
にexec
コマンドがない。
$ podman-compose exec node /bin/sh
usage: podman-compose [-h] [-f file] [-p PROJECT_NAME]
[--podman-path PODMAN_PATH] [--no-ansi] [--no-cleanup]
[--dry-run]
[-t {1pod,1podfw,hostnet,cntnet,publishall,identity}]
{help,version,pull,push,build,up,down,ps,run,start,stop,restart}
...
podman-compose: error: argument command: invalid choice: 'exec' (choose from 'help', 'version', 'pull', 'push', 'build', 'up', 'down', 'ps', 'run', 'start', 'stop', 'restart')
他にもいろいろありそうなので、お仕事に使うにはまだ早そう。
個人で使う分には何とか出来そうなので、使ってみることにします。