利用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    #推薦使用這個鏡像

拉取成功後可以在p_w_picpaths裏查看到這個鏡像

c377af828d2f30e421712f6107f5e281.png-wh_

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.構建鏡像

當前目錄結構

29ff6b324870a0f86c3ea73276e47769.png-wh_

docker build -t ansible/httpd .

2.啓動容器

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

3.查看容器運行情況

docker ps -a

f760e6540716cacf2d5e1b34751d3ac7.png-wh_

4.因爲在構建鏡像的時候指定了數據卷,可以在啓動容器的時候掛載數據卷,方便代碼修改

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

四.測試主頁

http://192.168.6.10:8000

10081d6d6171b340575d4888f9945c5c.png-wh_

出現如上顯示爲部署正常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章