docker学习之路(3)

提示:关于docker系列的文章只是本人学习过程中记录的一些笔记和思考,可能有些是不对的,如果有好的建议或者想法,欢迎评论👏

docker中文件备份

说明: 通常我们容器在运行中有些东西需要持久化,如果持久化在docker容器内部,那么我们一旦删除了该容器,持久化的数据将不复存在,所以需要将数据持久化到宿主机上。

  • cp命令
  • 数据卷
  • dockerFile

cp命令实现备份

docker cp 容器id:文件夹路径 宿主机文件夹路径

说明: 将docker容器中的文件保存到宿主机上,我们可以把它认为是liunx下的scp格式

dcoker cp 宿主机文件夹路径 容器id:文件夹路径

说明: 将宿主机的文件保存到docker容器中

弊端:不是实时性的,只要有一次变化就需要cp以下,不然不是最新的

数据卷实现备份

格式: docker run -it -v 宿主机文件夹路径:容器文件夹路径 容器id

说明: 可以实现宿主机文件夹和docker文件夹实时同步,容器改了,宿主机也改了,宿主机改了,容器也改了

判断数据卷是否挂在成功: 那么如何判定我们的数据卷是否挂在成功呢?可以使用docker inspect 容器id 查看

只读权限设定: 这里的只读权限是针对容器的,容器对数据卷只读,而不是对宿主机的,宿主机对数据卷不受影响,个人理解宿主机是超级管理员,而容器只是一个用户,可以控制它的权限

docker run -it -v 宿主机文件夹路径:容器文件夹路径:ro 容器id

说明: 其中的ro相当于是read only

弊端:虽然达到了实时性,但是我每次重启都要记住,上次备份数据是写在哪里的,或者换个人来重启,就根本不知道这么回事。

Dockerfile实现备份

实现方式:

  1. 编写Dockerfile,增加容器卷
  2. 重新构建新的镜像
  3. 运行新的镜像

编写Dockerfile

from centos
VOLUME ["/usr/docker/volume","/usr/docker/container"]
CMD /bin/bash

重新构建新的镜像

语法: docker build -f Dockerfile所在文件位置 -t 新镜像名字:新镜像版本号 .

注意:

  1. 如果Dockerfile文件在当前目录,则 -f Dockerfile所在文件位置 可以不写
  2. 最后必须要以 .结尾

运行新的镜像

  1. docker images 之后将会发现,本地镜像列表中多了一个刚生成的自定义镜像,运行它即可
  2. 运行之后,发现容器的/usr/docker下多了两个文件夹volume和container
  3. 那么宿主机的对应文件夹在哪里呢?
  4. docker inspect 容器id,找到Mounts节点
    在这里插入图片描述
  5. 其中Source为宿主机上的备份目录,Destination 为容器中的目录,RW为读写权限

Dockerfile关键字总结

From

java中所有对象都是继承object的,那么docker中,也有一个像java中object地位一样的镜像,这就是Scratch,它被称为原镜像,那么from也就是java中的继承的意思

Maintainer

Maintainer 镜像的作者和邮箱地址

Run

Run 容器构建时需要运行的命令,通常用于安装软件包,在生成新的镜像的时候执行,类似于执行yum安装这种命令

Expose

Expose 对外暴露的端口号,前面学习的时候应该就发现,不暴露端口的话,容器外部是访问不到容器内部的东西的

Workdir

Workdir 在创建容器后,终端登入进来的目录位置,如果我们不设置的话,像centos默认进去就是根目录

Env

Env 在构建镜像过程中设置环境变量,这个linux没啥区别

Copy

如果我们像把宿主机上的东西拷贝到容器中,那么就可以使用copy关键字。
格式: copy ["源文件路径 ",“容器中的路径”]

Add

add的作用和copy差不多,add多了一个解压的功能,可以说add=copy+解压,格式和copy一样

Volume

这个应该不陌生了,前面提到过,新建容器卷

Cmd

和run差不多,都是执行命令,但是cmd执行命令是在容器启动的时候,一个dockerfile可以有多个cmd命令,但是只有最后一个会生效,其他都是无效的;如果在dockerfile中有cmd,并且启动docker的时候,后面带了命令,则dockerfile中的cmd命令也会失效不执行,执行的将变成docker run it 镜像名 后面带的命令

Entrypoint

Entrypoint和cmd基本是一样的,区别点:Entrypoint后面命令是追加的,即之前的命令也会执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值