建立用于执行Ansible的容器环境
首先
本文介绍了在容器环境中运行配置管理工具Ansible的步骤。当不想在服务器上随意安装与Ansible相关的软件包时,或者希望在不同的环境中运行具有相同配置的Ansible时,将Ansible执行环境容器化是一种有效的方法。
建构任务的概要
本文将执行以下事项。
安装容器
在RHEL8以后,应安装Podman来替代Docker。
# dnf -y install podman
创建Ansible目录
创建一个可以挂载到容器中的Ansible目录。
# mkdir /etc/ansible
禁用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
# インストール後のキャッシュをクリア
RUN dnf clean all
# AnsibleおよびWindows関連のパッケージをインストール
RUN pip3.9 install --upgrade pip && \
pip3.9 install ansible 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
容器启动
構文:「podman run --it
--rm:コンテナ終了時に自動でコンテナ削除
--hostname:コンテナ内のホスト名を定義
-v:ホストの任意のパスをコンテナの任意のパスにマウント
起動するコンテナイメージ名」
# podman run -it --rm --hostname ansible-container -v /etc/ansible:/ansible ansible-container
检查容器内的Ansible版本。
[root@ansible-container ~]# pip freeze | grep ansible
正常にインストールされていれば、以下のように表示される。
ansible==6.7.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