SlideShare a Scribd company logo
1 of 13
Download to read offline
混用 Ansible 建置 Docker Image
Presented by chusiang
Mar 19th, 2017
Docker.Taipei
Dockerfile
客製化 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 docker_user@email.com
# 更新映像檔的指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main
universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "ndaemon off;" >> /etc/nginx/nginx.conf
# 建立新容器時要執行的指令
CMD /usr/sbin/nginx
一般由基底映像檔資訊、維護者資訊、映像檔操作指令和容器 啟動指令四部分組成。
這裡用到了以下 4 個指令:
● FROM
● MAINTAINER
● RUN
● CMD
資料來源:
● 《Docker — 從入門到實踐­》正體中文版 | GitBook
較複雜的 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-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
以 imtnd/testlink image 的 Dockerfile 為例。
ENV APACHE_RUN_DIR /var/run/apache2
ENV 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"]
公司的 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
…...
絕對沒有那麼簡單!
Dockerfile + Ansible
把複雜的組態設定交給 Ansible 就對了!
混用 Ansible 的 Dockerfile
FROM williamyeh/ansible:ubuntu14.04-onbuild
MAINTAINER Chu-Siang Lai <chusiang.lai@gmail.com>
# fix policy-rc.d for Docker
# @see http://www.monblocnotes.com/node/2057
# @see http://askubuntu.com/a/365912
RUN sed -i -e 's/exitss*101/exit 0/' /usr/sbin/policy-rc.d
# init
RUN 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.yml
RUN ansible-playbook-wrapper -vvv
RUN cp run.sh /
以 chusiang/testlink image 的 Dockerfile 為例。
EXPOSE 80 443
VOLUME [ "/data" ]
ENTRYPOINT [ "/run.sh" ]
https://github.com/chusiang/testlink.ansible.role
https://hub.docker.com/r/chusiang/testlink
https://hub.docker.com/r/chusiang/testlink/builds
為什麼要混用 Ansible?
比 Shell Script 好維護
支援多種環境
(實體機、VM、Docker)
Infrastructure as Code
可一份組態適用多個 OS
透過 Ansible
存取系統變數
不是每家公司都敢在
Productoin 跑 Docker
Reference
《Docker — 從入門到實踐­》正體中文版 | GitBook
28. 怎麼混用 Ansible 建置 Docker image? | iT 邦幫忙
從 Ansible 到 Docker:混血模式 | 軟體架構・絮語A
Google Slides Themes UX Template | Free Google Slides Templates
13
END

More Related Content

More from Chu-Siang Lai

The System Engineer in Agile Team
The System Engineer in Agile TeamThe System Engineer in Agile Team
The System Engineer in Agile TeamChu-Siang Lai
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationChu-Siang Lai
 
See the Agile from Mindset
See the Agile from MindsetSee the Agile from Mindset
See the Agile from MindsetChu-Siang Lai
 
Writing skills for Information Technology
Writing skills for Information TechnologyWriting skills for Information Technology
Writing skills for Information TechnologyChu-Siang Lai
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)Chu-Siang Lai
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Chu-Siang Lai
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Chu-Siang Lai
 
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)Chu-Siang Lai
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧Chu-Siang Lai
 
使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站Chu-Siang Lai
 
歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)Chu-Siang Lai
 
無痛入門 Chromecast
無痛入門 Chromecast無痛入門 Chromecast
無痛入門 ChromecastChu-Siang Lai
 
Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃Chu-Siang Lai
 
Intro of Network, WiFi on Ubuntu
Intro of Network, WiFi on UbuntuIntro of Network, WiFi on Ubuntu
Intro of Network, WiFi on UbuntuChu-Siang Lai
 

More from Chu-Siang Lai (20)

My DevOps Tour 2.3
My DevOps Tour 2.3My DevOps Tour 2.3
My DevOps Tour 2.3
 
The System Engineer in Agile Team
The System Engineer in Agile TeamThe System Engineer in Agile Team
The System Engineer in Agile Team
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automation
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
See the Agile from Mindset
See the Agile from MindsetSee the Agile from Mindset
See the Agile from Mindset
 
Writing skills for Information Technology
Writing skills for Information TechnologyWriting skills for Information Technology
Writing skills for Information Technology
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
My DevOps Tour 1.0
My DevOps Tour 1.0My DevOps Tour 1.0
My DevOps Tour 1.0
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd+)
 
Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)Continuous Delivery with Ansible x GitLab CI (2e)
Continuous Delivery with Ansible x GitLab CI (2e)
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
 
helloTux 2012
helloTux 2012helloTux 2012
helloTux 2012
 
Unity & Googlizer
Unity & GooglizerUnity & Googlizer
Unity & Googlizer
 
使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站使用 Multi-sites 技術快速建置多 Drupal 網站
使用 Multi-sites 技術快速建置多 Drupal 網站
 
歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)歡迎來到 Ubuntu 9.10 Release Party (台中)
歡迎來到 Ubuntu 9.10 Release Party (台中)
 
無痛入門 Chromecast
無痛入門 Chromecast無痛入門 Chromecast
無痛入門 Chromecast
 
Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃Ubuntu 藍星侵略計劃
Ubuntu 藍星侵略計劃
 
Intro of Network, WiFi on Ubuntu
Intro of Network, WiFi on UbuntuIntro of Network, WiFi on Ubuntu
Intro of Network, WiFi on Ubuntu
 

混用 Ansible 建置 Docker image

  • 1. 混用 Ansible 建置 Docker Image Presented by chusiang Mar 19th, 2017 Docker.Taipei
  • 3. 簡單的 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 docker_user@email.com # 更新映像檔的指令 RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list RUN apt-get update && apt-get install -y nginx RUN echo "ndaemon off;" >> /etc/nginx/nginx.conf # 建立新容器時要執行的指令 CMD /usr/sbin/nginx 一般由基底映像檔資訊、維護者資訊、映像檔操作指令和容器 啟動指令四部分組成。 這裡用到了以下 4 個指令: ● FROM ● MAINTAINER ● RUN ● CMD 資料來源: ● 《Docker — 從入門到實踐­》正體中文版 | GitBook
  • 4. 較複雜的 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-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid 以 imtnd/testlink image 的 Dockerfile 為例。 ENV APACHE_RUN_DIR /var/run/apache2 ENV 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"]
  • 5. 公司的 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 …... 絕對沒有那麼簡單!
  • 7. 混用 Ansible 的 Dockerfile FROM williamyeh/ansible:ubuntu14.04-onbuild MAINTAINER Chu-Siang Lai <chusiang.lai@gmail.com> # fix policy-rc.d for Docker # @see http://www.monblocnotes.com/node/2057 # @see http://askubuntu.com/a/365912 RUN sed -i -e 's/exitss*101/exit 0/' /usr/sbin/policy-rc.d # init RUN 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.yml RUN ansible-playbook-wrapper -vvv RUN cp run.sh / 以 chusiang/testlink image 的 Dockerfile 為例。 EXPOSE 80 443 VOLUME [ "/data" ] ENTRYPOINT [ "/run.sh" ]
  • 11. 為什麼要混用 Ansible? 比 Shell Script 好維護 支援多種環境 (實體機、VM、Docker) Infrastructure as Code 可一份組態適用多個 OS 透過 Ansible 存取系統變數 不是每家公司都敢在 Productoin 跑 Docker
  • 12. Reference 《Docker — 從入門到實踐­》正體中文版 | GitBook 28. 怎麼混用 Ansible 建置 Docker image? | iT 邦幫忙 從 Ansible 到 Docker:混血模式 | 軟體架構・絮語A Google Slides Themes UX Template | Free Google Slides Templates