Docker使用数据卷自定义镜像Dockerfile

目录

一、数据卷

1.1、简介

1.2、用途

1.3、特性:

1.4、数据卷相关操作

1.5、使用情况

二、自定义镜像Dockerfile

2.1、Dockerfile

2.1、使用情况

2.3、具体操作

a、自定义centos

创建文件   

 编辑内容

制作镜像

测试

b、自定义tomcat

 创建文件   

编辑内容 

制作镜像

构建镜像

测试


一、数据卷

有数据卷就可以直接从数据卷查看日志,不用一个一个进去查看日志了

1.1、简介

数据卷是Docker容器中用于持久化存储数据的一种机制。数据卷可以在容器之间共享和重用,使得容器之间可以更加灵活地共享数据。数据卷可以在容器启动时被创建,并且可以在容器停止或删除时保留数据。数据卷可以存储在宿主机的文件系统中,也可以存储在网络存储中,如网络文件系统(NFS)或云存储服务。数据卷的使用可以帮助用户更好地管理容器中的数据,并且可以提高容器的可移植性和可靠性。

1.2、用途

1. 数据持久化:数据卷可以用于持久化存储容器中的数据,确保数据在容器重启或删除后仍然存在。

2. 数据共享:多个容器可以共享同一个数据卷,以便它们之间可以共享数据。

3. 数据备份和恢复:通过使用数据卷,可以更容易地备份和恢复容器中的数据。

4. 数据迁移:数据卷可以用于将容器中的数据迁移到其他地方,如不同的主机或云存储服务。

5. 数据共享和协作:多个团队或应用程序可以共享同一个数据卷,以便它们之间可以协作和共享数据。

总的来说,数据卷可以帮助用户更好地管理容器中的数据,提高容器的可靠性和可移植性,并促进容器之间的数据共享和协作。

1.3、特性:

  • 在容器之间共享和重用
  •  修改会立马生效
  • 更新,不会影响镜像
  • 默认会一直存在,即使容器被删除数据卷相关操作

1.4、数据卷相关操作

   1.创建数据卷

     docker volume create my-vol

     此时,数据卷默认会放到/var/lib/docker/volumes路径下,会发现所新建的数据卷位置,查看命令如下:

     ## 参数可以为数字“1”,字母L:大小写均可,但效果不一样

     ls -1 /var/lib/docker/volumes

   2.查看所有的数据卷

     docker volume ls

   3.查看指定数据卷的详细信息(显示一个JSON格式的数据)

     docker volume inspect my-vol

  

   4.删除一个volume

     docker volume rm my-vol

   

     注1:数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,

          并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,

          所以要及时删除

   ## 挂载数据卷,最好是通过run而非create/start创建启动容器

   ## create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以

1.5、使用情况

1、数据卷------------宿主机与容器共享目录

docker run -di --name c2 -v /home/shasha/data/:/home/shasha/data/ centos:7

docker run   启动容器

-di启动不进入

-v挂载

shasha 自己取的名字,查看没有这个目录,也没关系会自己创建

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       7         eeb6ee3f44bd   2 years ago   204MB
[root@localhost ~]# cd /home/
[root@localhost home]# ll
总用量 0
drwxr-xr-x. 3 root root 18 2月  28 16:37 shasha
[root@localhost home]# cd  shasha/
[root@localhost shasha]# ll
总用量 0
drwxr-xr-x. 2 root root 6 2月  28 16:37 data
[root@localhost shasha]# cd data/
[root@localhost data]# ll
总用量 0
[root@localhost data]#

 下好后,就可以在home下查到shasha,切进去就有data,查看data里面是没有文件的

[root@localhost data]# docker exec -it c2 /bin/bash      ----------------进入容器
[root@d01495d52976 /]# pwd                                        ---------------显示在根目录下
/
[root@d01495d52976 home]# cd /home/shasha/data/     --------------进入data目录
[root@d01495d52976 data]#

假如data是tomcat日志

[root@d01495d52976 data]# echo  tomcatrun >123.txt
[root@d01495d52976 data]# ll
total 4
-rw-r--r--. 1 root root 10 Feb 28 08:57 123.txt
[root@d01495d52976 data]# pwdread escape sequence
[root@localhost data]# ll
总用量 4
-rw-r--r--. 1 root root 10 2月  28 16:57 123.txt
[root@localhost data]# cat 123.txt                              ---------  查看日志
tomcatrun
[root@localhost data]#

2、数据卷容器-------容器与容器共享目录

docker run -di -v /home/javaxl/data/c4 --name c4 centos:7
docker run -di --volumes-from c4 --name c6 centos:7

创建c4,然后绑定到c6,,c6里面也有/home/javaxl/data/c4

 

假设这是 echo operate  >readme.txt上传文件 

进到c6 ,发现可以看见c4里面的日志,就可以cat readme.txt

 

二、自定义镜像Dockerfile

2.1、Dockerfile

Dockerfile是一个文本文件,其中包含了一系列用于构建Docker镜像的指令和配置。通过在Dockerfile中编写这些指令,用户可以定义镜像中包含的文件、环境变量、运行命令等内容,从而实现定制化的镜像构建过程。Dockerfile通常用于自动化构建过程,使得镜像的构建过程更加简单、可重复和可管理。

作用:制作镜像文件

2.1、使用情况

1. 需要在多个环境中部署相同的应用程序或系统配置。通过创建自定义镜像,可以在不同的环境中快速部署相同的配置,提高部署效率。

2. 需要定制化的操作系统或应用程序。通过创建自定义镜像,可以在镜像中预先安装所需的软件包、配置文件等,以满足特定的需求。

3. 需要在本地开发环境和生产环境之间保持一致性。通过创建自定义镜像,可以在本地开发环境中构建和测试应用程序,并将相同的镜像部署到生产环境中,确保一致性。

4. 需要加密或保护敏感数据。通过创建自定义镜像,可以在镜像中加密或隐藏敏感数据,以确保数据安全性。

总的来说,自定义镜像可以帮助用户快速部署、定制化和保护应用程序或系统,提高工作效率和数据安全性。

具体:docker search找不到的时候

没有ipconfig这个查看IP命令,因为外部面试启动Centos7容器,cenos7现在只有204MB,相当于拓展功能没有了,

:官方版本提供的镜像是不完整的相当于阉割版本

解决办法:去容器里下载--------------------会特别慢

yum  install -y ifconfig

2.3、具体操作

a、自定义centos

创建文件   

vi   mycentosDockerfile          

mycentosDockerfile       名字

 编辑内容

向 mycentosDockerfile编辑内容

按i进入编辑模式

按ESC   :wq退出并保存

FROM centos:7
MAINTAINER shasha"shasha@qq.com"
RUN yum -y install vim
RUN yum install net-tools.x86_64 -y
CMD /bin/bash
制作镜像

后面注意有点必须加上去

docker build 制作镜像                 

-f       依靠哪个文件做镜像

-f        mycentosDockerfile其实可以省略,但是创建时名字必须用Dockerfile,不能用自己创建的名字了

shasha          做的镜像名字

1.0版本

docker build -f mycentosDockerfile -t shasha/centos:v1.0 .

失败重启一遍再运行

测试

通过镜像运行一个容器进行测试  ,发现都可以执行ifconfig

mc1是名字,换一个名字,再运行一遍就又有一个ip,相当于虚拟机里面的虚拟机

 

docker run -it --name mc1 javaxl/centos:v1.0 /bin/bash

 

b、自定义tomcat

 创建文件   

vi   mytomcatDockerfile          

mytomcatDockerfile          名字

编辑内容 

 向 mytomcatDockerfile   编辑内容

按i进入编辑模式

按ESC   :wq退出并保存

FROM centos:7
MAINTAINER sha"sha@qq.com"ENV workerDir /home/sha/dockerfile/3
WORKDIR $workerDirADD jdk-8u151-linux-x64.tar.gz $workerDir
COPY apache-tomcat-8.5.20.tar.gz $workerDir
RUN tar -xvf apache-tomcat-8.5.20.tar.gz apache-tomcat-8.5.20ENV JAVA_HOME $workerDir/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV TOMCAT_HOME $workerDir/apache-tomcat-8.5.20
ENV PATH $JAVA_HOME/bin:$TOMCAT_HOME/bin:$TOMCAT_HOME/lib:$PATHEXPOSE 8080
ENTRYPOINT ["/home/sha/dockerfile/3/apache-tomcat-8.5.20/bin/catalina.sh","run"]
制作镜像

ADD添加并解压

默认进入--------------\,所有workerDir改路径

OOPY   复制

RUM执行解压包

ENV配置环境变量

EXPOSE         向外暴露端口

 

docker build -f mytomcatDockerfile -t javaxl/tomcat8:v1.0 .

构建镜像

docker  build -f mytomcatDockerfile -t sha/tomcat8:v1.0
测试

自动分配ip,启动端口

mt1-------名字

docker run -di --name mt1 -P javaxl/tomcat8:v1.0

 

如果就想用8080,大写-P改成小写的,名字也换了

docker run -di --name mt2 -p   8080:8080 sha/tomcat8:v1.0

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/265968.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题?比方说一个算法,它的 input 和 output 是什么?问题的条件是什么) 这篇文章提…

el-autocomplete 提示文字出不来?修改支持模糊搜索提示

查看本专栏目录 关于作者 还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas&#x…

Groovy(第九节) Groovy 之单元测试

JUnit 利用 Java 对 Song 类进行单元测试 默认情况下 Groovy 编译的类属性是私有的,所以不能直接在 Java 中访问它们,必须像下面这样使用 setter: 编写这个测试用例余下的代码就是小菜一碟了。测试用例很好地演示了这样一点:用 Groovy 所做的一切都可以轻易地在 Java 程序…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第12篇分享! 这周时间看了两本书,一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

JavaScript+PHP实现视频文件分片上传

摘要 视频文件分片上传,整体思路是利用JavaScript将文件切片,然后循环调用上传接口 upload.php 将切片上传到服务器。这样将由原来的一个大文件上传变为多个小文件同时上传,节省了上传时间,这就是文件分片上传的其中一个好处。 上…

算法沉淀——动态规划之两个数组的 dp(下)(leetcode真题剖析)

算法沉淀——动态规划之两个数组的 dp 01.正则表达式匹配02.交错字符串03.两个字符串的最小ASCII删除和04.最长重复子数组 01.正则表达式匹配 题目链接:https://leetcode.cn/problems/regular-expression-matching/ 给你一个字符串 s 和一个字符规律 p&#xff0c…

【Unity每日一记】角色控制器Character Contorller

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Python中的数据类型

如果说python中的数据类型,那我们要从标准数据类型说起,在python中标准数据类型如下: 数字类型: 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。 在python2.X中数据类型分的比较多,有int(有符号整型),long(…

Redis——服务器

Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运行。 一. 命令请求的执行过程 一个命令请求从发送到获得回复过程中,客户端和服…

【MySQL】基本查询(表的增删改查)-- 详解

CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)。 一、Create insert [into] table_name [(column [, column] ...)] v…

从0到1实现五子棋游戏!!

Hello,好久不见宝子们,今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下: 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍: 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

什么是VR紧急情况模拟|消防应急虚拟展馆|VR游戏体验馆加盟

VR紧急情况模拟是利用虚拟现实(Virtual Reality,简称VR)技术来模拟各种紧急情况和应急场景的训练和演练。通过VR技术,用户可以身临其境地体验各种紧急情况,如火灾、地震、交通事故等,以及应对这些紧急情况的…

常用git 打tag命令

1.查看所有tag git tag 2.创建 v5.0.0的tag git tag v5.0.0 git tag (创建后查看) 3.推送到远程tag git push origin v5.0.0 4.删除远程tag git push origin --delete v5.0.0 5.删除本地tag git tag -d v5.0.0 6.添加带有备注信息的tag git tag v5.…

linux系统Jenkins的安装

Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码,更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…

Golang embed 库全面解析:从基础到高级应用

Golang embed 库全面解析:从基础到高级应用 引言Golang的 embed:简化资源管理提升可移植性与便利性适用场景的拓展 embed 库的基本概念embed 库的工作原理使用 embed 的基本语法访问嵌入资源的方法embed 的限制 如何使用 embed嵌入单个文件嵌入整个目录结…

python 3.11中安装sympy(符号工具包)

1.python环境: 2.安装遇到问题: 其中一台Win10系统上: … 另一台Win10系统上: 3.升级pip cmd命令行中,执行如下命令: python.exe -m pip installl --upgrade pip 4.再次安装sympy cmd命令行中&…

前端架构: 脚手架包管理工具之lerna的全流程开发教程

Lerna 1 )文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理,并不复杂,中间常用的命令并不是很多这里是命令直达:https://lerna.js.org/docs/api-referen…

深度学习--神经网络基础

神经网络 人工神经网络( Artificial Neural Network , 简写为 ANN )也简称为神经网络( NN ),是一种模仿生物神经网络结构和 功能的计算模型 。人脑可以看做是一个生物神经网络,由众多的 神经元…