LoginSignup
1
2

More than 3 years have passed since last update.

Podmanでコンテナを動かす

Last updated at Posted at 2020-05-24

しばらく前にアップグレードした 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.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 ファイルを作成。

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-composeexec コマンドがない。
$ 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')

他にもいろいろありそうなので、お仕事に使うにはまだ早そう。
個人で使う分には何とか出来そうなので、使ってみることにします。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2