前置工作:
1.在管理机中,已安装好ansible(操作系统是Centos7.5)
2.管理机和目标机已做ssh配置。本例子中,目标机有2台:localhost、john
/etc/ansible/hosts内容如何:
[john] ansible-john ansible_ssh_host=主机ip地址 ansible_ssh_user="root" ansible_ssh_pass="密码" ansible_ssh_port=22 [local] localhost ansible_connection=local
3.目标机器已经安装docker
本例,将通过ansible的role模块,基于docker部署一个最简单的springboot 容器。
以下所有操作,都是在管理机(ansible)中执行
1.ansible默认安装位置位于/etc/ansible,我将在此处创建roles和playbook两个文件夹
mkdir /etc/ansible/playbook mkdir /etc/ansible/roles
在/etc/ansible/ansible.cfg配置文件中,可以通过配置项roles_path指定roles的位置,默认位于/etc/ansible/roles
2.进入roles目录,初始化角色springdemo
cd /etc/ansible/roles ansible-galaxy init springdemo
初始化执行完成后,在springdemo目录会自动生成如下子目录和默认文件
roles: <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles springdemo: <---具体的角色项目名称,比如nginx、tomcat、php files: <--用来存放由copy模块或script模块调用的文件。 templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。 tasks: <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。 main.yml handlers: <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。 main.yml vars: <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。 main.yml defaults: <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。 main.yml meta: <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。 main.yml
3.将springdemo.jar包复制到/etc/ansible/roles/springdemo/files路径下
justspringdemo-1.0-SNAPSHOT.jar包:因jar包过大,无法上传。请自行换成自身的项目包
4.上传springdemo_dockerfile文件到/etc/ansible/roles/springdemo/templates目录,用于build docker镜像
springdemo_dockerfile内容如下:
# 版本信息 FROM openjdk:8-alpine MAINTAINER danny LABEL version="lable1.0" WORKDIR /home #打包项目并拷贝到tomcat webapps目录 COPY justspringdemo-1.0-SNAPSHOT.jar /home #开启内部服务端口 EXPOSE {{http_port}} #启动tomcat服务器 CMD java -jar justspringdemo-1.0-SNAPSHOT.jar
5.编辑/etc/ansible/roles/springdemo/vars/main.yml,定义安装过程中使用的变量
--- # vars file for springdemo memory: 512m http_port: 8081 author: danny
6编辑/etc/ansible/roles/springdemo/tasks/main.yml,定义任务内容
--- # tasks file for springdemo - name: create folder /home/ansible file: path: /home/ansible state: directory - name: copy spring docker file template: src=springdemo_dockerfile dest="/home/ansible/springdemo_dockerfile" - name: copy spring demo jar copy: src: justspringdemo-1.0-SNAPSHOT.jar dest: /home/ansible owner: root mode: 0644 backup: no - name: build docker image command: docker build -f /home/ansible/springdemo_dockerfile -t springdemo /home/ansible - name: wait 10s after build image command: sleep 10 - name: stop demo container if exist command: docker stop springdemo - name: wait 10s after stop container command: sleep 10 - name: rm demo container if exist command: docker rm springdemo - name: run springdemo demo command: docker run -d -p 10002:{{http_port}} --name springdemo springdemo
中间有sleep 10秒的操作,目的是保证docker build,docker stop成功执行,便于往下继续操作
7.创建playbook剧本
touch /etc/ansible/playbook/springdemo.yml
springdemo.yml 剧本内容:
--- # 演示通过role管理playbook - hosts: all remote_user: root strategy: free roles: - springdemo post_tasks: - shell: echo 'demo manage playbook by role' register: ret - debug: var=ret.stdout
8.运行playbook剧本
ansible-playbook springdemo.yml
运行结果:
9.切换到目标机器,进一步验证playbook任务是否正常启动成功