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&&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