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:$PATHEXPOSE 80# 要运行的程序
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
from拉过来基础镜像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/aaa
docker 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里,输出并创建一个文件,看宿主文件夹是否会同步创建
可以看到在我们的宿主机的文件夹里也同样会创建
即使容器被删除后也可以留下文件