DockerFile的指令

本文详细介绍了如何使用DockerFile构建镜像,包括各种常用命令的使用方法,如FROM、RUN、COPY、ADD等。同时,还讲解了如何通过-v命令或在DockerFile中使用VOLUME指令来添加数据卷实现容器与宿主机之间的数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、添加数据卷。实现容器和宿主机的数据共享
1、使用-v命令添加。docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名称ro表示只读,可以不写。如:docker run -it -v /myDataVolume:/dataVolumeContainer:ro 镜像名
2、在DockerFile中使用VOLUME指令来添加数据卷。可以同时添加多个
(1)、根目录下新建mydocker文件夹并进入到文件夹中编写DockerFile。添加以下内容:
FROM tomcat
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finshed"
CMD /bin/basha
(2)、DockerFile构建。docker build -f mydocker/DockerFile -t lizq/image .
在这里插入图片描述
(3)、运行。docker run -it lizq/image
二、DockerFile命令
 DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
在这里插入图片描述
在这里插入图片描述
FROM指定哪种镜像作为新镜像的基础镜像,如:FROM centos
MAINTAINER指明该镜像的作者和其电子邮件,如:MAINTAINER lizq<1826333695@qq.com">
RUN在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境等。如:
RUN yum install -y curl。也可以使用exec格式RUN ["executable", "param1", "param2"]的命令,如:RUN ["yum","install","-y","curl"]。executable是命令,后面的param是参数
COPY将主机的文件复制到镜像内,如果目的位置不存在,Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,并不会去做文件提取和解压工作。如:
COPY application.yml /etc/springboot/hello-service/src/resources。注意:需要复制的目录一定要放在Dockerfile文件的同级目录下。因为构建环境将会上传到Docker守护进程,而复制是在Docker守护进程中进行的。任何位于构建环境之外的东西都是不可用的。COPY指令的目的的位置则必须是容器内部的一个绝对路径
ADD将主机的文件复制到镜像中,跟COPY一样,限制条件和使用方式都一样,如:
ADD application.yml /etc/springboot/hello-service/src/resources。但是ADD会对压缩文件做提取和解压操作
EXPOSE暴露镜像的端口供主机做映射,启动镜像时,使用-P参数来将镜像端口与宿主机的随机端口做映射。如:EXPOSE 8080
WORKDIR在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录。如:WORKDIR /usr/local
ONBUILD当一个包含ONBUILD命令的镜像被用作其他镜像的基础镜像时,该命令就会执行
USER指定该镜像以什么样的用户去执行。如:USER mongo
VOLUME用来向基于镜像创建的容器添加卷。如:VOLUME /data/db /data/configdb
CMD容器启动时需要执行的命令,如:CMD /bin/bash。同样可以使用exec语法,如:
CMD ["/bin/bash"]。当有多个CMD的时候,前面的被覆盖,只有最后一个生效。
ENTRYPOINT作用和用法和CMD一样
CMD和ENTRYPOINT同样作为容器启动时执行的命令,区别有以下几点:
(1)、CMD的命令会被 docker run 的命令覆盖而ENTRYPOINT不会。如:使用命令docker run -ti image /bin/ps运行包含了CMD ["/bin/bash"]ENTRYPOINT ["/bin/bash"]的DockerFile文件,CMD后面的命令就会被覆盖转而执行bin/ps命令,而ENTRYPOINT的则不会,而是会把docker run 后面的命令当做ENTRYPOINT执行命令的参数。
(2)、CMD和ENTRYPOINT都存在时,CMD的指令变成了ENTRYPOINT的参数,并且此CMD提供的参数会被 docker run 后面的命令覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值