Docker自定义构建镜像dockerfile和使用数据卷
DockerFile
 
 Dockerfile 
 是一个文本文件,包含了一系列用于构建 
 Docker 
 镜像 
 的指令和配置信息。通过编写  
 
 
 Dockerfile 
 ,用户可以定义镜像的构建过程,包括基础镜像、运行命令、设置环境变量、暴露端口等。  
 
 
 Dockerfile 
 是 
 Docker 
 镜像的构建蓝图,通过执行 
 docker build 
 命令可以根据 
 Dockerfile 
 构建出一个完整的  
 
 
 镜像。每个指令都会生成一个镜像层,这些镜像层会被堆叠在一起以构建最终的镜像。  
 
 
DockerFile指令
 
 说明  
 
 
 FROM  
 
 
 指定基础镜像,用于后续的指令构建。  
 
 
 MAINTAINER  
 
 
 指定 
 Dockerfile 
 的作者 
 / 
 维护者。(已弃用,推荐使用 
 LABEL 
 指令)  
 
 
 LABEL  
 
 
 添加镜像的元数据,使用键值对的形式。  
 
 
 RUN  
 
 
 在构建过程中在镜像中执行命令。  
 
 
 CMD  
 
 
 指定容器创建时的默认命令。(可以被覆盖)  
 
 
 ENTRYPOINT  
 
 
 设置容器创建时的主要命令。(不可被覆盖)  
 
 
 EXPOSE  
 
 
 声明容器运行时监听的特定网络端口。  
 
 
 ENV  
 
 
 在容器内部设置环境变量。  
 
 
 ADD  
 
 
 将文件、目录或远程 
 URL 
 复制到镜像中。  
 
 
 COPY  
 
 
 将文件或目录复制到镜像中。  
 
 
 VOLUME  
 
 
 为容器创建挂载点或声明卷。  
 
 
 WORKDIR  
 
 
 设置后续指令的工作目录。  
 
 
 USER  
 
 
 指定后续指令的用户上下文。  
 
 
 ARG  
 
 
 定义在构建过程中传递给构建器的变量,可使用 
  "docker build"  
 命令设置。  
 
 
 ONBUILD  
 
 
 当该镜像被用作另一个构建过程的基础时,添加触发器。  
 
 
 STOPSIGNAL  
 
 
 设置发送给容器以退出的系统调用信号。  
 
 
 HEALTHCHECK  
 
 
 定义周期性检查容器健康状态的命令。  
 
 
 SHELL  
 
 
 覆盖 
 Docker 
 中默认的 
 shell 
 ,用于 
 RUN 
 、 
 CMD 
 和 
 ENTRYPOINT 
 指令。  
 
 
构建步骤
  先创建一个dockerfile的文件,用来创建我们的docker镜像,我们需要的tar包要放在同级目录下 
 
 
 
  编辑文件 
 
 
FROM centos:7 
# 基础镜像是centos7
# 作者
MAINTAINER cxy 2099289294@qq.com
# 设置环境变量
ENV MYPATH /usr/local
# 指定工作目录
WORKDIR $MYPATH
# 修改yum源   阿里的yum源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存并生成新的缓存
RUN yum clean all && yum makecache
# vim
RUN yum -y install vim
# net-tools
RUN yum -y install net-tools
#jdk
# 	1.解压tar 包  自动解压 
RUN mkdir /usr/local/java
ADD jdk-23_linux-x64_bin.tar.gz /usr/local/java/
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-23
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
# 要运行的程序
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bashfrom拉过来基础镜像centos,下载我们需要的vim和net-tools,解压jdk包和设置jdk的环境变量,放出来一个80端口
创建镜像
语法:Docker build 【-f 文件的名字】-t 镜像的名字 .
docker build -t mycentos .文件的名字不写的时候默认使用的是dockerfile


创建好之后使用命令查看
查看所有镜像
docker images创建容器运行容器,并进入到容器内部
docker run -it --name=容器名字  镜像名字  bash
导出镜像
docker save -o mycentos.tar mycentos可以看到~目录下会出现我们的镜像

导入镜像
将镜像远程传递给另一台服务器
scp ./mycentos.tar root@192.168.184.35:/usr/aaa
进入到另一台的服务器中加载镜像
cd /usr/aaadocker load -i mycentos.tar 查看镜像是否加载
docker images
导入成功
数据卷
 
  卷就是目录或文件,存在于一个或多个容器中,是 
   Docker 
  容器中用于持久化数据的一种机制,它可以将  
 
 
  
  容器内的数据存储到宿主机中,由 
  docker 
  挂载到容器,但不属于联合文件系统,因此能够绕过  
 
 
  
  UnionFS 
  ,提供一些用于持续存储或共享数据。  
 
 
  
  
  特性 
  :  
 
 
  
  卷设计的目的就是数据的持久化,完全独立于容器的生存周期,因此 
  Docker 
  不会在容器删除时删除其挂  
 
 
  
  载的数据卷。  
 
 
  
  
  特点 
  :  
 
 
  
  数据卷可以在容器之间共享或重用数据  
 
 
  
  卷中的更改可以直接实施生效  
 
 
  
  数据卷中的更改不会包含在镜像的更新中  
 
 
  
  数据卷的生命周期一直持续到没有容器使用它为止 
 
 
  
 作用:
1. 数据的共享
2. 容器删除的时候数据不丢失
添加数据卷
直接添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名 docker run -it -v /opt/myvolume:/opt/v1 --name=mycentos2 mycentos bash运行了一个容器mycentos2 容器中opt/v1目录下面的所有的内容全部都挂载到了宿主目录中的opt/myvolume 里面
测试
进入容器内部
docker exec -it 容器名/id bash进入刚和宿主机绑定的文件夹v1里,输出并创建一个文件,看宿主文件夹是否会同步创建

可以看到在我们的宿主机的文件夹里也同样会创建

即使容器被删除后也可以留下文件



















