Podman の利用方法(Oracle Linux 8)
Oracle Linux 8 の podman の利用方法の説明、dockerとまったく違うので適当にやるとハマります、デーモンがなくルートレスモードとルートフルモードがある、以下の説明はルートフルモードのみです。
個人的な見解ですが、 docker より podman の方が少し使いやすい感じがしました。
インストール
root@dev8 ~]# dnf install oracle-epel-release-el8
[root@dev8 ~]# dnf module install container-tools:ol8
[root@dev8 ~]# dnf install podman-docker
[root@dev8 ~]# dnf install podman-compose
[root@dev8 ~]# dnf install podman-plugins [
イメージを取得
[root@dev8 ~]# podman pull docker.io/library/postgres:10.0
podを作成
podmanは pod 単位でコンテナを管理する(らしい)ので以下の用に作成する
[root@dev8 ~]# podman pod create --name redmine-pod --network redgitea-network --ip=11.111.0.3 -p 3001:3000
2b5cc801dc78f017d78d22b062c381f3ee3dhskhdlkasdhkls01546f881e1f843e
–network オプションでpodが所属するネットワークを指定することが可能、作成方法はページ下の方を参照、ディフォルトのネットワークを作成する場合はは省略可能
コンテナの作成
作成したpodにコンテナを追加していく、ホストのストレージをマウントさせる場合は、前もって作成しておいてください、作成するコンテナは適当です
Redmine
podに設定したIPはこのコンテナで利用される(ルールは不明)
root@dev8 ~]# podman run \
[-d --restart=always --pod=red-pod \
-e REDMINE_DB_POSTGRES="" \
-e REDMINE_DB_DATABASE="redmine" \
-e REDMINE_DB_USERNAME="redmine" \
-e REDMINE_DB_PASSWORD="redmine" \
-e TZ="Asia/Tokyo" \
-v /host/redmine/data/plugins:/usr/src/redmine/plugins \
-v /host/redmine/data/themes:/usr/src/redmine/public/themes \
--name=redmine docker.io/library/redmine
PostgreSQL
redmine用のデータベースを作成
root@dev8 ~]# podman run \
[-d --restart=always --pod=red-pod \
-e POSTGRES_ROOT_PASSWORD="postgres" \
-e POSTGRES_USER="redmine" \
-e POSTGRES_PASSWORD="redmine" \
-e POSTGRES_DATABASE="redmine" \
-v /host/redmine/postgresql:/var/lib/postgresql/data \
--name redmie-db docker.io/library/postgres:10.0
podを確認
root@dev8 ~]# podman pod ps
[POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
9fac2sdfa50e redmine-pod Running 45 minutes ago be6shjad9ba6 3
コンテナごとの確認
root@dev8 ~]# podman ps
[CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be6c12adsdf6 k8s.gcr.io/pause:3.5 46 minutes ago Up 46 minutes ago 0.0.0.0:3001->3000/tcp 9faxxxx8a50e-infra
d6afhhhh112f docker.io/library/redmine:latest rails server -b 0... 46 minutes ago Up 46 minutes ago 0.0.0.0:3001->3000/tcp red
aad1coooof17 docker.io/library/postgres:10.0 postgres 46 minutes ago Up 46 minutes ago 0.0.0.0:3001->3000/tcp red-db
kubernetes用設定ファイル出力
podでまとめて出力できるので便利だとおもう、中身は見ても意味ないので見たい方はご自分でどうぞ
[root@dev8 ~]# podman generate kube redm-pod > red-pod.yml
インポート
未設定の状態から全て設定を復旧
root@dev8 ~]# podman play kube red-pod.yml [
ネットワーク設定の注意点
コンテナ間で通信を行う場合は、dockerと違っているので注意が必要です、コンテナ間通信はディフォルトで podman はできませんでした。dockerのようにコンテナ名での通信はできません(私のやり方がまずいかもしれませんが..)。
コンテナ間通信の為の設定
通信を行いたい pod で同じネットワークを作成します
root@dev8 ~]# podman network create --subnet 11.111.0.0/24 redgitea-network [
確認
root@dev8 ~]# podman network ls
[NETWORK ID NAME VERSION PLUGINS
2f25hhhh93aa podman 0.4.0 bridge,portmap,firewall,tuning
4bbwwwwwb47e redgitea-network 0.4.0 bridge,portmap,firewall,tuning,dnsname
設定ファイルは /etc/cni/net.d/redgitea-network.conflist に保存されます
このあと、先ほどのpodの作成のときにIPアドレスを固定化して設定します、次に別のIPを設定するpodを作成します
root@dev8 ~]# podman pod create --name gitea-pod --network redgitea-network --ip=11.11.0.4 -p 3002:3000 [
–network redgitea-network オプションで同一のサブネットに閉じ込めます
[root@dev8 ~]# podman run \
-d --restart=always --pod=gitea-pod \
-e USER_UID="1000" \
-e USER_GID="1000" \
-e DB_TYPE="postgres" \
-e DB_HOST="db:5432" \
-e DB_NAME="gitea" \
-e DB_USER="gitea" \
-e DB_PASSWD="git" \
-v /host/gitea/data:/data \
-v /etc/localtime:/etc/localtime:ro \
--name gitea gitea/gitea:latest
コンテナ内からのアクセス
例えば、redmineのコンテナへのアクセスは以下のように行います
gittea] # curl http://11.111.0.3:3000 [
基本的操作
podごとにまとめて操作できるためdockerより手間がないかもしれません
起動
root@dev8 ~]# podman pod start red-pod [
停止
root@dev8 ~]# podman pod stop red-pod [
削除
root@dev8 ~]# podman pod rm red-pod [
docker-composeとの違い
基本的にコンテナは作成されますが、 networks セクションなどの一部の設定が効いていないようです(間違っていたらすいません)、単純に持ってきてその塊だけでホストするなら問題ないと思いますが、コンテナ間で通信したりする場合は、注意が必要です。
Posted on 2021-12-28 17:43:43