Docker 代替ツール podman を試してみた。

こんにちは k-jun です。今回は、Docker のような Container ツール podman を試してみようと思います。

https://github.com/containers/podman

Docker はかなり硬い地位を気づいているので、Container ツールとしての覇権は譲らないと思いこんでいました。が、podman もそれなりに名前を聞くようになってきたのでびっくりです。 どうでもいいですが、Kubernetes の Pod とはあまり関係がないらしいですね。

Setup

インストールはここに従います。インストール後には、podman machine init で podman の API を起動させていきます。

$ brew install podman
$ podman machine init
$ podman machine start
INFO[0000] waiting for clients...
INFO[0000] listening tcp://0.0.0.0:7777
INFO[0000] new connection from  to /var/folders/3b/7chj8jgx5z5g0cdh0szfv1b40000gn/T/podman/qemu_podman-machine-default.sock
Waiting for VM ...
 $ podman info | head
host:
  arch: amd64
  buildahVersion: 1.23.1
  cgroupControllers: []
  cgroupManager: systemd
  cgroupVersion: v2
  conmon:
    package: conmon-2.0.30-2.fc34.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.0.30, commit: '

良さそうですね。

Run

getting-startedに従っていきます。search コマンドで nginx の image を検索した後に、pull してみます。

$ podman search nginx | head
INDEX       NAME                                       DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
docker.io   docker.io/library/nginx                    Official build of Nginx.                         15727       [OK]
docker.io   docker.io/jwilder/nginx-proxy              Automated Nginx reverse proxy for docker con...  2088                    [OK]
docker.io   docker.io/nginxinc/nginx-unprivileged      Unprivileged NGINX Dockerfiles                   54
docker.io   docker.io/nginx/nginx-ingress              NGINX and  NGINX Plus Ingress Controllers fo...  55
docker.io   docker.io/richarvey/nginx-php-fpm          Container running Nginx + PHP-FPM capable of...  818                     [OK]
docker.io   docker.io/privatebin/nginx-fpm-alpine      PrivateBin running on an Nginx, php-fpm & Al...  59                      [OK]
docker.io   docker.io/nginx/nginx-prometheus-exporter  NGINX Prometheus Exporter for NGINX and NGIN...  21
docker.io   docker.io/nginxdemos/hello                 NGINX webserver that serves a simple page co...  76                      [OK]
docker.io   docker.io/mailu/nginx                      Mailu nginx frontend                             9                       [OK]

$ podman pull nginx
Resolving "nginx" using unqualified-search registries (/etc/containers/registries.conf.d/999-podman-machine.conf)
Trying to pull docker.io/library/nginx:latest...
$ podman images
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx  latest      87a94228f133  2 weeks ago  138 MB

Docker と互換性があるはずなので、images も打ってみましたが大丈夫そうですね ! いよいよ起動させていきます。

$ podman run -dt -p 8080:80/tcp nignx
$ curl -s http://localhost:8080 | head
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>

実際に、起動していますね ! ということで、Docker コマンドのような扱いはできそうです。

Diff

見かけ上は Docker と podman はほとんど変わっていないように見えていますが、内部的には結構違うようです。

https://www.redhat.com/ja/blog/working-linux-containers-rhel-8-podman-image-builder-and-web-console

Podman was released with Red Hat Enterprise Linux 7.6 and 8.0 as the next generation of Linux container tools, is designed to allow faster experimentation and development of features.

Red Hat の v7.6 あたりで新しい container tool として開発されたようですね。OCI と呼ばれる Docker とは違った仕様に従っているようです。 内部的な仕様などかなり詳細に説明してくれていますが、ここでは Docker とは異なった別の仕組みで動いている。程度にとどめておきます。

Docker コマンドはそのまま podman に置き換えても動きそうなので、自由に変更できるプロダクトなどでは使ってみようと思います。 docker-compose も podman に plugin を導入することで扱えるようになるようですね! 面白そうです! それでは今日はこのへんで。

Reference