はじめに
本記事では、構成管理ツールであるAnsibleをPodmanコンテナ環境で動かすための手順について説明します。
Ansible実行環境のコンテナ化のメリットは、依存性をパッケージ化しているため異なるクラウドやVMなどの様々な環境にデプロイして実行できることです。
コンテナ構築作業の流れ
1. ホストサーバにAnsibleコンテナを作成する。
2. ホストサーバ上の/etc/ansibleをコンテナにマウントする。
3. Ansibleコンテナを起動する。
コンテナをインストール
RHEL8以降はDockerの代替であるPodmanをホストサーバにインストールします。
# dnf -y install podman
SELinux無効
# sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
# setenforce 0
Dockerfile作成
コンテナを構成するパッケージ導入と各種設定を行います。
RHEL8でサポートされているPython 3.9を選択し、作業効率のために一部必須ではない設定も実施しています。
# vi Dockerfile
★★★以下を追記する★★★
# RHEL8ベースのイメージを使用
FROM registry.access.redhat.com/ubi8/ubi:latest
# 必要なパッケージをインストールするためにEPELリポジトリを追加
RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
# EPELリポジトリをインストール
RUN dnf install -y epel-release
# 必要なパッケージをインストール
RUN dnf install -y python39 python39-pip python39-devel openssh-clients openssl-devel gcc sshpass unzip iputils
# インストール後のキャッシュをクリア
RUN dnf clean all
# AnsibleおよびWindows関連のパッケージをインストール
RUN pip3.9 install --upgrade pip && \
pip3.9 install ansible==8.4.0 pywinrm
# ロケールを日本語に設定
RUN dnf -y install glibc-locale-source glibc-langpack-en && \
dnf clean all && \
rm -rf /var/cache/dnf/*
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
RUN echo 'LANG="ja_JP.UTF-8"' > /etc/locale.conf
# タイムゾーンをJSTに設定
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
RUN rm -f /etc/localtime
RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# コンテナの実行ユーザーをrootに設定
USER root
# デフォルトの作業ディレクトリを設定
WORKDIR /ansible
# 親サーバのディレクトリをマウントするためのディレクトリを作成
VOLUME ["/ansible"]
# エイリアスを設定 (llコマンド)
RUN echo "alias ll='ls -l'" >> /etc/profile.d/aliases.sh
# カスタムプロンプトの設定
ENV PS1="[\u@\h ~]# "
# コンテナを実行する際のコマンド (bashシェルを実行)
CMD ["/bin/bash"]
Dockerfileを元にコンテナイメージをビルド
構文:podman build -t コンテナイメージ名 .
# podman build -t ansible-container .
正常に作成されていれば、以下のように表示される。
Successfully tagged localhost/ansible-container:latest
Ansible作業用ディレクトリ作成
# mkdir /etc/ansible
コンテナ起動
# podman run -it --rm --hostname ansible-container -v /etc/ansible:/ansible ansible-container
podman run --it 時のオプション
--rm:コンテナ終了時に自動でコンテナ削除
--hostname:コンテナ内のホスト名を定義
-v:ホストの任意のパスをコンテナの任意のパスにマウント
末尾:起動するコンテナイメージ名
コンテナ内のAnsibleバージョン確認
[root@ansible-container ~]# pip freeze | grep ansible
正常にインストールされていれば、以下のように表示される。
ansible==8.4.0
ansible-core==2.13.8
Ansibleをコンテナ化するための設定は完了です。
必要なAnsible資材(rolesやansible.cfg、インベントリファイル等)をホストサーバの/etc/ansibleに配置してください。その後Ansibleコンテナを起動してタスクを実行してください。
コンテナを別環境で起動する方法
ビルド済みコンテナは別環境に移動させて起動できます。
コンテナをイメージ化
構文:「podman save -o 出力パス コンテナイメージ名」
# podman save -o ansible-container.tar localhost/ansible-container
出力したファイルを別環境に転送
# scp ansible-container.tar root@xxx.xxx.xxx.xxx:~/
別環境でファイルからコンテナイメージ復元
構文:「podman load -i ファイルパス」
# podman load -i ansible-container.tar