Docker 学习笔记(持久化数据的备份,还原)
假如我们应用程序需要一台 mssql 数据库来持久化数据,我们将 mssql 数据库运行于 Docker 容器中:
docker run -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<数据库SA账户的密码>" --mount type=volume,src=mssqlvol,dst=/var/opt/mssql --name mssql mcr.microsoft.com/mssq l/server
注意:-v 或者 --volume 标志适用于独立容器,--mount 标志适用于 Swarm 服务。但是在 Docker 17.06 版本之后, --mount 标志同样适用于独立容器。
执行上面的指令,如果 mssqlvol 不存在的话,会创建一个 mssqlvol 数据卷。它指向 mssql 容器的 /var/opt/mssql 目录, 此目录也是 mssql 数据库默认的数据存放目录。
备份
使用命令:
docker run --rm -volumes-from mssql --mount type=bind,src=$(pwd),dst=/backup ubuntu tar cvf /backup/backup.tar /var/opt/mssql
解析:
- 启动一个新的容器并且从 mssql 容器进行挂载数据卷 (设置了此容器自动移除
--rm) - 此容器挂载本地主机的文件夹 (
$(pwd)会输出当前终端的工作目录)作为容器的 /backup 目录 - 执行
tar cvf /backup/backup.tar /var/opt/mssql来对/var/opt/mssql目录压缩为 backup.tar
因为此临时容器挂载了本地目录作为 /backup 目录, 所以当我们执行完上面的命令之后, 我们会发现本地目录,也就是当前工作目录下会有 backup.tar 文件产生。至此备份完毕。
还原
在创建一个 mssql 容器作为测试:
docker run -d -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<数据库SA账户的密码>" -p 1434:1433 --mount type=volume,src=mssql-vol2,dst=/var/opt/mssql --name mssql2 mcr.microsoft.com/mssq l/server
运行临时容器将备份文件解压缩至指定目录:
docker run --rm --volumes-from mssql2 --mount type=bind,src=$(pwd),dst=/backup ubuntu bash -c "tar xf /backup/backup.tar -C / && ls /var/opt/mssql/data -l"
执行完上述指令之后, 我们会看到数据库文件已经存在于 /var/opt/mssql/data 文件夹下,至此,还原操作已经完成。
下面是拓展内容:
我们上面使用的是 mssql 数据库, 这里文件的直接覆盖是不能完成附加操作的, 下面我们需要手动附加数据库:
docker exec -it mssql2 /bin/bash
/opt/mssql-tools/bin/sqlcmd -S . -U sa -P '<账户sa密码>'
使用 SELECT NAME FROM sys.Databases 来查看所有数据库名(需要键入 GO 才会执行)
sp_attach_db @dbname='需要附加的数据库名', @filename1='/var/opt/mssql/data/还原的数据库文件名'
执行完之后, 再使用 SELECT NAME FROM sys.Databases 就可以看到我们还原的数据库了
另外,官方网站上也给出了一种数据库备份还原的方式。
总结
应用数据的备份还原对于系统来说是至关重要的, Volume 与 Bind Mount 都是非常实用的持久化介质。
Docker 学习笔记(持久化数据的备份,还原)的更多相关文章
- Redis学习——Redis持久化之AOF备份方式保存数据
新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)
前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
随机推荐
- wpf 获取Image的图片并保存到本地
XMAL代码如下: <Image Name="ImageToSave" Source="Images/pic_bg.png" Grid.RowSpan=& ...
- VUE-008-通过路由 router.push 传递 query 参数(路由 path 识别,请求链接显示参数传递)
在前端页面表单列表修改时,经常需要在页面切换的时候,传递需要修改的表单内容,通常可通过路由进行表单参数的传递. 首先,配置页面跳转路由.在 router/index.js 中配置相应的页面跳转路由,如 ...
- 利用dladdr来获得so自身的路径
#include <dlfcn.h> //定义该函数为了dladdr获取符号信息 void fun1() { } Dl_info info; //dladdr获取某个地址的符号信息 int ...
- Win2008 IIS7.5安装配置PHP7.3.2步骤,及500错误解决
安装Visual C++运行库 根据 PHP 版本选择 VC++ 版本,缺少 VC++ 运行库会报500错误. php-7.1.28-nts-Win32-VC14-x64.zip VC14: Vi ...
- php 解密小程序获取unionid
小程序代码 php代码 public function login2() { $post = input(); if (!empty($post)) { $appid = $this->wxap ...
- windows环境在本地配nginx
本地搭建了前端项目,但奈何有时候需要https访问的需求,所以做了一个尝试在本地(windows环境)下配置nginx,最终的效果就是 搭建的时候,遇到两个问题: 第一个是如果要在本地搭建https, ...
- 使用AD画PCB的技能总结(纯属个人笔记,请大神多多指导)
在参加2017全国电子设计大赛的过程中,我将平时学到的点点滴滴记录下来,作为曾经的回忆吧!(未完待续) ------------------------------------------------ ...
- Complex类的实现
#include<iostream> #include<cmath> using namespace std; class complex{ public: complex() ...
- appium 环境搭建2
以windows-x64为例安装的软件有JDK AndriodSDK Node.js Appium(界面化的可以不装) python Appium_Python_Client.安装的顺 ...
- Pocket Gem OA: Path Finder
1. 有向图 找所有start node到end node之间的路径 输入是一个txt 形式如下: A E A : B C D. B : C C : E D : B. 输出一个List<Stri ...