docker数据持久化|docker数据平滑迁移

目的:实现项目改动,容器需要更新重新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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 13,606评论 0 120
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 5,859评论 0 7
  • 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量...
    大笑一声阅读 1,378评论 0 0
  • 最黑暗的日子里,披星而出戴月而归。瑟瑟于清早和深夜。土豆都不爱出门了,地库转个半圈,匆匆忙忙解决了问题,沒头儿往家...
    nataemma阅读 2,910评论 0 0

友情链接更多精彩内容