Skip to content

Chapter 9 サービスとしてのPodman

  • レベル:中級
  • 見込み時間:30分
  • コンテンツ

9.1 Podmanサービスの紹介

(このコンテンツは本書 9.1に該当します)

Original

$ podman system service

systemdサービス

(このコンテンツは本書 9.1.1に該当します)

Original

$ systemctl --user enable podman.socket
$ systemctl --user start podman.socket
$ ls $XDG_RUNTIME_DIR/podman/podman.sock

Original

$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http://d/v1.0.0/libpod/version | jq

9.2 PodmanがサポートするAPI

(このコンテンツは本書 9.2に該当します)

Original

$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http://d/v1.0.0/libpod/images/json | jq

Original

$ podman pod create --name mypod
$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http://d/v1.0.0/libpod/pods/json | jq
$ curl -s --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http://d/v1.0.0/pods/json

9.3 Podmanとやり取りするためのPythonライブラリ

Podman APIでのdocker-pyの使用

(このコンテンツは本書 9.3.1に該当します)

Original

$ sudo dnf install -y python-docker

Original

$ cat > images.py << _EOF
import docker
client=docker.DockerClient(base_url='unix:/run/user/1000/podman/podman.sock')
print(client.images.list(all=True))
_EOF
$ python images.py

podman-pyとPodman APIの使用

(このコンテンツは本書 9.3.2に該当します)

Original

$ sudo dnf install -y python-podman
$ cat > podman-images.py << _EOF
import podman
client=podman.PodmanClient()
print(client.images.list())
_EOF
$ python podman-images.py

Original

$ cat >> podman-images.py << _EOF
for i in client.pods.list():
  print(i.attrs)
_EOF
$ python podman-images.py

9.4 Podmanサービスでdocker-composeを使用する

(このコンテンツは本書 9.4に該当します)

Original

$ sudo dnf -y install docker-compose
$ systemctl --user start podman.socket
$ curl -H "Content-Type: application/json" --unix-socket $XDG_RUNTIME_DIR/podman/podman.sock http://localhost/_ping
OK

Original

$ export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
$ mkdir example
$ mv ./html example
$ cd example
$ cat > docker-compose.yaml << _EOF
version: "3.7"
services:
  myapp:
    image: quay.io/rhatdan/myimage:latest
    volumes:
      - ./html:/var/www/html
      - myapp_vol:/vol
    ports:
      - 8080:80
volumes:
  myapp_vol: {}
_EOF

Original

$ podman pod rm --all --force
$ podman rm --all --force
$ podman rmi --all --force
$ podman volume rm --all --force

Original

$ docker-compose up

Original

$ podman ps --format "{{.ID}} {{.Image}} {{.Ports}} {{.Names}}"
$ podman volume ls

Original

^C
$ podman ps --format "{{.ID}} {{.Image}} {{.Ports}} {{.Names}}"
$ podman ps -a --format "{{.ID}} {{.Image}} {{.Ports}} {{.Names}}"
$ docker-compose down
$ podman ps -a --format "{{.ID}} {{.Image}} {{.Ports}} {{.Names}}"

9.5 podman --remote

(このコンテンツは本書 9.5に該当します)

Original

$ podman --remote version
$ podman --remote run ubi8 echo hi

リモート接続

(このコンテンツは本書 9.5.2に該当します)

Original

$ sudo systemctl enable --now sshd
$ systemctl --user enable --now podman.socket
$ sudo loginctl enable-linger $USER
$ podman --remote info

クライアントマシンにSSHを設定する

(このコンテンツは本書 9.5.3に該当します)

Original

$ ssh-keygen -t ed25519
$ ssh-copy-id myuser@192.168.122.

接続を設定する

(このコンテンツは本書 9.5.4に該当します)

Original

$ podman system connection add server1 --identity ~/.ssh/id_ed25519 ssh://myuser@192.168.122.1/run/user/1000/podman/podman.sock
$ podman system connection list
$ podman --remote info