可以使用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 链接中查看全部源代码。

关于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路径下看到文件。
-
- 进入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
我要尝试一下。
