Dockerfile常用指令以及使用案例

Dockerfile常用指令以及使用案例

1、ADD复制文件

	ADD 指令用于复制文件,格式为:* ADD  <src>...<dest>* ADD ["<src>",..."<dest>"]从 src 目录复制文件到容器的 dest。其中 src 可以是Dockerfile 所在目录的相对路径,也可以是一个URL,还可以是一个压缩包。说明:1)src 必须在构建的上下文内,因为 docker build 命令首先会将上下文路径和其子目录发送到 docker daemon。2)如果 src 是一个 URL ,同时 dest 不以斜杠结尾,dest 将被视为文件, src 对应内容文件将被下载到 dest 。3)如果 src 是一个 URL ,同时 dest 以斜杠结尾,dest 将被视为目录,src 对应内容将被下载到 dest 目录。4)如果 src 是一个目录,那么整个目录下的内容将被复制,包括文件系统元数据。5)如果文件是可识别的压缩包格式,则 docker 会自动解压。例如:ADD   XXXX-0.0.1-SNAPSHOT.jar  app.jar 

2、ARG设置构建参数

   ARG 指令用于设置构建参数。ARG 指令设置的是构建时的环境变量,在容器运行时不会存在这些变量的。例如:ARG  user1=someuser

3、CMD 容器启动命令

  CMD 指令用于为执行容器提供默认值。每个 Dockerfile 只有一个 CMD 命令,如果指定了多个 CMD 命令,那么只有最后一条会被执行,如果启动容器的时指定了运行的命令,则会覆盖CMD 指定的命令。支持 3 种格式:1)CMD ["executable","param1","param2"]-----推荐这种方式2)CMD ["param1","param2"]  ------为 ENTRYPOINT 指令提供预设参数3)CMD command  param1  param2  ------- 在 shell 中执行

4、COPY 复制文件

  复制文件,格式为:1)COPY  <src>....<dest>2)COPY ["<src>",..."<dest>"]复制本地端的 src 到容器的 dest 。COPY指令和 ADD 指令类似,但是 COPY 指令不支持 URL和压缩包。

5、ENTRYPOINT 入口点

 格式为:1)ENTRYPOINT  ["executable","param1","param2"]2)ENTRYPOINT  command  param1  param2ENTRYPOINT 和 CMD 指令的目的一样,都是指定 Docker 容器启动时执行的命令,可多次设置,但只有最后一个有效。

6、ENV 设置环境变量

  ENV 指令用于设置环境变量,格式为:1)ENV <key> <value>2)ENV <key> = <value>...例如: ENV  JAVA_HOME  /path/to/java 

7、EXPOSE 声明暴露的端口

   EXPOSE  指令用于声明在运行时容器提供服务的端口,格式为:EXPOSE  <port>  [<port>...]注意:这里只是一个声明,运行时并不会因为该声明就打开相应的端口。该指令的作用主要是帮助镜像使用者理解该镜像服务的守护端口;其次是当运行时使用随机映射时,会自动映射 EXPOSE 的端口。示例:EXPOSE   port1    // 声明暴露一个端口docker  run  -p  port1  image   // 相应的运行容器使用的命令docker  run  -P image  // 使用 -P 选项启动EXPOSE  port1   port2  port3  // 声明暴露多个端口docker  run  -p  port1   port2  port3  image  // 相应的运行容器使用的命令docker  run  -p   host_port1:port1   -p  host_port2:port2   -p  host_port3:port3   image 

8、FROM 指定基础镜像

  使用 FROM 指令指定基础镜像。FROM 指令必须指定且需要写在其他指令之前。FROM 指令后的所有指令都依赖于该指令所指定的镜像。支持 3 种格式:1)FROM  <image>2)FROM  <image>:<tag>3)FROM  <image>@<digest>

9、LABEL 为镜像添加元数据

   LABEL 指令用于为镜像添加元数据。格式为: LABEL <key> = <value>  <key> = <value>  <key> = <value> ...使用 “  "  ” 和 “  \ ” 转换命令行,例如:LABEL  "com...." = "ACME...."LABEL   com.x = "foo"LABEL   version = "1.0"LABEL   description = "This  text  ill \ that  label-values can span  muttiple lines. "

10、MAINTAINER 指定维护者的信息

   MAINTAINER 指令用于指定维护者的信息,用于为 Dockerfile 署名。格式为: MAINTAINER  <name>

11、RUN 执行命令

   该指令支持两种格式:1)RUN  <command>2)RUN  ["executable" , "param1" , "param2"]

12、USER 设置用户

   USER  指令用于设置启动镜像时的用户或者 UID ,写在该指令后的 RUN 、CMD 以及 ENTRYPOINT 指令都将使用该用户执行命令。格式为:USER  用户名例如:USER   daemon

13、VOLUME 指定挂载点

  VOLUME 指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持久化数据的需求时可以在 Dockerfile 中使用该指令。格式为:VOLUME    ["/data"]例如:VOLUME   /data

14 、WORKDIR指定工作目录

	格式为:WORKDIR  /path/to/workdir切换目录指令,类似于 cd 命令,写在该指令后的 RUN 、CMD 以及 ENTRYPOINT 指令都将该目录作为当前目录,并执行相应的命令。

15 其他

   扩展内容,可自行阅读 https://docs.docker.com/reference/dockerfile/

16 使用Dockerfile 构建镜像,然后启动、访问服务

   一、准备工作执行下面的命令,将项目构建成 jar 包 :mvn  clean  package    二、镜像构建1)在 jar 包所在目录,创建名为 Dockerfile 的文件touch  Dockerfile 2)在 Dockerfile 文件中添加以下内容// 基于哪个镜像FROM  java:8   // 将本地文件夹挂载到当前容器VOLUME  /tmp   // 复制文件到容器ADD   xxxx.jar    app.jar  // 声明需要暴露的端口EXPOSE  8761  // 配置容器启动后执行的命令ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]   3)使用 docker  build  命令构建镜像格式:docker   build   -t   仓库名称/镜像名称(:标签)   Dockerfile 相对位置例如:docker   build   -t   itmuch/xxxx:0.0.1  . 三、启动镜像docker   run   -d    -p   8761:8761  itmuch/xxxx:0.0.1 四、访问服务http://Docker宿主机IP:8761/

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

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

相关文章

C++初阶:string类模拟实现

本节内容主要针对的是在STL之前的string类的实现&#xff0c;通过模拟实现string类的一些功能来更好地使用string。本篇主要针对的是非const对象&#xff0c;如果要实现const的对象的话&#xff0c;只需要在对应的部分增添上const就行了。编者水平有限&#xff0c;如有错误欢迎…

手把手在K210上部署自己在线训练的YOLO模型

小白花了两天时间学习了一下K210&#xff0c;将在线训练的模型部署在K210&#xff08;代码后面给出&#xff09;上&#xff0c;能够识别卡皮巴拉水杯&#xff08;没错&#xff0c;卡皮巴拉&#xff0c;情绪稳定&#xff0c;真的可爱&#xff01;&#xff09;。数据集是用K210拍…

IndexController

目 录 1 IndexController.. 1 1.1 * 后台管理首页... 2 1.2 * 页面跳转... 2 // 取最新的20条日志... 2 1.3 * 个人设置页面... 3 IndexControllerpackage com.my.blog.website.controller.admin;

Java数组填充:Arrays.fill()方法

Arrays.fill()方法 Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。这个方法属于Java标准库中的java.util.Arrays类 1. 方法介绍&#xff1a; 填充到所有位置 Arrays.fill(Type[] array, Type value) 参数&#xff1a; array 是目标数组&#xff0c;可以是…

linux下minio部署和nginx配置

1 下载minio wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio #启动minio&#xff0c;文件数据存放在/data目录 ./minio server /data2 部署minio 下载minio后赋予可执行权限就可以运行了&#xff0c;这里我整理了遇到的坑和解决问题的最终配置…

算法打卡day21(开始回溯)

今日任务&#xff1a; 1&#xff09;77.组合 77.组合 题目链接&#xff1a;77. 组合 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;带你学透回溯算法-组合问题&#xff08;对应力扣题目&#xff1a;77…

Java多线程学习(概念笔记)

面试题&#xff1a;并行和并发有什么区别&#xff1f; 现在都是多核CPU&#xff0c;在多核CPU下 并发是同一时间应对多件事情的能力&#xff0c;多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力&#xff0c;4核CPU同时执行4个线程 面试题&#xff1a;创建线…

JavaScript编写评分控件

编写一个评分控件&#xff0c;用一个单行5列的Table做评分控件&#xff0c;监听td的click事件&#xff0c;点击一个td的时候&#xff0c;将这个td及之前的td背景色变为红色&#xff0c;之后的td背景色变为白色。 关键代码&#xff1a; <!DOCTYPE html> <html lang&q…

HeidiSQL导出SQL文件

目前开发阶段的数据库可视化工具逐渐转为了HeidiSQL&#xff0c;本文讲一讲导出到sql文件的小细节&#xff0c;给自己做个记录补充。 安装或数据库可视化工具比较可参考&#xff1a; windows下全免费手动搭建php8mysql8开发环境及可视化工具安装 导出 原来用Navicat的时候&am…

对象数组与指针与引用

一.对象指针的使用 #include<iostream> using namespace std; class A{ public:A(int a){xa;}void show_a(){cout<<x<<endl;}private:int x; }; int main() { A ob&#xff08;2&#xff09;,*p;//声明A的对象和对象指针 ob.show_a();//利用对象名访问对象的…

什么是面向对象【大白话Java面试题】

什么是面向对象 同样是解决一个问题&#xff0c;面向对象的角度是将问题抽象成对象的形式。通过分类的思维方式&#xff0c;将问题分成几个解决方案的对象。给每个对象赋值属性和方法&#xff0c;对每个对象的细节进行面向过程的思维&#xff0c;执行自己的方法来解决问题。 …

接口测试vs功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什…

[2023] 14届

1.日期统计 题意 1.日期统计 - 蓝桥云课 (lanqiao.cn) 思路 用dfs扫 对每一个位进行限制 花了一个小时 注意把答案枚举出来 对应一下看到底对不对 code #include<iostream> #include<cstdio> #include<stack> #include<vector> #include<al…

鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京东、小红书、得物……等公司&#xff0c;还有一些银行也都与华为鸿蒙达成了合作。使得一时之间市场紧缺鸿蒙开发人才&#xff0c;不少公司不惜重金争抢人才。 据智联招聘的最新数据显示…

Acwing 2868.子串分值 贡献法

对于一个字符串 S&#xff0c;我们定义 S 的分值 f(S) 为 S 中恰好出现一次的字符个数。 例如 f(“aba”)1&#xff0c;f(“abc”)3, f(“aaa”)0 现在给定一个字符串 S[0…n−1]&#xff08;长度为 n&#xff09;&#xff0c;请你计算对于所有 S 的非空子串 S[i…j](0≤i≤j…

Java使用数组实现栈、队列、堆

数组模拟栈&#xff1a; const int N 10010; // ******************** 栈 int stk[N], tt//tt是下标; // 插入 stk[k] x; // 删除 tt--; // 判断栈是否为空 if (tt > 0) not empty else empty // 栈顶 stk[tt]; // ******************** 队列 // 在队尾插入…

语音合成(TTS)开源调研与测评

2023年作为AI元年,各个领域的技术都有大规模的革新,语音领域的TTS(语音合成)也有很多新技术出现,比如Bert-Vits2、OpenVoice等等,都风靡一时。 笔者由于工作需要,近一个月在调研开源TTS,由于业务需要,主要看合成音频的效果(MOS)和合成速度(RTF)这两个指标,以及克…

关于vue2和vue3

Vue.js 是一个流行的前端框架&#xff0c;用于构建用户界面。Vue2 和 Vue3 是该框架的两个主要版本&#xff0c;它们之间存在一些关键的区别。下面我将详细介绍这两个版本的区别&#xff0c;并提供使用案例来说明这些区别。 响应式系统的底层实现&#xff1a; Vue2&#xff1a;…

nowcoder运维面试题集锦

TCP套接字中不会阻塞的是哪一种操作&#xff1f; 在TCP套接字中&#xff0c;不会阻塞的操作是绑定操作。具体来说&#xff0c;bind函数用于将特定的IP地址和端口号与套接字关联&#xff0c;这个操作本身并不引起阻塞。而其他一些操作&#xff0c;如读操作&#xff08;read、rea…

京西商城——商品相关接口开发

文章目录 接口开发django原生CBV开发商品分类菜单接口继承APIView开发商品类型分类接口通过序列化器开发商品详情接口 接口开发 django原生CBV开发商品分类菜单接口 先直接给出最终的views类&#xff0c;先简单的解释一下&#xff1a; 在基于CBV&#xff08;基于类视图的&am…