微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

用Dockerfile创建镜像–自动化部署tomcat+mysql+mycat

docker aide_941 22℃

用Dockerfile创建镜像–自动化部署tomcat+mysql+mycat

shepherdking 

2017.02.26 00:53* 字数 1031 阅读 4575评论 1

上一章我们介绍了一些基本的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掉还可以自重启)。

转载请注明:SuperIT » 用Dockerfile创建镜像–自动化部署tomcat+mysql+mycat

喜欢 (0)or分享 (0)