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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习 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 添加数据卷。

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
21天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
169 93
|
23天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
108 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
22天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
44 17
|
22天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
91 12
|
23天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
97 11
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
275 78
|
2月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
154 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
68 3
实战~如何组织一个多容器项目docker-compose