在 MacOS 上使用 Ansible 创建用于开发的 Web 服务器 Docker 容器

总结

    • ansible を使って開発環境用の docker コンテナを作成しようとしたが、ansible-bender を使う方法は、podman と buildah が必要らしく(参考:Ansibleを使ってdockerコンテナを立ち上げる)、MacOS 用の buildah が配布されていないようなので、別の方法を調べてみた。

 

    • ansible の community.docker に含まれるモジュールは、ansible が結局、ssh 接続を前提としているので、パッケージのインストールなど、やりたいことができない。(image や container を外側から触ることはできるが、中身の操作は不可)

 

    よって、ansible 側から docker のイメージやコンテナを操作するのではなく、Dockefile で docker イメージを構築する際に、イメージ内に ansible をインストールし、そのイメージ内で ansible をローカル実行して、自分自身に必要なパッケージのインストールや設定を行うようにする。(ansible のエージェントレスという利点は失われてしまうことになるが)

环境

    • macOS Catalina (10.15.1)

 

    • Docker version 20.10.0, build 7287ab3

 

    ansible 2.10.3

做过的事情

    • ansible の実行に必要なディレクトリやファイル、rpm パッケージを全て docker コンテナ側へコピーする。コンテナ内で ansible をローカル実行させるため。

 

    • python, pip のインストール。

 

    • ansible-galaxy から必要なロールのインストール。(community.general, community.crypto)

 

    • いくつかのサービス(chrony, http, mackerel, sshd)起動の設定を外す。docker には1コンテナ1サービスの概念があり、コンテナ内のサービスを制御するのではなく、コンテナ自体の起動、停止によるコントロールが前提となっており、サービスの起動・停止などのコントロールはできないため。

Dockerfile 内で必要なポートを開け(EXPOSE 80 443)、docker run でコンテナ起動時に、それを指定する。

Dockerfile

FROM centos:centos8

RUN dnf clean all && rm -r /var/cache/dnf && dnf upgrade -y && dnf update -y

RUN dnf install -y sudo

RUN dnf install -y python3-pip
RUN pip3 install ansible
RUN ansible-galaxy collection install community.crypto
RUN ansible-galaxy collection install community.general

## ansible の実行に必要な設定ファイルをディレクトリごとコピーし、
## それらを全て dev.yml ファイルから読み込む
COPY ./ ./.
RUN ansible-playbook dev.yml

EXPOSE 80 443

CMD [“/bin/bash”]

イメージ作成とコンテナ起動時の実行例

## イメージの構築
$ cd (Dockerfile のあるディレクトリ)
$ docker build -t web/dev:1.0 .

## コンテナ起動
$ docker run -itd -p 80:80 -p 443:443 –name test web/dev:1.0

请在以下中进行参考。

    • Ansible+DockerfileによるDockerイメージの作成

 

    Ansibleを使ってDockerコンテナを立ち上げる(モジュール編)

以上。

bannerAds