コンテナ運用の新常識:Ansible × Podman で実現する「脱・Docker」と自動化の極意
こんにちは。インフラエンジニアの世界へようこそ。
これまでDockerを触ってきた皆さん、最近現場で「Rootless(非特権)運用」や「Podman」という単語を耳にする機会が増えていませんか?
かつてはDocker一強だったコンテナ界隈ですが、現在はセキュリティ(Rootless)と運用の柔軟性(Pod)を重視するPodmanへの移行が急速に進んでいます。今日は、Ansibleを使ってこのPodmanを完璧に制御し、インフラ構成管理を劇的に自動化する「現場の奥義」を伝授します。
—
1. なぜ今、Podmanなのか? ― Dockerとの決定的な違い
Dockerはデーモン(dockerd)がルート権限で動くため、セキュリティリスクが懸念される場面が少なくありません。一方、Podmanは「デーモンレス」。個々のコンテナが独立したプロセスとして起動するため、セキュリティ的に非常に強固です。
特に重要なのは、Podmanが「Pod(ポッド)」という概念を持つこと。Kubernetesと非常に親和性が高く、ローカル環境で定義したPodをそのままK8sへ移行できるのは、現代のエンジニアにとって最強の武器になります。
—
2. 準備:AnsibleでPodmanを操るための「第一歩」
まずは、Podmanを管理するためのAnsibleコレクションをインストールしましょう。これさえあれば、Pythonの細かいライブラリ管理から解放されます。
実行環境のセットアップ
制御ノード(あなたのPC)で以下を実行してください。
Podmanを制御するための公式コレクションをインストール
ansible-galaxy collection install containers.podman
次に、ターゲットサーバー側でPodmanをインストールします(RHEL/CentOS系の場合)。
ターゲットサーバーで実行する準備
ansible all -m package -a “name=podman state=present”
—
3. 実践:Podmanを自動プロビジョニングするPlaybook
ここからが本題です。Dockerモジュールに慣れていると、少しだけ書き方が異なります。`containers.podman`コレクションの最大の強みは、「Pod単位での管理」が非常に直感的であることです。
以下のPlaybookは、Nginxのコンテナを立て、それをポッドとして管理する例です。
—
- name: Podmanでコンテナ・ポッドを自動構築
hosts: all
become: false # PodmanはRootless運用が基本なのでbecomeは不要!
tasks:
# 1. まずはポッドを作成
- name: Webサーバー用のPodを作成
containers.podman.podman_pod:
name: web_pod
state: started
ports:
- “8080:80”
# 2. ポッドの中にコンテナを配置
- name: NginxコンテナをPodにデプロイ
containers.podman.podman_container:
name: my_nginx
image: nginx:latest
pod: web_pod # どのPodに属するかを指定するだけ
state: started
restart_policy: always
現場で役立つポイント:冪等性(べきとうせい)
このコードの素晴らしい点は、何度実行しても結果が変わらないことです。コンテナが存在しなければ作成し、設定が異なれば修正し、同じであれば何もしない。この「あるべき状態(Desired State)」を維持できるのがAnsibleの真骨頂です。
—
4. Dockerモジュールからの移行:気をつけるべき「罠」
DockerからPodmanへ移行する際、いくつか注意点があります。
1. デーモンの有無: Dockerは`docker.sock`を見に行きますが、Podmanは直接プロセスを生成します。そのため、環境変数 `DOCKER_HOST` などを設定している場合は注意が必要です。
2. 接続先: Podmanはユーザー単位で管理されることが多いため、SSH接続先のユーザー権限で適切にPodmanが動くか、`podman info`コマンドで事前に確認してください。
3. コマンドの互換性: 基本的に `alias docker=podman` で動きますが、複雑なネットワーク周りの設定はAnsibleモジュール側で吸収してあげるのが、トラブルを避けるコツです。
—
最後に:なぜ自動化が必要なのか
「手作業で `podman run` すればいいじゃないか」と思うかもしれません。しかし、本番環境でそのコマンドを打つのは、地図を持たずに嵐の海へ出るようなものです。
Ansibleでコード化しておけば、「昨日まで動いていた環境」を数秒で、しかも全く同じ設定で再現できます。 障害時の復旧も、検証環境の使い捨て構築も、すべてこのPlaybook一つです。
今日からPodmanとAnsibleで、あなたのインフラを「壊れない、かつ柔軟な」ものに変えていきましょう。最初は小さなコンテナ一つから。そこから見える景色は、きっと以前よりもずっと透明でクリアなものになるはずです。
何か詰まったら、いつでも聞いてください。あなたの自動化の旅を、全力で応援しています!