zoukankan      html  css  js  c++  java
  • 在docker里面安装部署应用

      最近一直在做docker的安装打包工作,学到不少东西,在博客里记一下。

      环境centos6 ,docker 基础镜象centos6

      1、创建本地基础镜象,安装基础命令包

      (1)Dockerfile,Dockerfile用来创建一个自定义的image,包含用户指定的软件依赖。使用build命令来创建新的images。

      Dockerfile内容:

      

    FROM centos:centos6
    
    ADD CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
    RUN     yum clean all && 
            yum -y install vim 
            tar 
            gcc-c++ 
            openssh-server 
            openssh-clients 
            tcpdump 
             passwd 
            screen 
            telnet 
            sudo 
            vixie-cron 
            pcre-devel 
            gd-devel 
            curl-devel 
            ncurses-devel 
            bison 
            gcc 
            mysql  
            openssl-devel 
            openssl 
            python-dateutil 
            svn

    FROM centos:centos6,是指定基础镜象

    ADD 是把当前文件夹下面的CentOS-Base.repo映射 到容器里面的/etc/yum.repos.d/CentOS-Base.repo

    RUN 指定容器启动后要执行的命令。

    (2)执行build.sh脚本

    docker build -t=video-base:cloud-v4 .

    创建仓库为video-base,tag为cloud-v4的本地镜象。

    2、执行install,把工程拷到docker里面

    (1)Dockerfile内容

    FROM video-base:cloud-v4
    
    ADD
    system_install /opt/system_install
     ENTRYPOINT cd /opt/system_install && sh ./install_all.sh && sh ./install_setup.s

    a.从第一步生成的video-base:cloud-v4生成新镜象

    b.把当前文件夹下的system_install映射成容器里面的 /opt/system_install

    c.执行install_all.sh

    PWD_DIR=$(cd "$(dirname "$0")"; pwd)
    echo "current dir path:"$PWD_DIR
    cd $PWD_DIR
    
    chmod -R 755 .
    
    mkdir -p /opt/srv
    
    echo "step 1: java"
    sh ./java_install.sh
    
    echo "step 2: nginx"
    sh ./nginx_install.sh
    
    echo "step 3: resin "
    sh resin_install.sh
    
    echo "step 4: server"
    sh server_install.sh
    
    echo "step 5: av_convert"
    sh av_convert_install.sh
    
    echo "step 6: monitor"
    sh ./monitor_install.sh
    cp monitor.conf /opt/service_check/monitor.conf 
    
    
    echo "all installed."

    d.java install.sh内容

    echo "java install"
    rpm -ivh /opt/src/jdk-7u65-linux-x64.rpm
    
    echo 'export JAVA_HOME=/usr/java/jdk1.7.0_65' >> /etc/profile
    echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
    echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' >> /etc/profile
    
    source /etc/profile
    
    mv /usr/bin/java{,.bak}
    ln -s -f $JAVA_HOME/jre/bin/java   /usr/bin/java

    e.av_convert install.sh

    #!/bin/sh
    PWD_DIR=$(cd "$(dirname "$0")"; pwd)
    
    #NAME="resin-4.0.37"
    #FROM=$NAME".tar.gz"
    
    if [ $# == 0 ]; then
        SRC_PATH=/opt/src (此处是映射自docker外的/opt/src_3.4)
    elif [ $# == 1 ]; then
        SRC_PATH=$1
    else
        echo "error parameter"
        exit
    fi
    echo "source path:"$SRC_PATH
    
    mkdir -p /opt/srv
    cd  /opt/srv
    
    cp -rpf $SRC_PATH/av_convert ./

    e.执行build.sh,生成video-install-s1:$TAG .的镜象

    PWD_DIR=$(cd "$(dirname "$0")"; pwd)
    cd $PWD_DIR
    . ../../config/env.conf
    TAG=$image_tag
    docker build -t=video-install-s1:$TAG .

    f.执行run.sh启动s1的容器,如果有变动,就生成s2的镜象

    PWD_DIR=$(cd "$(dirname "$0")"; pwd)
    cd $PWD_DIR
    . ../../config/env.conf
    TAG=$image_tag
     docker run -ti 
    -v /opt/src_3.4:/opt/src 
    video-install-s1:$TAG
    
    CID=$(docker ps -a | grep video-install-s1:$TAG | awk '{print $1}'|head -n 1)
    docker commit ${CID} video-install-s2:$TAG
    
    if [ "$1" = "Y" ]; then
            echo "export"
        IMAGE_PATH=~/image_3.4_tmp    
        mkdir -p $IMAGE_PATH
            docker export ${CID} | gzip -c > $IMAGE_PATH/video-install-s2.tar.gz
    fi

    其中

    docker run -ti 
    -v /opt/src_3.4:/opt/src 
    video-install-s1:$TAG这句话是把docker外面的/opt/src_3.4映射为内部的/opt/src

    CID=$(docker ps -a | grep video-install-s1:$TAG | awk '{print $1}'|head -n 1)是获取s1版本容器的id

    docker commit ${CID} video-install-s2:$TAG是把上一步获取的id提交成创库为video-all tag为s2的镜象

    3、保存镜象
    (1)Dockerfile
    FROM video-install-s2:pangu-20150612094957
    MAINTAINER  Cao Song <caosong1@lenovo.com>
    
    ADD file /opt/file
    ENV SHELL /bin/bash
    ENTRYPOINT ["/opt/file/startup.sh"]
    CMD []

    (2)build.sh

    PWD_DIR=$(cd "$(dirname "$0")"; pwd)
    cd $PWD_DIR
    ROOT=$(cd $PWD_DIR; cd ../..; pwd)
    . ../../config/env.conf
    . $ROOT/lib/constant.sh
    TAG=$image_tag
    sed -i "s/FROM.*video-install.*$/FROM video-install-s2:$TAG/g" Dockerfile
    chmod +x $PWD_DIR/file/startup.sh
    docker build -t=${REGISTRY_PREFIX}video-all:$TAG .
    
    if [ "$1" = "Y" ]; then
        echo "save docker images"
        IMAGE_PATH=~/image_3.4_tmp    
        mkdir -p $IMAGE_PATH
        time docker save ${REGISTRY_PREFIX}video-all:$TAG | gzip -9 -c > $IMAGE_PATH/video-all.tar.gz
    fi

    docker save > video-all.tar.gz

    生成docker镜象完成。要注意av_convert工程是如何安装的。

  • 相关阅读:
    二进制拆分线段树
    2017 初赛PJ 错题解析
    线段树基操
    2015 初赛PJ 错题解析
    2016 初赛TG 错题解析
    拓扑排序找最大环最小环
    长乐集训合集
    java读取网页
    java下socket传图片
    java下socket传文件
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/4911597.html
Copyright © 2011-2022 走看看