可以使用ansible指定端口,并在本地执行命令以对amazonlinux2 docker容器进行操作

介绍的内容

    • ansibleをlocal(127.0.0.1)のport(55556)を指定して実行します

 

    sshログイン可能なdockerコンテナ(amazonlinux2)作成します

结论是…

你可以试用部署。

    • production環境のリソース(AWSなど)を使わずにansibleを試せます

 

    • デプロイ(Deployer、Capistranoなど)試しにも応用できると思います

 

    • dockerイメージをAWS公式のamazonlinux2を使用したから、AWSのEC2に近い試しになれると思います

https://hub.docker.com/_/amazonlinux

我要开始介绍了

目錄結構

您可以在 https://github.com/cheekykorkind/qiita-example/tree/master/ansible/to-docker 链接中查看全部源代码。

sshD.png

关于ansible的端口指定和针对本地执行的实现说明。

    • 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秘密鍵を作っておきます

DockerfileのRUN 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に使う秘密鍵を指定してます

i: カスタムinventoryファイルパスを指定
u:sshログインするユーザー名
private-key:sshログインで使う秘密鍵
https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html

现在轮到你试一下。

Ansible的任务是将文件nginx.repo复制到两个地方(/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

在后台启动docker容器

DOCKER_UID=$(id -u $USER) DOCKER_GID=$(id -g $USER) docker-compose up -d

进入ansible playbook所在的目录

cd qitta-example/ansible/to-docker/ansible

执行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
bannerAds