当前位置: 首页 > news >正文

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和传统虚拟机比较

    • 特性比较ef0dc20e696c1496637f08b565a7c673.png
    • 不同之处cd3079f035f974f3bfac1186b8b3a66f.png

2 基本命令

05840cd061ac163bc9f73b57a66408c7.png
基本命令

2.1 容器相关

  1. 查看docker版本
    docker version
  2. 显示Docker系统信息,包括镜像和容器数
    docker info
  3. 查看系统中容器的列表
    docker ps -a #包括正在运行和停止的
    -q #显示容器的id
  4. 删除容器
    docker rm Container_name
  5. 启动停止的容器
    docker start Container_name(或Container_id)
    docker attach Container_name(或Container_id) #重新附着到原容器的会话上
  6. 获取容器的日志
    docker logs [-ft] Container_name
  7. 查看容器内的进程
    docker top Container_name
  8. 容器内运行进程
    docker exec -d Container_name touch x.file  #开启新的终端
    docker exec -it Container_name /bin/bash
  9. 停止运行容器
    docker stop Container_name
  10. 检查容器或镜像内更多的详细信息
    docker inspect Container_name
  11. 删除容器
    docker rm -f Container_name
  12. 重启容器
    docker restart Container_name
  13. 导出容器
    docker export Container_name[Container_od] > xxx.tar
  14. 导入容器并创建镜像
    docker import xxx.tar image_name:tag
  15. 拷贝容器内的数据到主机
    docker cp 或Container_id:/home/sx.txt /home  #copy容器sx.txt 到/home目录

2.2 镜像相关

  1. 列出镜像

     docker images [image_name]
  2. 拉取镜像镜像文件

    docker pull image_name[:tag] # docker pull ubuntu
  3. 运行镜像

    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
    》容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
  4. 查找镜像

    docker search image_name #查找 Docker Hub上公共的可用镜像
  5. 构建镜像

    推荐使用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指令

  1. CMDRUNCMD用于指定一个容器启动时要运行的命令,RUN指定镜像构建时运行的指令。若docker run指定了要运行的命令,则CMD命令会被覆盖。
  2. WORKDIR
    该指令用来在从镜像创建一个新容器时,在容器内设置一个工作目录,指定的程序会在该目录下运行。
  3. ENV
    用来在镜像构建过程中设置环境变量。
  4. USER
    用来指定该镜像会以什么用户去运行。
  5. VOLUME
    用来向基于镜像创建的容器添加卷。一个卷可以存在于一个或多个容器内的特定的目录。
  6. ADD
    用来将构建环境下的目录和文件复制到镜像中,如果需要,会做提取和解压。
  7. COPY
    类似于ADD,只关心构建上下文中复制本地文件,而不会去做提取和解压,
  8. Dockerfileb22634db0d79d7fa72d551358d609aaa.png

3 数据管理

为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化,将容器中的数据备份、迁移、恢复等,Docker加入了数据卷(volumes)机制。简单的讲,就是做了一个文件夹的实时共享,有点像局域网的文件共享。

3.1 数据卷的特点

  1. 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  2. 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了运行期间的数据共享和交换。
  3. 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
  4. 容器对数据卷的修改是实时进行的。
  5. 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。

相关文章:

  • runtimeerror什么原因_什么是内存对齐?Go 是否有必要内存对齐?
  • dubbo源码_Dubbo源码-注册中心
  • python运行不了、显示警告_Python xlrd:禁止显示警告消息
  • linux安装python3环境_Linux环境安装python3
  • 用python打印出一个人的照片_Python用dilb提取照片上人脸的示例
  • getdata提取曲线数据_基于Hypergraph创建曲线(矢量)的结果响应
  • ffmpeg 为取经而来_清华,那个穿越百年而来的白衣少年
  • python 数组 动态赋值_在python中使用numpy创建动态数组
  • java filter 是否能拦截到form表单的所有数据_java 知识点总结(框架篇)
  • python使用xlrd读取xlsx文件_python操作excel文件一(xlrd读取文件)
  • 如何在桌面上显示一行字_只需一个命令启动Hyper-V虚拟机,高手们是如何做到的
  • python相对路径怎么写_Python代码写的丑怎么办?试试这几款神器!
  • java商品管理txt_Java 异常处理的六个建议
  • python里input是什么意思_Tensorflow:标签中的“input”和“input”是什么意思_图像.py在tensorflow示例中...
  • python3自动化软件发布系统pdf_Python 3自动化软件发布系统 -Django 2实战
  • ----------
  • CentOS 7 修改主机名
  • happypack两次报错的问题
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • java概述
  • nodejs实现webservice问题总结
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Promise面试题2实现异步串行执行
  • Spring Cloud Feign的两种使用姿势
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 关于 Cirru Editor 存储格式
  • 检测对象或数组
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 译有关态射的一切
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ###STL(标准模板库)
  • (1)虚拟机的安装与使用,linux系统安装
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (HAL库版)freeRTOS移植STMF103
  • (二)fiber的基本认识
  • (二)正点原子I.MX6ULL u-boot移植
  • (二)丶RabbitMQ的六大核心
  • (分布式缓存)Redis分片集群
  • (汇总)os模块以及shutil模块对文件的操作
  • (十) 初识 Docker file
  • (十八)SpringBoot之发送QQ邮件
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net Remoting常用部署结构
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net中生成excel后调整宽度
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • ?
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录