上一章我们介绍了一些基本的Docker命令
http://www.jianshu.com/p/0ab9f3328cf5
下面我们将接近工程实际,探索如何自动化的部署Docker镜像
最简单的方法
首先第一种,肯定是找到了和我们想要的镜像差不多的镜像,然后直接使用别人的镜像
docker search [AAAA/BBB]
docker pull [AAAA/BBB]
编写Dockfile
Dockfile类似与Makefile,Makefile是通过make构建整个工程项目,而Dockfile是通过Docker build来构建整个镜像。那么,与makefile相同的是,构建镜像的规则是由Dockfile来指定的。
下面是Dockfile的基本语法
FROM [image Base]
MAINTAINER [alias] <[email]>
WORKDIR [change to directory]
RUN [command]
ENV [Variable]
EXPOSE [Ports]
...
其含义为,从一个base的镜像开始,在此基础上构造我们自己的镜像。MAINTAINER声明了镜像的所有者以及其email。WORKDIR,切换到指定的工作目录,类似于Linux Bash中的cd。RUN,运行指定的命令。ENV,设置对应的环境变量。EXPOSE,暴露指定的端口。
需要注意的是:
如果要在build一个docker的时候下载东西,需要设置ip_forwarding。
参考:http://www.jianshu.com/p/4d144f874b61
Dockfile构建实例
下面我们用一个构建tomcat+mysql+mysql的实例来理解Dockerfile:
先看完整代码:
FROM centos
MAINTAINER shepherd <abcdefg@gmail.com>
# Install tools
RUN yum install -y wget httpd
# Install java8
# If use wget to get rpm, error occurs because this rpm need to agree the license like below
# RUN wget http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.rpm
# So download it mannualy and ADD to docker or install java by yum
RUN yum install -y java-1.8.0-openjdk
RUN echo $JAVA_HOME && java -version
# Install Tomcat7
RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.75/bin/apache-tomcat-7.0.75.tar.gz && \
tar xvf apache-tomcat-7.0.75.tar.gz -C /usr/local && mv /usr/local/apache-tomcat-7.0.75 /usr/local/tomcat
# Install php
RUN yum install -y php
# Install mysql
ADD mysql/ mysql/
RUN yum install -y mysql/*
# Install mycat
RUN wget http://code.taobao.org/svn/openclouddb/downloads/old/MyCat-Sever-1.2/Mycat-server-1.2-GA-linux.tar.gz
RUN mkdir /opt/mycat && tar xvf Mycat-server-1.2-GA-linux.tar.gz -C /opt/mycat && useradd mycat && chown -R mycat.mycat /opt/mycat && \
chmod a+x /opt/mycat/bin/*
# Set Environment Variables
ENV MYSQL_ROOT_PASSWORD=123456
ENV MYCAT_USER mycat
ENV MYCAT_PASS mycat
# Expose ports
EXPOSE 8080 8066 9066
# Upload script
COPY startup.sh /root/startup.sh
RUN chmod a+x /root/startup.sh
ENTRYPOINT /root/startup.sh
接下来是详解:
FROM centos
表示我们这个自定义的镜像从docker hub上面的centos镜像开始构建。
MAINTAINER shepherd abcdefg@gmail.com
表示这个构建出来的镜像的作者是shepherd,邮箱是abcdefg@gmail.com
Install tools
RUN yum install -y wget httpd
表示在base的镜像即centos中运行yum命令,安装wget httpd等
Install java8
RUN yum install -y java-1.8.0-openjdk
RUN echo $JAVA_HOME && java -version
表示安装java1.8,这里之所以不使用oracle源码的rpm安装的原因是因为提前下载或者通过wget在centos镜像里面下载的java1.8的rpm,是需要accept license认证的,如果通过(下面代码)机器抓取的方式获取的rpm,可能在yum安装的时候报错(报的错还是含有html代码的)
wget http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.rpm
yum -y install jdk-8u121-linux-x64.rpm
Install Tomcat7
RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.75/bin/apache-tomcat-7.0.75.tar.gz &&
tar xvf apache-tomcat-7.0.75.tar.gz -C /usr/local && mv /usr/local/apache-tomcat-7.0.75 /usr/local/tomcat
安装tomcat。先下载对应的编译好的tomcat,然后移动到/usr/local下面去。
Install php
RUN yum install -y php
安装php
Install mysql
ADD mysql/ mysql/
RUN yum install -y mysql/*
安装mysql,这里的ADD是将当前目录下面的文件,复制到对应镜像内部的工作目录下面,我的mysql里面包含了如下文件,这些可以去mysql的官网或者镜像网站下载。
这里提到一个用yum安装时候的变量$BASEARCH,即是base architecture,在yum安装的时候,会输出这个变量对应CPU的型号比如i386以及x86_64等,然后可以下载到对应CPU型号的安装数据包,大家在mysql上面下载的时候就可以用着变量。
Paste_Image.png
Install mycat
RUN wget http://code.taobao.org/svn/openclouddb/downloads/old/MyCat-Sever-1.2/Mycat-server-1.2-GA-linux.tar.gz
RUN mkdir /opt/mycat && tar xvf Mycat-server-1.2-GA-linux.tar.gz -C /opt/mycat && useradd mycat && chown -R mycat.mycat /opt/mycat &&
chmod a+x /opt/mycat/bin/*
安装mycat
Set Environment Variables
ENV MYSQL_ROOT_PASSWORD=123456
ENV MYCAT_USER mycat
ENV MYCAT_PASS mycat
设置环境变量
Expose ports
EXPOSE 8080 8066 9066
暴露端口
Upload script
COPY startup.sh /root/startup.sh
RUN chmod a+x /root/startup.sh
ENTRYPOINT /root/startup.sh
上传启动服务的脚本,并且赋予执行权限,然后让其镜像表现为一个程序一样,一旦实例化这个镜像就会启动这个脚本,服务启动。
startup.sh
sed -i 's/user name="test"/user name=\"'"$MYCAT_USER"'"/' /opt/mycat/conf/server.xml
sed -i 's/name="password">test/name="password">'"$MYCAT_PASS"'/' /opt/mycat/conf/server.xml
mysqld_safe & /opt/mycat/bin/mycat start & httpd & /usr/local/tomcat/bin/catalina.sh run
实际上就是已启动mysql, mycat, tomcat, httpd
注意这里的mysqld_safe是启动mysql server端的可执行程序,在安装了mysql_community-server-5.3.26-2.el5.x6_64.rpm之后才会有这个可执行的程序,其含义是安全地启动mysql(如果down掉还可以自重启)。
网友评论