LoginSignup
1
0

More than 3 years have passed since last update.

ansibleをportを指定して、localで立てたamazonlinux2 dockerコンテナに対して実行する

Last updated at Posted at 2020-07-01

紹介する内容

  • ansibleをlocal(127.0.0.1)のport(55556)を指定して実行します
  • sshログイン可能なdockerコンテナ(amazonlinux2)作成します

結論

デプロイ試しに活用できます

  • production環境のリソース(AWSなど)を使わずにansibleを試せます
  • デプロイ(Deployer、Capistranoなど)試しにも応用できると思います
  • dockerイメージをAWS公式のamazonlinux2を使用したから、AWSのEC2に近い試しになれると思います

紹介始めます

ディレクトリ構成

全体ソースコードは https://github.com/cheekykorkind/qiita-example/tree/master/ansible/to-docker で確認できます

  • 全体図
    allD.png

  • ansible担当デレクトリー
    ansibleD.png

  • ssh鍵担当デレクトリー
    sshD.png

ansibleのport指定、localに対して実行する実装周り説明

  • playbookとinventoryによってport(55556)、local(127.0.0.1)指定されます
    • playbookはansible/local_docker_book.ymlファイルです
      • playbookのhostsはinventoryファイルに書いたlocal_dockerにします
    • inventoryはansible/local_hostsファイルです
      • inventoryでlocalを意味する127.0.0.1にします
      • inventoryでansible_port=55556で使いたいpostを指定します

sshログイン実装周り説明

  • 公開鍵docker-ssh-key.pubを加えたauthorized_keysファイル持って待機しているdockerコンテナに対して、ansibleが秘密鍵docker-ssh-keyを使ってsshログインします
    • 公開鍵はdocker-ssh/docker-ssh-key.pubファイルです
    • 秘密鍵はdocker-ssh/docker-ssh-keyファイルです
    • 公開鍵を加えたauthorized_keysはdocker-ssh/authorized_keysファイルです
    • docker-compose.ymlファイルで./docker-ssh:/home/ec2-user/.sshにマウントしているから、ansible実行するマシンとdockerコンテナ両方でファイルが使用可能です
      • entrypoint.shファイルで公開鍵、秘密鍵、authorized_keysの所有者をansible実行するマシンのユーザーと同じく設定し、権限を調整しています
        • dockerコンテナ中のユーザーのUIDをansible実行するマシンのユーザーのUIDと同じくすることで両方ファイル所有権を気にせずに使えます
    • docker-compose.ymlファイルでansibleが使うportを用意しますports: '55556:22'
      • dockerコンテナに開いたportにsshログイン作業処理してくれるsshdをバックグラウンドで起動しておきます
        • entrypoint.sh/usr/sbin/sshd -D部分です
      • sshdは指定された名前の秘密鍵/etc/ssh/ssh_host_rsa_keyがないと怒りますから、使用しませんがssh秘密鍵を作っておきます
        • DockerfileRUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''部分です
    • ansible実行コマンドansible-playbook local_docker_book.yml -i local_hosts -u ec2-user --private-key ../docker-ssh/docker-ssh-keyでsshに使う秘密鍵を指定してます

試し順番です

ansibleはファイルnginx.repoを2箇所(/etc/yum.repos.d/nginx.repo/home/ec2-user/nginx.repo)にをコピーする内容です。
実行成功したら、dockerコンテナの/etc/yum.repos.d/nginx.repo/home/ec2-user/nginx.repoにファイルが見えます。

  1. docker composeがあるデレクトリー移動に移動します
    • cd qitta-example/ansible/to-docker
  2. dockerコンテナをバックグラウンドで起動します
    • DOCKER_UID=$(id -u $USER) DOCKER_GID=$(id -g $USER) docker-compose up -d
  3. Ansibleのplaybookがあるデレクトリーに移動します
    • cd qitta-example/ansible/to-docker/ansible
  4. Ansible実行します(両方同じです。どっちでも実行可能です)
    • ansible-playbook local_docker_book.yml -i local_hosts -u ec2-user --private-key ../docker-ssh/docker-ssh-key
    • sh local_docker_book.sh

試します

ansible.gif

1
0
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
1
0