美文网首页
用Dockerfile创建镜像--自动化部署tomcat+mys

用Dockerfile创建镜像--自动化部署tomcat+mys

作者: shepherdking | 来源:发表于2017-02-26 00:53 被阅读0次

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

    相关文章

      网友评论

          本文标题:用Dockerfile创建镜像--自动化部署tomcat+mys

          本文链接:https://www.haomeiwen.com/subject/wyznwttx.html