最近一直在做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工程是如何安装的。

在docker里面安装部署应用的更多相关文章

  1. Docker:安装部署RabbitMQ

    前言 今天原本想讲解SpringBoot集成RabbitMQ的,临近开始写时才发现家里的电脑根本没有安装RabbitMQ呀.这下只好利用已有的阿里云服务器,直接Docker安装一下了,顺道记录下,算是 ...

  2. Ubuntu 16.04+.Net Core+Docker+Uginx安装部署

    前言 最近公司的项目打算移植到.Net Core平台,所以调研了一下.Net Core在Linux下的安装部署.本篇文章会一步步的描述从安装到配置到部署的全部过程.在文章的结构和内容里,笔者借鉴了很多 ...

  3. Docker从安装部署到Hello World

    Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源.Docker 是一个开源的 ...

  4. Docker环境安装部署Java应用(含安装Tomcat和JDK)

    1.部署思路 两台docker机(centos 7系统),Docker 版本:18.09.6, build 481bc77156 Docker host IP:192.168.102.135 Dock ...

  5. Jump Server在docker中安装部署

    安装部署: 1.准备机器: 官方环境要求: 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低) 操作系统: Linux 发行版 x86_64 Python = 3.6.x Mysql S ...

  6. Docker ElK安装部署使用教程

    一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引 ...

  7. Zookeeper——Docker下安装部署

    单节点安装 一. 环境说明 docker: 18.09.9-ce zookeeper: 3.5.6 二. 拉取 zookeeper 镜像 拉取镜像 docker pull zookeeper 默认是摘 ...

  8. docker+nginx 安装部署修改资源目录配置文件和容器端口信息

    查看docker镜像 可以先查看docker下是否存在nginx镜像,使用如下这些命令查看: docker images: 列出所有镜像. docker images nginx: 列出所有nginx ...

  9. LinuxMint下Docker的安装部署和验证

    通过lsb_release命令查看以下我的LinuxMint发行版, 查看以下我的Linux内核版本, Docker要求Linux内核版本必须在要在3.10以上,显然我们的系统是满足的. 1. Doc ...

随机推荐

  1. 『转载』C# winform 中dataGridView的重绘(进度条,虚线,单元格合并等)

    原文转载自:http://hi.baidu.com/suming/item/81e45b1ab9b4585f2a3e2243 最近比较浅的研究了一下dataGridView的重绘,发现里面还是有很多东 ...

  2. 云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降

    今天中午12:00左右,在Windows性能监视器中突然发现SLB中的两台云服务器的IIS请求到达量(ArriveRate)突然下降,见下图: IIS日志中的情况如下: 综合以上情况,我们推测在12: ...

  3. 19.C#逐一介绍IEnumerable和IEnumerable<T>中的扩展方法(10.3-10.5)

    今天没有太多的言语,只有代码,扩展方法多得太多,不能一一列完,书中一些,看多了也就会使用了. //Enumerable.Range 返回起始到结束范围,是一个Enumrable<int>类 ...

  4. 【Aaronyang原创】用linq取出一个集合中重复的数据

    文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs.net/2013/07/69/ 文章已经迁移:http://www.ayjs ...

  5. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  6. 温故知新---重读C#InDepth(二)

    一本好书,或是一本比较有深度的书,就是每次研读的时候都会有新的发现. 好吧,我承认每次读的时候都有泛泛而过的嫌疑~~ 这几年一直专注于C#客户端的开发,逐步从迷迷糊糊,到一知半解,再到自以为是,最后沉 ...

  7. JavaScript基础---语言基础(2)

    运算符 1.一元运算符 2.算术运算符 3.关系运算符 4.逻辑运算符 5.*位运算符 6.赋值运算符 7.其他运算符 8.运算符优先级 ECMA-262描述了一组用于操作数据值的运算符,包括一元运算 ...

  8. DOM系列---DOM操作表格

    DOM在操作生成HTML上,还是比较简明的.不过,由于浏览器总是存在兼容和陷阱,导致最终的操作就不是那么简单方便了.本篇章主要了解一下DOM操作表格. 一.操作表格 <table>标签是H ...

  9. 第十四课:js操作节点的插入,复制,移除

    节点插入 appendChild方法,insertBefore方法是常用的两个节点插入方法,具体实现,请看js高级程序设计,或者自行百度. 这里提一下面试时经常会问到的问题,插入多个节点时,你是怎么插 ...

  10. CSS3——3D效果

    1.效果1 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" c ...