13
混用 Ansible 建置 Docker Image Presented by chusiang Mar 19th, 2017 Docker.Taipei

混用 Ansible 建置 Docker image

Embed Size (px)

Citation preview

Page 1: 混用 Ansible 建置 Docker image

混用 Ansible 建置 Docker Image

Presented by chusiangMar 19th, 2017

Docker.Taipei

Page 2: 混用 Ansible 建置 Docker image

Dockerfile客製化 docker image 用的檔案

Page 3: 混用 Ansible 建置 Docker image

簡單的 Dockerfile

# This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] ..

# 基本映像檔,必須是第一個指令

FROM ubuntu

# 維護者: docker_user <docker_user at email.com> (@docker_user)MAINTAINER docker_user [email protected]

# 更新映像檔的指令

RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.listRUN apt-get update && apt-get install -y nginxRUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# 建立新容器時要執行的指令

CMD /usr/sbin/nginx

一般由基底映像檔資訊、維護者資訊、映像檔操作指令和容器 啟動指令四部分組成。

這裡用到了以下 4 個指令:

● FROM● MAINTAINER● RUN● CMD

資料來源:

● 《Docker — 從入門到實踐­》正體中文版 | GitBook

Page 4: 混用 Ansible 建置 Docker image

較複雜的 Dockerfile

FROM ubuntu

MAINTAINER imtnd

RUN apt-get update -y && \ apt-get install -y apache2 php5 wget php5-mysql

RUN wget -q http://sourceforge.net/projects/testlink/files/TestLink%201.9/TestLink%201.9.14/testlink-1.9.14.tar.gz/download -O testlink-1.9.14.tar.gz &&\ tar zxvf testlink-1.9.14.tar.gz && \ mv testlink-1.9.14 /var/www/html/testlink && \ rm testlink-1.9.14.tar.gz

RUN echo "max_execution_time=3000" >> /etc/php5/apache2/php.ini && \ echo "session.gc_maxlifetime=60000" >> /etc/php5/apache2/php.ini

ENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_LOG_DIR /var/log/apache2ENV APACHE_PID_FILE /var/run/apache2.pid

以 imtnd/testlink image 的 Dockerfile 為例。

ENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_LOCK_DIR /var/lock/apache2

RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR

RUN mkdir -p /var/testlink/logs /var/testlink/upload_area

RUN chmod 777 -R /var/www/html/testlink && \ chmod 777 -R /var/testlink/logs && \ chmod 777 -R /var/testlink/upload_area

EXPOSE 80/tcp

CMD ["/usr/sbin/apache2","-D", "FOREGROUND"]

Page 5: 混用 Ansible 建置 Docker image

公司的 Dockerfile

FROM ubuntu

MAINTAINER imtnd

RUN apt-get update -y && \ apt-get install -y apache2 php5 wget php5-mysql

RUN wget -q http://sourceforge.net/projects/testlink/files/TestLink%201.9/TestLink%201.9.14/testlink-1.9.14.tar.gz/download -O testlink-1.9.14.tar.gz &&\ tar zxvf testlink-1.9.14.tar.gz && \ mv testlink-1.9.14 /var/www/html/testlink && \ rm testlink-1.9.14.tar.gz

RUN echo "max_execution_time=3000" >> /etc/php5/apache2/php.ini && \ echo "session.gc_maxlifetime=60000" >> /etc/php5/apache2/php.ini

…...

絕對沒有那麼簡單!

Page 6: 混用 Ansible 建置 Docker image

Dockerfile + Ansible把複雜的組態設定交給 Ansible 就對了!

Page 7: 混用 Ansible 建置 Docker image

混用 Ansible 的 Dockerfile

FROM williamyeh/ansible:ubuntu14.04-onbuild

MAINTAINER Chu-Siang Lai <[email protected]>

# fix policy-rc.d for Docker# @see http://www.monblocnotes.com/node/2057# @see http://askubuntu.com/a/365912RUN sed -i -e 's/exit\s\s*101/exit 0/' /usr/sbin/policy-rc.d

# initRUN sudo apt-get install -y curl git make ;\ git clone https://github.com/chusiang/testlink.ansible.role.git ;\ cd testlink.ansible.role ;\ make init

ENV PLAYBOOK testlink.ansible.role/setup.ymlRUN ansible-playbook-wrapper -vvvRUN cp run.sh /

以 chusiang/testlink image 的 Dockerfile 為例。

EXPOSE 80 443 VOLUME [ "/data" ]ENTRYPOINT [ "/run.sh" ]

Page 8: 混用 Ansible 建置 Docker image

https://github.com/chusiang/testlink.ansible.role

Page 9: 混用 Ansible 建置 Docker image

https://hub.docker.com/r/chusiang/testlink/

Page 10: 混用 Ansible 建置 Docker image

https://hub.docker.com/r/chusiang/testlink/builds/

Page 11: 混用 Ansible 建置 Docker image

為什麼要混用 Ansible?

比 Shell Script 好維護

支援多種環境(實體機、VM、Docker)

Infrastructure as Code

可一份組態適用多個 OS

透過 Ansible存取系統變數

不是每家公司都敢在 Productoin 跑 Docker

Page 12: 混用 Ansible 建置 Docker image

Reference

《Docker — 從入門到實踐­》正體中文版 | GitBook

28. 怎麼混用 Ansible 建置 Docker image? | iT 邦幫忙

從 Ansible 到 Docker:混血模式 | 軟體架構・絮語A

Google Slides Themes UX Template | Free Google Slides Templates

Page 13: 混用 Ansible 建置 Docker image

13

END