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.数据备份和恢复:通过使用数据卷,可以更容易地备份和恢复容器中的数据。

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

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

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

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"[email protected]"
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"[email protected]"

ENV workerDir /home/sha/dockerfile/3
WORKDIR $workerDir

ADD 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.20

ENV 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:$PATH

EXPOSE 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
相关推荐
tiger1193 小时前
大学专业解读——电气,自动化,仪器
运维·自动化·高考·电气·专业·仪器
来一杯龙舌兰5 小时前
【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)
linux·网络·kubernetes
穆易青5 小时前
2025.06.20【pacbio】|使用Snakemake构建可重复的PacBio全基因组甲基化分析流程
java·运维·服务器
A.A呐6 小时前
【Linux第四章】gcc、makefile、git、GDB
linux·c语言·开发语言·c++·git
努力成为DBA的小王6 小时前
CVE-2024-6387漏洞、CVE-2025-26465漏洞、CVE-2025-26466漏洞 一口气全解决
运维·服务器
苹果醋36 小时前
vuex4.0用法
java·运维·spring boot·mysql·nginx
Fireworkitte7 小时前
如何使用 Dockerfile 创建自定义镜像
运维·docker·容器
大数据张老师7 小时前
自动化性能回退机制——蓝绿部署与灰度发布
运维·系统架构·自动化·ai架构
A-花开堪折7 小时前
01-驱动开发开篇
linux·嵌入式硬件
程序员JerrySUN8 小时前
Linux 内核同步管理全解:原理 + 实战 + 考点
linux·运维·服务器