LoginSignup
0
1

More than 3 years have passed since last update.

MacOS の Ansible で 開発用WebサーバのDocker コンテナを作成する

Posted at

概要

  • 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
    

参考

以上。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1