波神

导航

docker 初始化执行.sh修改.properties文件

1、testmysql.properties

rootuser=aa
rootpass=bb

2、用环境变量修改testmysql.properties里面的rootuser和rootpass的值的脚本testmysql.sh

#!/bin/sh
sed -i "s#^rootuser=.*#rootuser=${ROOT_USER}#g" /root/hzbdir/testmysql.properties
sed -i "s#^rootpass=.*#rootpass=${ROOT_PASS}#g" /root/hzbdir/testmysql.properties
exec "$@"

 以上这种方式修改.properties文件,如果环境变量的值有特殊符号,比如:

MYSQL_CONNECTION_URL="jdbc:mysql://10.111.131.54:3306/mir-pack?useUnicode=yes&amp&characterEncoding=utf8&autoReconnect=true"

因为路径当中含有/所以替换语句当中不能用/作为分割符:

错误:sed -i "s/^rootuser=.*/rootuser=${ROOT_USER}/g" /root/hzbdir/testmysql.properties

正确:sed -i "s#^rootuser=.*#rootuser=${ROOT_USER}#g" /root/hzbdir/testmysql.properties

3、用Dockerfile构建容器

FROM 172.16.101.192/common/centos:6
MAINTAINER huzhengbo
ENV MYDIR /root/hzbdir
RUN mkdir $MYDIR
ADD testmysql.sh $MYDIR
ADD testmysql.properties $MYDIR
ENV ROOT_USER cc
ENV ROOT_PASS dd
#下面这一句必须加,要不然,容器初始化执行失败,docker run的时候会出错 RUN chmod 777 /root/hzbdir/testmysql.sh
#容器起来的时候会调用下面这个脚本 ENTRYPOINT ["/root/hzbdir/testmysql.sh"] CMD ["/bin/bash"]

4、built 和run容器

将Dockerfile、testmysql.properties、testmysql.sh放在同一个目录下,进入该目录:

 docker build -t centoshzb .
docker run -dit -e ROOT_PASS=hzbmir --name=centoshzb --net=host fd4fe4846b22

build了一个名叫centoshzb 的镜像,ID为fd4fe4846b22,-e ROOT_PASS=hzbmir就是运行起来的时候给容器里面的环境变量ROOT_PASS传了一个新的值hzbmir,如果不传,则还是原来的值chinacloudmir。

该容器运行后会调用容器里面的/root/hzbdir/testmysql.sh,主要作用就是用环境变量ROOT_PASS的值来修改testmysql.properties里面的rootpass的值。

当环境变量很多的时候,用-e来传值非常不方便,这时候可以用 --env-file来传入一个环境变量文件,比如有一个环境变量文件envfile内容如下:

ROOT_PASS=huacloudhuacloud
ROOT_USER=hzb

运行容器:

docker run -dit --env-file=/root/mirfile/centosTestDockerfile/envfile --name=centoshzb --net=host fd4fe4846b22

 

posted on 2017-02-16 15:21  波神  阅读(1055)  评论(0编辑  收藏  举报