您的位置:首页 > 运维架构 > Docker

在docker里面安装部署应用

2015-10-26 16:27 691 查看
  最近一直在做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工程是如何安装的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: