开发者社区> bqospzg5rfs7g> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Docker 容器数据卷用 DockerFile 添加 | 学习笔记

简介: 快速学习 Docker 容器数据卷用 DockerFile 添加
+关注继续查看

开发者学堂课程【Docker 快速入门:Docker 容器数据卷用 DockerFile 添加】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/616/detail/9403


Docker 容器数据卷用 DockerFile 添加

1、用命令直接添加容器数据卷,就是-v,docker run -it v / 宿主机绝对路径目录:/容器内目录: ro 镜像名。

2、第二种方法 dockerfile 添加,是什么?

JavaEE Hello. Java--->Hello.class

Docker images====>DockerFile

类比相当于是对 images 镜像的一种源码集表述,如果连续改 class,想怎么做都可以。

3、查询 tomcat。

image.png

Supported tags and respective Dockerfile links

支持的标记和相关的 Dockerfile 连接,tomcat 从 789 都给,选择 8.5.32,点开。

FROM openjdk:8-jre

DockerFile 体系结构

FROM

MAINTAINER

RUN

EXPOSE

WORKDIR

ENV

ADD

COPy

VOLUME

CMD

ENTRYPOINT

ONBUILD

from 像 java 中的 extends 继承,extends object 一个镜像不可能独立的构建,

ENV CATALINA HOME /usr/local/tomcat

任何的 linux 都有个 user/local,docker 下的就是精简版小型化的精巧版的 linux系统,比如 200 多兆的 centos。

ENV PATH $CATALINA HOME/bin:$PATH

RUN mkdir -p "$CATALINA HOME "

运行 linux 命令

NORKDIR $CATALINA_HOME

\是连接符,一行写不下,转行,代表折行。

EXPOSE 8080

当前 DockerFile 决定了镜像是什么,最终暴露出的默认端口是 8080。

CHD["catalina . sh"run]

启动 tomcat。

回到 tomcat。

image.png

输入 https://hub.docker.com/ /redis/。

image.png

点击 4.0 版。

image.png

tomcat 暴露出的端口是 8080。

EXPOSE 6379

CMD [' "redis-server "]

images 是镜像模版的描述文件,DockerFile 有自己的语法规则,类似 linux 中的脚本编程,DockerFile 是 docker 编程。

4、利用 DockerFile 完成容器卷的管理。

(1)根目录下新建 mydoqker 文件夹并进入。

目前在主机,docker ps,后台没有运行任何容器实例,

mkdir /mydocker

cd /mydocker/

Ll

Pwd

mydocker

(2)可在 Dockerfile 中使用 VOLUME 指令来给镜像添加一个或多个数据卷。

假设可以一对多,一个笔记本上可以接两个活动硬盘,三个活动硬盘,主要有足够的 usb 接口,没有任何问题。VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

宿主机的 json 串,证明可以连多个,只支持容器内

说明:

出于可移植和分享的考虑,用 -v 主机目录,容器目录这种方法不能够直接在Dockerfile 中实现。

由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。假设在用 Dockerfile 写 abc 目录,目前机器有,但是如果把Dockerfile 放到别的机器上,别的机器没有 abc 目录,迁移就会收到影响,所以不存在。

(3)File 构建

编写 Dockerfile,就是 Dockerfile 的构建。Vim Dockerfile

像 linux 编程一样,编写 Dockerfile。

# volume test

当前自己做的 Dockerfile 来自于父类的镜像 FROM centos,extends object 或者​​extends user service dio。

FROM centos

在当前的 centos 中,根目录下面新建两个容器卷,data1,data2

VOLUME["/dataVolumeContainer1"," /dataVolumeContainer2" ]

cmd 在 linux 世界里,centos 打出一句话,像 java 中 system out println,logo附件,日志

CMD echo "finished ,--------success1"

某个主机的目录

CMD /bin/bash

翻译成上一讲 docker 命令方法,host 不支持,因为有迁移性

docker run  - it  -V/host1: /dataVolmeContainer1  V/host2: /dataVolumeContainer2 centos /bin/bash

所以只能在当前 centos 上面生成 data1,data2。先编写可执行的 dockerfile 脚本。

(4)build 后生成镜像,获得一个新镜像 zzyy/centos

在 docker 架构图中有 docker build 命令,build 就是 dockerfile 文件,将它 bulid 成为一个新的镜像模版。

image.png

docker build -f /mydocker/ dockerfile2 -t zzyy/ centos.

f 是 file,指明 dockerfile 在哪,-t 命名空间,镜像名字,在当前目录下面。

如果名字是 dockerfile,可以不加 -f。

docker build -f /mydocker/ dockerfile -t zzyy/ centos.

一层一层执行相关的命令,构建以当前的模版,添加了两个新功能,添加了两个容器数据卷,构建更新的镜像文件运行。镜像像花卷,是一层套一层,就像同心圆,一圈一圈套着,只访问最外层。

第一层

FRCM . centos

第二层

VOLUME["/dataVolumeContainer1","/dataVolumeContainer2"]

dockerfile 获得新的镜像 zzyy/centos,主要是为了和命名区别开。

发送上下文的 docker daemon,跟 docker 主进程沟通。

分成很多层。

Step 0 : FROM centos

--> 88ec626ba223

Step1:VOLUME/dataVolumeContainer1 /dataVolumeContainer2

-> Running in a0aebb14fd2b

--->146824fe5c32

Removing intermediate container a0aebb14 fd2b

Step 2 : CMD echo " finished, ·----·-- success1 "

---> Running ịn 5964 cbf2 fbce

---> f318b0dddb6a

Removing intermediate container 5964cbf2fbce

Step 3 : CMD /bin/bash

-> Running in 26ae67aee790

---> ee2a35672484

Removing intermediate container 26ae67aee790

最后一层一层叠加

Successfully built ee2a35672484

docker images

ee2a 开头,如果运行容器,直接就会在centos下面建两个容器卷,dataVolumeContainer1,dataVolumeContainer2,一出场就挂了两个活动硬盘。

REPOSITORY

IMAGE ID

zzyy/ centos

ee2a35672484

atguigu/ mytomcat

4db6a44256b2

mongo

ca96c146aa68

hello- world

3535063d9957

tomcat

d94da71c3a1f

centos

88ec626ba223

docker images zzyy/ centos 可以查出。

(5)run 容器

docker run - it zzyy/ centos

不写 bin/bash 也可以,容器卷会告诉执行是否成功,登陆到 cmd/bin/bash,抵消终端命令行登陆,

打出 CMD . echo . "finished, --------success1",说明容器卷运行到这一行。

image 是镜像,而现在 9cb93a45687d 是容器,pwd 进去之后,精简版 centos 中有根目录,如果运行阿里云的 centos,一开始没有容器卷,用自定义的有​​dataVolumeContainer1

dataVolumeContainer2

(6)通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址哪?

目前使用 dockerfile 形式在容器里面创建两个容器卷,容器卷要跟宿主机进行数据的交互和沟通,

Cd dataVolumeContainer1

Pwd

dataVolumeContainer1

touch containt01. txt

ll

在容器中创建一个,因为没有指定宿主机的绝对路径,docker 会给一个默认,打开终端,

Docker ps

Docker inspect 9cb93a45687d

/var/ lib/ docker/ Volumes/

406f208fdb961a3b471e67b95b9 d2fec4e18266c7506b3597aca22b3b8ed0244/ data

如果用 dockerfile 生成,没有指定宿主机,读写都是 true,dataVolumeContainer1 是容器内的容器卷,/var/ lib/ docker/ ​​Volumes/406f208fdb961a3b471e67b95b9 d2fec4e18266c7506b3597aca22b3b8ed0244/ data是本地机器宿主机的,再开一个终端,

Cd/var/ lib/ docker/ Volumes/

406f208fdb961a3b471e67b95b9 d2fec4e18266c7506b3597aca22b3b8ed0244/ data

Pwd

主机上

Ll

可以看到有 containt01.txt,变相的实现宿主机到容器,容器到宿主机的数据共享。

touch host. txt

Ll

主机上有了,在容器中 ll,也有了。

(7)主机对应默认地址,跟案例一样。

5、如果有机器出现问题,确认容器卷后,不能写,如果出现以下报错。

Docker 挂载主机目录 Docker 访问出现 cannot open directory : .Permission denied

解决办法:在挂载目录后多加一个--privileged=true 参数即可

docker run -it -v /myDataVolume : /dataVolumeContainer --privileged=true 镜像名

这就是用 dockerfile 添加数据卷。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
kustomize (五) 使用vars将 k8s runtime 数据注入容器
kustomize (五) 使用vars将 k8s runtime 数据注入容器
0 0
Docker 数据管理与数据卷容器以及dockerfile基本结构
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行    数据共享,这必然涉及容器的数据管理操作    容器中的管理数据主要有两种方式:            数据卷 Data Volumes 容器内数据直接映射到本地主机环境;            数据卷容器(Data Volume Containers 使用特定容器维护数据卷
0 0
Docker容器数据卷入门教程(超详细)
docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。为了能够保存数据,在docker容器中使用卷。
0 0
Docker 容器数据卷用 V 命令添加 | 学习笔记
快速学习 Docker 容器数据卷用 V 命令添加
0 0
Docker 容器数据卷介绍 | 学习笔记
快速学习 Docker 容器数据卷介绍
0 0
Docker 容器数据卷 volumes-from | 学习笔记
快速学习 Docker 容器数据卷 volumes-from
0 0
Docker 容器数据卷用 dockerfile 添加|学习笔记
快速学习 Docker 容器数据卷用 dockerfile 添加
0 0
Docker 容器数据卷 volumes-from|学习笔记
快速学习 Docker 容器数据卷 volumes-from
0 0
【JVM故障问题排查心得】「内存诊断系列」Xmx和Xms的大小是小于Docker容器以及Pod的大小的,为啥还是会出现OOMKilled?
【JVM故障问题排查心得】「内存诊断系列」Xmx和Xms的大小是小于Docker容器以及Pod的大小的,为啥还是会出现OOMKilled?
0 0
文章
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《当 K8s 遇到机密计算,阿里巴巴如何保护容器内数据的安全?》
立即下载
数据卷和数据卷容器
立即下载
冬季实战营第四期:零基础容器技术实战
立即下载