利用Ansible部署运行Apache(http)的Docker容器

在自动化运维领域,除了saltstack,还有ansible这个批量安装部署工具,在写具体内容先,先谈谈我用过两个工具后的感想。

saltstack是C/S框架,要在客户端装软件,并且启动服务才能进行管理,ansible是通过ssh连接到客户端的,也就是说必须把密钥传给客户端才能进行管理,虽然可以关闭这个验证方式,但是生产环境中肯定是不能关闭的,从这一点看,还是ansible更容易配置,完全可以用脚本循环遍历所有主机来添加密钥。

使用方面,命令复杂程度相似,理解起来更容易的应该是saltstack,命令基本都是英语的组合,ansible则是依靠各种模式,参数来执行管理。

脚本编程方面,编程复杂度方面不尽相同,ansible提供群组的方式来对多主机提供管理,在推送操作到客户端时需给出明确的执行文件(yml),对于文件的存放位置没有明确的规定,saltstack需要在命令行提供主机信息,在推送时执行的是配置文件中提供的目录中的文件(sls),推送的文件也必须在这个目录中。

以上是我个人的一些见解,下面开始实战操作

环境介绍:

Centos 6.5

Ansible 2.3.0

Docker 1.7.1

Http 2.4.6-67

一.Docker操作

1.docker安装

这部分略过,如果你对docker安装和一些常用命令不了解,请参考《Docker常用命令和操作

2.拉取ansible镜像

docker pull ansible/centos7-ansible    #推荐使用这个镜像

拉取成功后可以在images里查看到这个镜像

3.运行镜像,打开一个容器

docker run -it --name ansible 6883

4.修改配置文件

vi /etc/ansible/hosts

[local]\nlocalhost\n  >>>>>

[local]

localhost

这两个回车符在运行时是不能转义的,会报错

5.提交修改后的容器

docker commit 1277 ansiblev2

6.编写镜像构建方法

vim Dockerfile

FROM ansiblev2
MAINTAINER bin [email protected]

WORKDIR /opt/ansible    #定义工作区
RUN mkdir /opt/ansible/files    #创建必须目录
RUN mkdir /opt/ansible/template

ADD httpd.conf /opt/ansible/files    #把需要的文件复制到指定位置
ADD index.html.j2 /opt/ansible/template    
ADD web.yml /opt/ansible/

RUN ansible-playbook /opt/ansible/web.yml -c local  #运行ansible进行自动部署

VOLUME /var/www/html    #定义数据卷

CMD ["/usr/sbin/httpd","-X"]    #让httpd服务在前台运行
EXPOSE 80        #开放80端口,httpd.conf配置文件中必须也是80端口

二.Ansible操作

1.编写服务部署方法

vim web.yml  #ansible和saltstack在文字格式方面要求同样严格,如果报错,请查看格式是否正确!

- name: Configure webserver with http        #在运行时的提示信息
  hosts: local        #对本地主机组进行操作
  sudo: True        #运行时切换用户
  tasks:            #建立任务
    - name: install http
      yum: name=httpd update_cache=yes    #安装httpd,更新缓存
    - name: copy http config file
      copy: src=files/httpd.conf dest=/etc/httpd/conf    #文件复制

    - name: enable configuration
      file: >        #竖版写法,建立软连接
         dest=/etc/httpd/configure
         src=/etc/httpd/conf/
         state=link

    - name: copy index.html    #拷贝主页文件
      template: src=template/index.html.j2 dest=/var/www/html/index.html mode=0644

2.index.html.j2的内容

<html>
  <head>
    <title>Welcome to ansible!</title>
  </head>
  <body>
  <h1>http,configured by Ansible</h1>
  <p>If you can see this,Ansible successfully installed http.</p>
  <p>{{ ansible_env }}</p>    #会显示容器的环境变量
  #要想显示更多信息,可以通过ansible hostname -m setup来查看可以引用的变量
  <p>{{ ansible_env.PATH }}</p>    #显示环境变量中的PATH的值
  </body>
</html>

三.构建镜像,启动容器

1.构建镜像

当前目录结构

docker build -t ansible/httpd .

2.启动容器

docker run -d -p 8000:80 --name httpd ansible/httpd  #把容器的80端口映射到本地的8000端口

3.查看容器运行情况

docker ps -a

4.因为在构建镜像的时候指定了数据卷,可以在启动容器的时候挂载数据卷,方便代码修改

docker run -d -p 8001:80 -v /var/www/html:/var/www/html --name http2 ansible/httpd

四.测试主页

http://192.168.6.10:8000

出现如上显示为部署正常

时间: 2024-10-11 11:21:01

利用Ansible部署运行Apache(http)的Docker容器的相关文章

【分布式协调zookeeper】利用ansible部署篇

一.环境准备 操作系统:centOS-6.8 2.6.32-642.el6.x86_64[虚拟机环境] 节点主机:10.0.55.3.10.0.55.5.10.0.55.6 目录结构: /opt/ 软件版本:   jdk-7u67-linux-x64.rpm             zookeeper-3.5.0-alpha.tar.gz 二.安装Java环境 $ rpm -ivh jdk-7u67-linux-x64.rpm  $ cat /etc/profile export JAVA_HO

利用shipyard部署swarm集群及管理容器

shipyard是一个web管理容器的工具 服务器列表: 10.0.22.232    swarm-manage 10.0.22.244    swarm-node-1 10.0.22.245    swarm-node-2 部署swarm集群: swarm-manage #curl -s https://shipyard-project.com/deploy | bash -s Digest: sha256:8a60ad2ee9bd1e4e3d2e50b4c61ed510a158c8ca632

Gitlab CI 自动部署 asp.net core web api 到Docker容器

为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成.监控报警.以及扩容和高可用性的问题.是学习和探索的过程分享给大家,也欢迎同行的人交流. 先来一个三步曲,我们将完成通过GitLab CI 自动部署 net core web api 到Docker 容器的一个示例.这是第一步,通过此文您将了解如何将net core web api 运行在Docker

使用nginx实现一个主机部署多域名指向不同docker项目

原文:使用nginx实现一个主机部署多域名指向不同docker项目  1,安装 docker yum install docker 使用Docker 中国加速器 vim /etc/docker/daemon.json 添加下面代码 { "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true } (这个文件 初始状态是空的 只有“{}”) 启动服务 s

Docker入门实战-SSH连接docker容器

简介 什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护. Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc.Redhat 已经在其 RHEL6.5 中集中支持 Docker:Google 也在其 PaaS

【原创】Docker容器及Spring Boot微服务应用

Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不行呢?! ” 这是一个典型的应用场景,Docker image中包含了程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk:比如Python的程序,肯定要在image中包含对应版本的Python解释器.Docker把整个运行时环境打包放到image中,所以搞定了环境依赖问题

Docker容器基础

前言 统称来说,容器是一种工具,指的是可以装下其它物品的工具,以方便人类归纳放置物品.存储和异地运输,具体来说比如人类使用的衣柜.行李箱.背包等可以成为容器,但今天我们所说的容器是一种IT技术. 容器技术是虚拟化.云计算.大数据之后的一门新兴的并且是炙手可热的新技术,容器技术提高了硬件资源利用率.方便了企业的业务快速横向扩容.实现了业务宕机自愈功能,因此未来数年会是一个容器愈发流行的时代,这是一个对于IT行业来说非常有影响和价值的技术,而对于IT行业的从业者来说,熟练掌握容器技术无疑是一个很有前

docker容器一

容器的介绍 容器是一种基础工具,泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品:物体可以被放置在容器中,而容器则可以保护内容物. 名称挂载点 Mount:挂载点 UTS:主机名与域名 IPC:信息量.消息队列和共享内存 PID:进程号 Network:网络设备.网络栈.端口号 user:用户和组 docker的概念 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一

Docker容器构建过程的安全性分析

DevOps概念的流行跟近些年微服务架构的兴起有很大关系,DevOps是Dev(Development)和Ops(Operations)的结合,Dev负责开发,Ops负责部署上线,Docker出现之前,公司需要搭建一个数据库环境,有了Docker之后,只需在一些开源的基础镜像上构建出公司自己的镜像即可. 因此目前大多数DevOps设置都在CI管道中的某处设置了Docker,这就意味着你所看到的任何构建环境都将使用Docker等容器解决方案.由于这些构建环境需要接受不可信的用户提供的代码并进行执行