Study-06-容器数据卷

目录

1、数据卷

1.1 什么是容器数据卷

1.2. 使用数据卷

1.3.实战测试:安装MySQL

2.具名和匿名挂载

3.初识DockerFile

3.1DockerFile构建镜像

3.2数据卷容器的联系

4. DockerFile

4.1 Dockerfile 介绍

4.2 DockerFile构建过程

4.3 DockerFile的指令 


1、数据卷

1.1 什么是容器数据卷

        容器之间可以有一个数据共享的技术,Docker 容器中产生的数据,同步到本地。

        这就是卷的技术,目录的挂载,将我们容器的内的目录,挂载到Linux上面。

总结:容器的持久化和同步操作,容器间也是可以容器共享的。

1.2. 使用数据卷

方式一:直接使用命令来挂载  -v

        docker run -it -v 主机端口 : 容器端口

        docker run -it -v 主机目录 : 容器目录

        测试:docker run -it -v /home/ceshi:/home centos /bin/bash

        启动后通过docker inspect 容器id 查看挂载信息

        测试文件同步:

 反向测试:

        1.停止容器

        2.宿主机上修改文件

        3.启动容器

        4 .容器内的数据

        好处:只需要在本地修改即可,容器内会自动同步。

        坏处:会占用两倍的存储!

1.3.实战测试:安装MySQL

思考:Mysql的数据持久化问题

#获取镜像

[root@liustudy home]# docker pull mysql:8.0.23

#运行容器,需要做数据挂载  安装启动MySQL,需要配置密码,这是注意点!

#官方测试

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动我们的数据库

        -d 后台运行

        -p 端口映射

        -v 卷挂载

        -e 环境配置

        --name 容器起名

        mysql:8.0.23 配置版本

[root@liustudy home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0.23

#启动成功之后,在本地使用sqlyog连接测试一下:

这里可能会启动失败,如果阿里云安全组端口没开的话,就有可能报错,所以要先去把安全组打开,如果不是这个问题的话可以参考:

宿主机的SQLyog连接不上问题http://t.csdn.cn/aaulb

#首先SOLyog 连接到服务器的3310,然后3310和容器内的3306映射,这个时候就可以连接上了。

此处配置好版本后,就可以去本地的SQLyog上进行连接了。

#在本地测试创建一个数据库,查看一下我们映射的路径是否正确。

 ps:这里成功是因为先挂载覆盖了,然后MYSQL程序启动才自动创建的数据。

假设将容器删除:

发现挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。

2.具名和匿名挂载

匿名挂载

-v 容器内路径

docker run -d -P --name nginx01 -v /ect/nginx nginx(这里是大P,随机映射端口)

#查看所有卷的情况

[root@liustudy data]# docker volume ls

这种就是匿名挂载,我们在 -v 只写了容器内的路径,没有写容器外的路径。

 具名挂载

[root@liustudy home]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx 

通过 -v  卷名:容器内的路径(前面加 / 就会被认为是映射的路径)

通过:docker volume inspect juming-nginx 查看卷的具体信息

所有的docker容器内的卷,没有指定目录的情况下都是在:/var/lib/docker/volume/xxx/_data

 通过具名挂载可以方便的找到我们的一个卷,大多数情况使用具名挂载 !

如何确定是具名挂载还是匿名挂载,还是指定路径挂载?

-v 容器内路径         匿名挂载

-v 卷名*容器内路径         具名挂载

-v  / 宿主机路径 :: 容器内路径        指定路径挂载

拓展:

通过 -v 容器内路径 : ro  rw  改变读写权限

ro:        readonly         只读        只能通过宿主机操作,容器内部无法操作!

rw:        readwrite        可读可写

一旦设置了容器权限,容器对我们挂载出来的内容就有限定了!

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx

docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

3.初识DockerFile

3.1DockerFile构建镜像

DockerFile 就是用来构建docker 镜像的构建文件---命令脚本!

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个命令,每个命令都是一层。

#创建一个dockerFile文件,名字随机,建议Dockerfile

        docker build -f dockerfile1 -t liusir/centos .

#文件中的内容         指令(大写)   和       参数

FROM centos

VOLUME ["/volume01","/volume02"]

CMD echo "----end----"
CMD /bin/bash

#这里的每个命令,就是镜像的一层。

 

 启动自己写的容器

 这个卷和外部一定有一个同步目录,匿名挂载的。

 查看卷挂载的具体路径:docker inspect f49508f57f37

测试文件是否同步出去,这种方式使用的十分多,因为我们通常会构建自己的镜像。

假设构建镜像的时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内的路径!

3.2数据卷容器的联系

多个mysql同步数据

启动3个容器,通过

[root@liustudy _data]# docker run -it --name docker02 --volumes-from docker01 liusir/centos

 

将父容器docker01删除:

 然后在其他容器下查看之前共享的文件是否还存在:

 发现docker01容器创建的文件依旧存在!

重点:这里不是拷贝的概念,三个容器都是挂载到宿主机的同一个目录下,如果删掉宿主机下的这个目录文件,三个容器的数据都会消失。

 多个mysql实现数据共享:

[root@liustudy]# docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:8.0.23


[root@liustudy]# docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:8.0.23

# 这个时候就可以实现两个容器数据同步!

结论:

        容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

        但是一旦持久化到了本地,这个时候,本地的数据是不会删除的。

4. DockerFile

4.1 Dockerfile 介绍

dockerfile 是用来构建docker镜像文件镜像的文件,命令参数脚本!

构建步骤:

        1. 编写一个dockerfile文件

        2. docker build 构建成为一个镜像

        3. docker run 运行镜像、

        4. docker push 发布镜像(DockerHub 、阿里云镜像仓库!)

查看官网的做法:

很多官方镜像都是基础包,很多功能都没有,我们会自己搭建自己的镜像。

官方既然可以制作镜像,我们也可以!

4.2 DockerFile构建过程

基础知识:

        1.每个保留关键字(指令)必须都是大写字母

        2. 执行从上到下顺序执行

        3. #表示注释

        4. 每一个指令都会创建提交一个新的镜像层,并提交!

 dockerfile 是面向开发的,我们以后要布置项目,做镜像,就需要编写 dockerfile 文件,这个文件十分的简单。

Docker 镜像 逐渐成为企业交付的一个标准,必须要掌握!

DockerFile : 构建文件,定义了一切步骤,源代码

DockerImage : 通过DockerFile 构建生成的镜像,最终发布和运行的产品,原来是jar、war。

Docker容器:容器就是镜像运行起来提供服务

4.3 DockerFile的指令 

FROM                                   # 基础镜像

MAINTAINER                        # 镜像是谁写的,姓名+邮箱

RUN                                      # 镜像构建的时候需要运行的命令

ADD                                      # 步骤:Tomcat镜像,这个Tomcat压缩包,添加内容。

WORKDIR                            #  镜像的工作目录

VOLUME                              #  挂载的目录

EXPOST                               # 保留端口配置

CMD                                     #  指定这个容器启动时候要运行的命令,只有最后一个生效,可被替换

ENTRYPOINT                      #  指定这个容器启动时候要运行的命令,可追加命令

ONBUILD                             #  当构建一个被继承DockerFile 这个时候会运行ONBUILD的指令,触发指令。

COPY                                   # 类似ADD,将我们的文件拷贝到镜像中

ENV                                      # 构建的时候设置环境变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值