我尝试使用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即可。
执行示例
我试着仿照例子尝试了一下。
环境
步骤
-
- 安装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连接插件