我尝试使用Ansible Playbook来配置Docker容器

首先

通常在构建Docker容器时,我们需要编写Dockerfile来构建镜像。
然而,为了减少镜像层,需要编写一连串通过AND运算符连接的RUN命令,这使得处理变得稍微复杂。
另外,当考虑将Ansible角色应用于容器时,每次都要重新编写处理过程会很麻烦…
刚好在我考虑这个问题的时候,我了解到了Ansible的Connection Plugin的存在。

连接插件

简单来说,它是一种可以切换Ansible服务器和远程主机连接方式的插件。
默认情况下,Ansible服务器和远程主机的连接是使用ssh的,但从Ansible 2.0开始,还提供了可以连接到docker容器的Docker Connection Plugin。
所以,这次我们想要尝试使用这个插件。
详细信息请参考以下参考来源等。
顺便提一下,使用docker connection plugin时,只需指定connection: docker即可。

执行示例

我试着仿照例子尝试了一下。

环境

項目名バージョンCentOS7.3.1611ansible2.3.1.0pip9.0.1

步骤

    1. 安装Ansible(=>2.0)

# yum install openssl-devel python-devel
# pip install ansible

安装docker-py

# pip install docker-py

按照以下方式编写role和playbook
这次我们简单地将sl(某知名软件)安装在基于CentOS6的容器上。

tree
.
|– ansible.cfg
|– playbook
| `– docker
| `– test.yml
`– roles
|– docker
| `– docker-run
| |– defaults
| | `– main.yml
| `– tasks
| |– docker_run.yml
| `– main.yml
|– remi
| `– tasks
| |– epel.yml
| `– main.yml
`– sl
`– tasks
|– main.yml
`– sl.yml

ansible.cfg
[defaults]
roles_path = roles

playbook/docker/test.yml

– hosts: localhost
connection: local
roles:
– { role: docker/docker-run }

– hosts: test
connection: docker
roles:
– { role: epel }
– { role: sl }

roles/docker/docker-run/defaults/main.yml
docker_image: centos:6.9
docker_hostname: test

roles/docker/docker-run/tasks/docker_run.yml

– name: Docker容器启动
docker_container: image={{ docker_image }} name={{ docker_hostname }} detach=yes tty=yes command=/bin/bash
– name: 添加Docker容器为主机
add_host: name={{ docker_hostname }}

roles/remi/tasks/epel.yml

– name: “安装epel”
yum: name=epel-release

roles/sl/tasks/sl.yml

– name: “安装sl”
yum: name=sl state=latest enablerepo=epel

ansible-playbook

# ansible-playbook playbook/docker/test.yml

在容器内进行确认

# docker exec -ti test /bin/bash
[root@b3a5b2f0ebe1 /]# sl

(@@) ( ) (@) ( ) @@ () @ O @ O @
( )
(@@@@)
( )

(@@@)
==== ________ ___________
_D _| |_______/ \__I_I_____===__|_________|
|(_)— | H\________/ | | =|___ ___| _________________
/ | | H | | | | ||_| |_|| _| \_____A
| | | H |__——————–| [___] | =| |
| ________|___H__/__|_____/[][]~\_______| | -| |
|/ | |———–I_____I [][] [] D |=======|____|________________________|_
__/ =| o |=-~~\ /~~\ /~~\ /~~\ ____Y___________|__|__________________________|_
|/-=|___|=O=====O=====O=====O |_____/~\___/ |_D__D__D_| |_D__D__D_|
\_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/

如果SL开始运行,那就是成功了!

参考来源

使用Ansible Docker连接插件

广告
将在 10 秒后关闭
bannerAds