在 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コンテナを立ち上げる(モジュール編)
以上。