Dockerfile 使用教程

news2024/9/24 5:28:37

1.Dockerfile

1.1 什么是Dockerfile

Dockerfile可以认为是 Docker镜像的描述文件,是由一系列命令和参数构成的脚本 。主要作用是 用来构建docker镜像的构建文件
  • 通过架构图可以看出通过DockerFile可以直接构建镜像

1.2 Dockerfile解析过程

构建镜像步骤:
1)使用:通过命令“touch Dockerfile”创建Dockerfile文件然后在文件里编写命令
    Dockerfile内容要求:
    1.每条保留字指令都必须为大写,且后面都要跟至少一个参数
    2.指令按照从上到下,顺序执行
    3.#表示注释
    4.每条指令都会创建一个新的镜像层,并对镜像进行提交
2)构建命令:“docker build -t 镜像名:版本 Dockerfile所在目录 ”
#“.”表示当前目录,会把Dockerfile所在的目录里的所有文件打包
docker build -t mycentos:1.0 .
    如果不想将Dockerfile所在目录的所有文件打包,可以使用 dockerignore过滤
    1.在 Dockerfile所在的目录创建 dockerignore文件
    2.然后在里面编写需要过滤的文件“#”为注释,参考如下:
/temp:排除根目录下任意子目录中所有名字以temp开头的文件或目录。如文件/somedir/temporary.txt会被排除。
//temp*:排除根目录下任意两级子目录中所有名字以temp开头的文件或目录。如文件/somedir/subdir/temporary.txt会被排除。
temp?:排除根目录下名字以temp开头,后面为任意一个字符的文件或目录。如目录/tempa和/tempb都会被排除。

1.3 Dockerfile的保留命令

官方说明: Dockerfile reference | Docker Docs
保留字
作用
FROM
当前镜像是基于哪个镜像的 第一个指令必须是FROM
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
构建镜像时需要运行的指令
EXPOSE
当前容器对外暴露出的端口号,仅仅是声明
WORKDIR
指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV
用来在构建镜像过程中设置环境变量
ADD
将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY
类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
VOLUME
容器数据卷,用于数据保存和持久化工作,仅仅是声明
CMD
指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

(1) FROM 命令

  • 基于那个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像 必须作为Dockerfile的第一个指令出现
  • 语法:
    FROM <image>
    FROM <image>[:<tag>] 使用版本不写为latest
    FROM <image>[@<digest>] 使用摘要 #例: FROM centos:7 FROM openjdk:8-jre

(2) MAINTAINER 命令

  • 镜像维护者的姓名和邮箱地址[废弃]
  • 语法:
    MAINTAINER <name>

(3) RUN 命令

  • RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步
  • 语法:
    RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
    RUN echo hello
    RUN ["executable", "param1", "param2"] (exec form)
    RUN ["/bin/bash", "-c", "echo hello"] #例: RUN ["yum","install","-y","vim"] RUN cd /root RUN mv apache-tomcat-8.5.61 tomcat

(4) EXPOSE 命令

  • 用来指定构建的镜像在运行为容器时对外暴露的端口
  • 语法:
    EXPOSE 80/tcp 如果没有显示指定则默认暴露都是tcp
    EXPOSE 80/udp #例: EXPOSE 8080

(5) CMD 命令

  • 用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 注意: Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
  • 语法:
    CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form) #例: CMD ["java","-jar","xxx.jar"] CMD java -jar xxx.jar

(6) WORKDIR 命令

  • 用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
  • 语法:
    WORKDIR /path/to/workdir
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    `注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对` #例: WORKDIR /root/data

(7) ENV 命令

  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
  • 语法:
    ENV <key> <value>
    ENV <key>=<value> ... #例:
    ENV BASE_DIR /apps/data
  • 坏境变量用法:$变量名称

(8) ADD 命令

  • 用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
  • 语法:
    ADD hom* /mydir/ 通配符添加多个文件
    ADD hom?.txt /mydir/ 通配符添加
    ADD test.txt relativeDir/ 可以指定相对路径
    ADD test.txt /absoluteDir/ 也可以指定绝对路径
    ADD url #例: ADD xxx.jar . ADD https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz

(9) COPY 命令

  • 用来将context目录中指定文件复制到镜像的指定目录中
  • 语法:
    COPY src dest
    COPY ["<src>",... "<dest>"] #例: COPY xxx.txt .

(10) VOLUME 命令

  • 用来定义容器运行时可以挂在到宿主机的目录
  • 语法:
    VOLUME ["/data"]

(11) ENTRYPOINT命令

  • 用来指定容器启动时执行命令和CMD类似
  • 语法:
    ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2 #例 ENTRYPOINT java -jar xxx.jar ENTRYPOINT ["java","-jar","xxx.jar"]
    ENTRYPOINT指令,往往用于设置容器启动后的 第一个命令 ,这对一个容器来说往往是固定的。 CMD指令,往往用于设置容器启动的第一个命令的 默认参数 ,这对一个容器来说可以是变化的。

1.4 Dockerfile构建springboot项目部署

1.准备springboot可运行项目
2.将可运行项目放入linux虚拟机中
3.编写Dockerfile
FROM openjdk:8
WORKDIR /ems
ADD ems.jar /ems
EXPOSE 8989
ENTRYPOINT ["java","-jar"]
CMD ["ems.jar"]
4.构建镜像
[root@localhost ems]# docker build -t ems .
5.运行镜像
[root@localhost ems]# docker run -p 8989:8989 ems
6.访问项目
http://10.15.0.8:8989/ems/login.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的Reference

1. 常用四种引用 快速记忆法&#xff1a;“硬(俗称的强引用) --> 软(SoftReference) --> 弱(WeakReference) --> 虚(PhantomReference)” 此处将常说的“强引用”记忆成“硬引用”可以对应到次席的“软引用”&#xff08;反义词&#xff1a;硬-软&#xff09;这样更容…

ExpressLRS开源代码之框架结构

ExpressLRS开源代码之框架结构 1. 源由2. Arduino应用框架3. ExpressLRS应用框架4. 硬件设计框架4.1 单天线4.2 双天线单PA4.3 双天线双PA 5. 应用软件设计6. 参考资料 1. 源由 最近为了理解《ExpressLRS开源之基本调试数据含义》&#xff0c;做了一些源代码的研读。 概念、文…

Nginx基础+高级(2022版):待更新

1. 文章说明 说明&#xff1a;目前讲的是第一部分nginx核心技术篇&#xff0c;后需篇章会以第一部分为核心技术篇为基础来展开深度讲解&#xff0c;详情关注后续课程的发布。 2. 介绍和准备环境 2.1 介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xf…

WebDAV之π-Disk派盘 + 人升

人升是一款融入了游戏化元素的待办事项应用,旨在为用户提供一种记录待办事项的过程像玩游戏打怪升级的体验。该应用致力于在保持实用性的基础上,扩展应用的乐趣。 在实用性方面,人升提供了以下功能: – 简洁界面:符合Material Design的简约界面,使新建待办事项变得更加轻…

嘉泰实业和您共创未来财富生活

每一次暖心的沟通都是一次公益,真诚不会因为它的渺小而被忽略;每一声问候都是一次公益,善意不会因为它的普通而被埋没。熟悉嘉泰实业的人都知道,这家企业不但擅长在金融理财领域里面呼风唤雨,同时也非常擅长在公益事业当中践行,属于企业的责任心,为更多有困难的群体带来大爱的传…

【机器视觉】HALCON目标图像检测实践(零基础版非常有用!)

开发环境&#xff1a; 基本思路&#xff1a; 灰度阈值处理特征提取 ps:思考&#xff1a;如何通过阈值处理后&#xff0c;后续缩小检测目标范围&#xff1f; 二值化、梯度阈值、自适应阈值等方法来增强图像的对比度&#xff0c;从而突出目标特征&#xff0c;进一步缩小检测目标…

对话永洪科技CEO何春涛:专注BI,决胜AI时代丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 大数据、云计算、人工智能为代表的新一代信息技术走向普及&#xff0c;数据驱动业务&#xff0c;逐渐成为现代化企业管理、运作的日常。对于年均复合增长率超过20%的国内商业智能&#xff08;BI&#xff09;市场而言&#xff0c…

OpenHarmony 应用 ArkUI 状态管理开发范例

本文转载自《#2023 盲盒码 # OpenHarmony 应用 ArkUI 状态管理开发范例》&#xff0c;作者&#xff1a;zhushangyuan_ 本文根据橘子购物应用&#xff0c;实现 ArkUI 中的状态管理。 在声明式 UI 编程框架中&#xff0c;UI 是程序状态的运行结果&#xff0c;用户构建了一个 UI …

技术奇瑞高能出击,四大品牌联袂燃擎成都车展

8月25日&#xff0c;成都国际汽车展览会于中国西部国际博览城正式拉开帷幕。成都车展作为西南地区首屈一指的国内四大A级车展之一&#xff0c;不仅是下半年国内车市的风向标&#xff0c;也因天府之国弥漫着火锅味与茶香的烟火气而独具一番风味。成都车展上&#xff0c;奇瑞集团…

【校招VIP】前端算法考点之大数据相关

考点介绍&#xff1a; 大数据的关键技术分为分析技术和处理技术&#xff0c;可用于大数据分析的关键技术主要包括A/B测试&#xff0c;关联规则挖掘&#xff0c;数据挖掘&#xff0c;集成学习&#xff0c;遗传算法&#xff0c;机器学习&#xff0c;自然语言处理&#xff0c;模式…

17.看楼房

Description 小张在暑假时间进行了暑期社会调查。调查的内容是楼房的颜色如何影响人们的心情。于是他找到了一个楼房从左到右排成一排的小区&#xff0c;这个小区一共有 栋楼房&#xff0c;每个楼房有一个颜色 和一个高度 。小张调查的内容为每次他站在第 栋楼和第 栋楼之间向…

2240. 买钢笔和铅笔的方案数

文章目录 Tag题目来源题目解读解题思路复杂度分析写在最后 Tag 【枚举】【数学】 题目来源 2240. 买钢笔和铅笔的方案数 题目解读 现在你有一笔钱 total&#xff0c;用来购买钢笔和铅笔&#xff0c;它们的价格分别为 cost1 和 cost2&#xff0c;试问你可以有多少种不同的购…

CASAIM与北京协和医院达成合作,通过CT重建和3D打印技术为医学实验提供技术辅助和研究样本

近期&#xff0c;CASAIM与北京协和医院达成合作&#xff0c;通过CT重建和3D打印技术为医学实验提供技术辅助和研究样本&#xff0c;在实验样本的一致性和实验研究的严谨性原则下设计方案&#xff0c;推动产学研一体化发展。 北京协和医院是集医疗、教学、科研于一体的现代化综合…

【Tkinter系列04/15】界面小部件(选择钮、行编辑器)

九. 小部件Checkbutton 复选框小部件&#xff08;有时称为 “复选框”&#xff09;是允许用户阅读和 选择双向选项。上图显示了如何 复选按钮在关闭 &#xff08;0&#xff09; 和打开 &#xff08;1&#xff09; 状态下查看 实现&#xff1a;这是两个复选按钮的屏幕截图 使用 …

C#基础详解

Excerpt C#是微软公司发布的一种面向对象的、运行于 .NET Framework和 .NET Core&#xff08;完全开源&#xff0c;跨平台&#xff09;之上的高级程序设计语言。- C#是一种安全的、稳定的、简单的、优雅的&#xff0c;由C和C衍生出来的面向对象的编程语言。它在继承C和C强大功能…

threejs加载file格式的gltf模型,使用input type=file加载gltf模型

项目场景&#xff1a; 使用input选择gltf加载模型 问题描述 gltf有多个文件如何塞给GLTFLoader加载&#xff08;不知道怎么办&#xff09;。 解决方案&#xff1a; 最后在threejs官网看到解决办法 解决思路 URL.createObjectURL(bolb/file) 1&#xff1a;input输入文件获…

HummerRisk V1.4.0发布

大家好&#xff0c;HummerRisk 1.4.0和大家见面了&#xff0c;在这个版本中我们变更了多云检测的底层逻辑&#xff0c;增加了每次检测的project概念&#xff0c;更好的去支持检测历史和检索需要&#xff0c;增加阿里云最佳实践中资源监控检测规则&#xff0c;增加资源态势中的细…

TypeScript_队列结构-链表

队列 队列&#xff08;Queue&#xff09;&#xff0c;它是一种受限的线性表&#xff0c;先进先出&#xff08;FIFO First In First Out&#xff09; 受限之处在于它只允许在队列的前端&#xff08;front&#xff09;进行删除操作而在队列的后端&#xff08;rear&#xff09;进…

python后端,一个账户,多设备登录管理

一个账号&#xff0c;多台设备同时登陆的问题&#xff0c;设计以及实现 参考这篇文章&#xff1a; https://www.alibabacloud.com/help/zh/tair/use-cases/manage-multi-device-logon-from-a-single-user-by-using-tairhash1.0 设计思路 利用的是Redis&#xff0c;主设备的保…

Webgoat-Hijack a session通关答题教程

Webgoat-Hijack a session Hijack session是会话劫持&#xff0c;先了解需要用到的知识&#xff1a; Cookie原理&#xff1a; 1.客户端向服务端发起请求 2.服务端返回cookie&#xff0c;自己也保存了一份 3.客户端收到后&#xff0c;将cookie也保存起来 4.客户端再次发起请求时…