docker镜像备份恢复_Docker学习笔记
1. 引入
什么是Docker
Docker 入门教程
应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
三个基本概念
❝
可以认为镜像是Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段^1。镜像自身是只读的,容器从镜像启动时,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变^2。
❞- 「镜像(image):」 就相当于是一个 root 文件系统。是创建Docker容器的模板,比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。
- 「容器(Container):」 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 「仓库(Repository):」 仓库可看成一个代码控制中心,用来保存镜像。
Docker和传统虚拟机比较
- 特性比较
- 不同之处
2 基本命令
2.1 容器相关
- 查看
docker
版本docker version
- 显示
Docker
系统信息,包括镜像和容器数docker info
- 查看系统中容器的列表
docker ps -a #包括正在运行和停止的
-q #显示容器的id - 删除容器
docker rm Container_name
- 启动停止的容器
docker start Container_name(或Container_id)
docker attach Container_name(或Container_id) #重新附着到原容器的会话上 - 获取容器的日志
docker logs [-ft] Container_name
- 查看容器内的进程
docker top Container_name
- 容器内运行进程
docker exec -d Container_name touch x.file #开启新的终端
docker exec -it Container_name /bin/bash - 停止运行容器
docker stop Container_name
- 检查容器或镜像内更多的详细信息
docker inspect Container_name
- 删除容器
docker rm -f Container_name
- 重启容器
docker restart Container_name
- 导出容器
docker export Container_name[Container_od] > xxx.tar
- 导入容器并创建镜像
docker import xxx.tar image_name:tag
- 拷贝容器内的数据到主机
docker cp 或Container_id:/home/sx.txt /home #copy容器sx.txt 到/home目录
2.2 镜像相关
列出镜像
docker images [image_name]
拉取镜像镜像文件
docker pull image_name[:tag] # docker pull ubuntu
运行镜像
docker run -i -t centos /bin/bash #从镜像启动一个容器,先在本地找,若没有会去 Docker Hub 下载该镜像
docker run --name 容器命名
-d 创建守护进程,放到后台运行
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--volume , -v 绑定一个卷 主机数据卷:容器数据卷,数据自动同步
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
-- link name:alias name表示要连接的容器名称,alias表示这个连接的别名
--volumes-from 容器文件共享 # docker run -it --name dc02 --volumes-from dc01 zzyy/centos
》容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。查找镜像
docker search image_name #查找 Docker Hub上公共的可用镜像
构建镜像
❝
推荐使用
❞Dockerfile
镜像构建 Docker 执行Dockerfile
的流程:#构建镜像
docker build -t demo:0.0.1 . #`.`告诉Docker到本地目录中寻找`Dockerfile`文件,也可以指定仓库中`Dockerfile`的位置
- Docker从基础镜像执行一个容器
- 执行一条命令,对容器做修改
- 执行类似
docker commit
的操作,提交一个新的镜像层 - Docker再基于提交的镜像运行一个新的容器
- 执行
Dockerfile
中的下一条命令,直到所有命令执行完毕
查看镜像的构建过程
docker history image_id
删除镜像
docker rmi -f image_id
保存镜像
docker save blog > blog.tar
加载镜像
docker load < blog.tar
docker load -i blog.tar
修改镜像标签
docker tag demo_docker:0.0.1 demo_docker:0.0.11
2.3 Dockerfile指令
CMD
和RUN
CMD
用于指定一个容器启动时要运行的命令,RUN
指定镜像构建时运行的指令。若docker run
指定了要运行的命令,则CMD
命令会被覆盖。WORKDIR
该指令用来在从镜像创建一个新容器时,在容器内设置一个工作目录,指定的程序会在该目录下运行。ENV
用来在镜像构建过程中设置环境变量。USER
用来指定该镜像会以什么用户去运行。VOLUME
用来向基于镜像创建的容器添加卷。一个卷可以存在于一个或多个容器内的特定的目录。ADD
用来将构建环境下的目录和文件复制到镜像中,如果需要,会做提取和解压。COPY
类似于ADD
,只关心构建上下文中复制本地文件,而不会去做提取和解压,Dockerfile
图
3 数据管理
❝为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份、迁移、恢复等,Docker加入了数据卷(volumes)机制。简单的讲,就是做了一个文件夹的实时共享,有点像局域网的文件共享。
❞
3.1 数据卷的特点
- 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
- 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了运行期间的数据共享和交换。
- 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
- 容器对数据卷的修改是实时进行的。
- 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。