Dockerfile指令的使用
关于Dockerfile
Dockerfile实际上就是一系列创建Docker镜像的脚本, 虽然可以通过命令行来执行, 但是那样繁琐而且容易出错.
Dockerfile指令
FROM
他的意思是在创建新的镜像时使用的基础镜像.
- 格式:
- From [name]
- 示例:
- From nginx
- From microsoft/dotnet-aspnetcore-runtime
RUN
他的意思是在容器中需要运行的命令, 它包括安装软件、创建文件和目录, 以及创建环境配置等.
- 格式:
- Run ["","",""]
- Run [command]
- 示例:
- Run npm install npm -g
- Run mkdir -p /usr/src/redis
- Run npm install && npm start
- Run ["npm","install","npm","-g"]
COPY
Copy指令将文件或者目录复制到容器的文件系统, 文件和目录需位于相对于Dockerfile的路径中.
- 格式:
- Copy [ospath] [dockerpath]
- Copy ["",""]
- 示例:
- Copy . .
- Copy nginx.conf /etc/nginx/nginx.conf
- Copy . /usr/share/nginx/html
- Copy hom* /mydir/
ADD
Add指令与Copy指令非常类似,但它包含更多功能。除了将文件从主机复制到容器映像,Add指令还可以使用URL规范从远程位置复制文件。
- 格式:
- Add [source] [destination]
- 示例:
- Add https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe /temp/python-3.5.1.exe
WORKDIR
Workdir指定的功能相当于使用cd切换工作目录.
- 格式:
- Workdir [newpath]
- 示例:
- Workdir /app
ENTRYPOINT
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。每个Dockerfile中只能有一个Entrypoint,当指定多个时,只有最后一个有效。
- 格式:
- Entrypoint ["", ""]
- 示例:
- Entrypoint ["dotnet", "App.Web.Host.dll"]
ENV
ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。
- 格式:
- Env [name]=[value]
- 示例:
- Env VERSION=1.0 DEBUG=on NAME="Magicodes"
CMD
Cmd指令用于设置部署容器映像的实例时要运行的默认命令。如果 Dockerfile中指定了多个Cmd指令,只会计算最后一个指令。也可以使用如下命令行在启动时重载:
docker run [$image] [$other_command]
EXPOSE
Expose用来指定端口,使容器内的应用可以通过端口和外界交互。
- 格式:
- Expose [port]
- 示例:
- Expose 80
补充
总结
通过上述我们可以看到RUN、ENTRYPOINT和CMD都是执行命令, 但是其实他们是有区别的.
执行的时间点不同, 作用也不同, 按顺序如下:
- RUN:创建镜像时, 通常用于安装软件包
- ENTRYPOINT:启动容器时, 可以用来输出日志
- CMD:启动容器后, 可以用来启动应用
转义字符
在许多情况下, Dockerfile指令需要跨多个行;这可通过转义字符完成。 默认Dockerfile转义字符是反斜杠"". 由于反斜杠在Windows中也是一个文件路径分隔符,这可能导致出现问题。
所以在Windows下可以修改转义字符, 方法是Dockerfile的第一行放置如下转义分析程序指令:
# escape=`
注意,只有两个值可用作转义字符:\ 和 ` 。
优化
大致总结优化规则如下:
- 选择合适的基础镜像
- 优化指令顺序
- 合并指令
- 删除多余文件和清理没用的中间结果
- 使用 .dockerignore
Dockerfile指令的使用的更多相关文章
- docker学习笔记17:Dockerfile 指令 ONBUILD介绍
ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...
- docker之Dockerfile指令介绍
Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...
- docker Dockerfile指令ADD和COPY的区别,添加目录方法
docker Dockerfile指令ADD和COPY的区别,添加目录方法 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中.其格式是: ADD 源 ...
- Dockerfile指令学习 (转)
原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一 ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- Dockerfile 指令汇总及解析
原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html 什么是Dockerfile Dockerfile是由一系列 ...
- Docker基本命令与使用 —— Dockerfile指令与构建(三)
一.Dockerfile指令上 1.指令格式 # Comment 注释, 以#开头 INSTRUCTION argument 以大写的指令+参数 #First Dockerfile 注释 FROM u ...
- Docker学习(三): Dockerfile指令介绍
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- Dockerfile指令:
Dockerfile指令: 第一行注释,指令是大写字母开头, FROM指令: FROM<image>,后面跟镜像名, FROM<image>:<tag>,后面跟镜像 ...
随机推荐
- python3 枚举定义和使用
定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象:再比如行星类,目前只有 8 个对象.这种实例有限且固定的类,在 Python 中被称为枚举类.程序有两种方式来定义枚举类 ...
- ICEM-八分之一球体
原视频下载链接:https://yunpan.cn/c6seunjgbwRhJ 访问密码 c780
- docker gitlab and gitlab api
https://docs.gitlab.com/ee/api/repositories.html curl --header "PRIVATE-TOKEN: fxhDXPRJAowCouXE ...
- 小福bbs-冲刺总结
[小福bbs-冲刺总结] 这个作业属于哪个课程 班级链接 这个作业要求在哪里 作业要求的链接 团队名称 小福bbs 这个作业的目标 冲刺总结 作业的正文 小福bbs-冲刺总结 其他参考文献 面向百度和 ...
- pt-table-checksum解读【转】
pt-table-checksum是目前可以说是最好的查看主从一致性的工具 先来个使用例子,有助快速上手使用 在主库执行: mysql>GRANT SELECT, PROCESS, SUPER, ...
- 【java/Json】用Java对象构建Json语法树
本文后续:https://www.cnblogs.com/xiandedanteng/p/11973129.html 编译第一步:将文本解析成Java对象构成的语法树 第二步:将语法树输出整形好的Js ...
- taocrypt
taocrypt MySQL Bugs: #25189: mysqld: coding.cpp:243: void TaoCrypt::Base64Decoder::Decode(): Asserti ...
- button按钮的状态为disabled禁用状态,click事件无法触发,但是为什么touchstart下却依然可以触发
切换到移动模拟模式,并点击按钮,查看控制台. 发现click没有事件没有触发,而touch事件依然触发. 解决办法: 对于移动端我们使用css来禁止按钮,达到disable的效果: 对,就是这个神奇的 ...
- mysql 日期总结
select to_days(now()) #737733 select date_format(now(),'%Y-%m-%d') #2019-11-05 select CURRENT_DATE() ...
- Vue路由编程式导航以及hash模式
import Vue from 'vue'; import App from './App.vue'; //引入公共的scss 注意:创建项目的时候必须用scss import './assets/c ...