目的:实现项目改动,容器需要更新重新run一个容器,数据平滑迁移,容器停止,后再启动数据保持
-
dockerfile容器挂载映射
FROM ubuntu:16.04
MAINTAINER leeboot@163.com
SHELL ["/bin/bash", "-c"]
#
#此处写你需要构建的dockerfile环境,并配置整理好config、log、data目录方便管理
#以及方便宿主机查看和管理
#
#
#
#同步宿主机时间,以及设置系统UTF8编码
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG C.UTF-8
EXPOSE 80
VOLUME ["/etc/project", "/var/log/project", "/var/lib/project"]
CMD ["/bin/bash", "-c", "/root/start.sh >> /var/log/project/start.log"]
- 插播一张可爱的图片

docker可爱图片
-
使用shell脚本来控制是否需要迁移数据(文件锁/环境变量锁)
#!/bin/bash
#filename:start.sh
#desc:init project and start all server
#author:leeboot
#email:leeboot@163.com
set -e
if [ ! -f /root/.init.lock ] ; then
echo "start init config..."
#init config dir replace
if [ ! -d /var/lib/project/mysql ] ; then
mv /var/lib/mysql /var/lib/project/
else
rm -rf /var/lib/mysql
fi;
ln -s /var/lib/project/mysql /var/lib/
if [ ! -d /etc/project/mysql ] ; then
mv /etc/mysql /etc/project/
else
rm -rf /etc/mysql
fi;
ln -s /etc/project/mysql /etc/
if [ ! -d /var/log/project/mysql ] ; then
mv /var/log/mysql /var/log/project/
else
rm -rf /var/log/mysql
fi;
ln -s /var/log/project/mysql /var/log/
sleep 3
#pgsql
if [ ! -d /var/lib/project/postgresql ] ; then
mv /var/lib/postgresql /var/lib/project/
else
rm -rf /var/lib/postgresql
fi;
ln -s /var/lib/project/postgresql /var/lib/
if [ ! -d /var/log/project/postgresql ] ; then
mv /var/log/postgresql /var/log/project/postgresql
else
rm -rf /var/log/postgresql
fi;
ln -s /var/log/project/postgresql /var/log/
if [ ! -d /etc/project/postgresql ] ; then
mv /etc/postgresql /etc/project/
else
rm -rf /etc/postgresql
fi;
ln -s /etc/project/postgresql /etc/
#php and nginx
if [ ! -d /etc/project/php ] ; then
mv /etc/php /etc/project/
else
rm -rf /etc/php
fi;
ln -s /etc/project/php /etc/
if [ ! -d /etc/project/nginx ] ; then
mv /etc/nginx /etc/project/
else
rm -rf /etc/nginx
fi;
ln -s /etc/project/nginx /etc/
if [ ! -d /var/log/project/nginx ] ; then
mv /var/log/nginx /var/log/project/
else
rm -rf /var/log/nginx
fi;
ln -s /var/log/project/nginx /var/log/
if [ ! -d /var/log/project/web ] ; then
mkdir /var/log/project/web
fi;
#redis
if [ ! -d /etc/project/redis ] ; then
mv /etc/redis /etc/project/
else
rm -rf /etc/redis
fi;
ln -s /etc/project/redis /etc/
if [ ! -d /var/log/project/redis ] ; then
mv /var/log/redis /var/log/project/
else
rm -rf /var/log/redis
fi;
ln -s /var/log/project/redis /var/log/
if [ ! -d /var/lib/project/redis ] ; then
mv /var/lib/redis /var/lib/project/
else
rm -rf /var/lib/redis
fi;
ln -s /var/lib/project/redis /var/lib/
touch /root/.init.lock
chown -R mysql:mysql /var/lib/mysql
echo "end init config"
fi;
#anything to do and init your server
#eq:
service mysql stop
sleep 3
echo "starting mysql..."
rm -f /var/run/mysqld/mysqld.sock.lock
service mysql start
sleep 1
echo "starting postgresql..."
service postgresql start
sleep 1
echo "starting redis..."
cd /etc/redis/
redis-server redis.conf
redis-server sentinel.conf --sentinel
sleep 1
echo "starting zookeeper..."
rm -f /var/lib/zookeeper/zookeeper_server.pid
cd /usr/local/zookeeper/
bin/zkServer.sh start
sleep 3
php /shenjian/zookeeper.php
echo "starting memcached..."
service memcached start
sleep 1
###########################################
#more server and anything you want to do
###########################################
#last step:挂起一个进程(不让系统认为无事可做而停止)
wait