关于Dockerfile的写法
Dockerfile是用来自定义构建镜像的文件。
Dockerfile:
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
- FEOM : 指定基于哪个镜像进行自定义
- RUN : 运行指令, 两种形式
RUN 命令RUN ["test.php", "dev", "offline"]等价于test.php dev offline
docker 在每一行上新建一层,为了避免过多的层,用 && 把一些命令缩成一行
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
[root@localhost dockerdir]# docker build -t imagetest:test .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
---> 8cf1bfb43ff5
Step 2/2 : RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
---> Using cache
---> 2611d7938c46
Successfully built 2611d7938c46
Successfully tagged imagetest:test
[root@localhost dockerdir]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagetest test 2611d7938c46 2 hours ago 132MB
twilight/nginx ali 378d7ca4a813 3 hours ago 229MB
mysystem tags 1c174e9fbdee 3 hours ago 64.2MB
ubuntu 18.04 2eb2d388e1a2 6 days ago 64.2MB
nginx latest 8cf1bfb43ff5 9 days ago 132MB
training/webapp latest 6fae60ef3446 5 years ago 349MB
[root@localhost dockerdir]#
docker build 会将上下文路径中的所有文件打包发送给引擎,所以上下文路径不能放无用的文件,会造成执行过程的缓慢。
指令
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]: 目的路径不存在会自动创建。路径支持通配符。ADD用法与COPY一致,不同之处在于源文件为gzip, bzip2, xz格式,会自动解压并复制到目标路径下。- 如果目标路径指定的是一个文件,则会覆盖这个文件(即使这个文件已经有内容),不存在就创建新文件
- 如果目标路径是一个目录,但是这个目录不存在,docker会自动创建目录
CMD ["<可执行文件或命令>","<param1>","<param2>",...]或CMD <shell 命令>,用于在容器构建完成后执行的指令- 可以写多条CMD,但是只有最后一条会生效
- Dockerfile中的CMD命令可以被
docker run -it ubuntu 命令中的命令覆盖。 - RUN是运行在build的时期,而CMD运行在 docker run的时期
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]或者ENTRYPOINT 命令跟CMD的效果差不多,但是它始终会执行,或者被替换- 如果有多条 ENTRYPOINT命令,那么只有最后一条会生效
- 如果定义了
ENTRYPOINT ["nginx", "-c"]那么在docker run后面的参数会被追加到nginx -c的后面 - 如果
ENTRYPOINT ["nginx", "-c"]和CMD [""]同时使用, CMD中的内容也会被追加到 ENTRYPOINT的后面 - 通过指定
--entrypoint 命令 参数来覆盖ENTRYPOINT的内容
ENV <key> <value>或者ENV <key1>=<value1> <key2>=<value2>: 定义的环境变量可以在build和run的时候以$var的形式引用ARG和 ENV作用一样,但是仅限于在Dockerfile内生效,可以在docker build --build-arg key=value来覆盖VOLUME ["<路径1>", "<路径2>"...]自动挂载数据卷EXPOSE <端口1> [<端口2>...]声明端口,方便配置WORKDIR <工作目录路径>目录必须已经存在,在构建镜像的每一层中,该目录都会存在。USER <用户名>[:<用户组>]切换用户ONBUILD本次不会执行,但是如果有新的Dockerfile引用了这个镜像,就会执行ONBUILD指定的命令
参考资料
https://www.runoob.com/docker/docker-dockerfile.html
https://blog.csdn.net/shunfa888/article/details/79373840
关于Dockerfile的写法的更多相关文章
- Docker(五)如何构建Dockerfile
摘自 https://mp.weixin.qq.com/s/_hq9dPe6390htN8BTkoQeQ 一.Dockerfile的指令集 由于Dockerfile中所有的命令都是以下格式:INSTR ...
- Dockerfile编写的注意事项
一.Dockerfile合理分层 Dockerfile的写法不合理,有时候会导致镜像膨胀,由于Docker是分层设计,而在Dockerfile中,每一条指令都拥有自己的context,而执行到下一条指 ...
- 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像
什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...
- 你确定你会写 Dockerfile 吗?
如今 GitHub 仓库中已经包含了成千上万的 Dockerfile,但并不是所有的 Dockerfile 都是高效的.本文将从五个方面来介绍 Dockerfile 的最佳实践,以此来帮助大家编写更优 ...
- Docker Dockerfile 指令详解与实战案例
Dockerfile介绍及常用指令,包括FROM,RUN,还提及了 COPY,ADD,EXPOSE,WORKDIR等,其实 Dockerfile 功能很强大,它提供了十多个指令. Dockerfile ...
- Dockerfile优化方式
如今GitHub 仓库中已经包含了成千上万的Dockerfile,但并不是所有的Dockerfile都是高效的.本文将从四个方面来介绍Dockerfile的最佳实践,以此来帮助大家编写更优雅的Dock ...
- [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务
转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...
- Docker镜像压缩
一.Dockerfile合理分层 Dockerfile的写法不合理,有时候会导致镜像膨胀,由于Docker是分层设计,而在Dockerfile中,每一条指令都拥有自己的context,而执行到下一条指 ...
- 从零开始搭建Jenkins+Docker自动化集成环境
本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...
随机推荐
- 刷题记录:Codeforces Round #719 (Div. 3)
Codeforces Round #719 (Div. 3) 20210703.网址:https://codeforces.com/contest/1520. 没错,我是个做div3的蒟蒻-- A 大 ...
- 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。
有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成. 分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新 ...
- rtmp/rtsp/hls公网测试地址
相信大家在调试播放器的时候,都有这样的困惑,很难找到合适的公有测试源,以下是大牛直播整理的真正可用的直播地址源. 其中,rtmp和rtsp的url,用https://github.com/daniul ...
- KingbaseES V8R3 shared_buffer占用过多导致实例崩溃
背景 有这样一个案例.客户备库意外宕机,从集群日志只看出发生了主备切换,备库一直持续恢复备库没有成功,从数据库日志看到如下报错: terminating connection because of c ...
- PostgreSQL 涉及复杂视图查询的优化案例
一.前言 对于含有union , group by 等的视图,我们称之为复杂视图. 这类的视图会影响优化器对于视图的提升,也就是视图无法与父查询进行合并,从而影响访问路径.连接方法.连接顺序等.本文通 ...
- 2021年1月-第02阶段-前端基础-HTML+CSS阶段-Day01
HTML5 第一天 一.什么是 HTML5 1.HTML5 的概念与定义 定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML 两个概念: 是一 ...
- 接入Twitter和Facebook分享踩坑记录
准备工作 1.首先需要在HTML的head添加下述meta标签内容,在分享时,Twitter和Facebook会爬取该网站页面的meta内容,然后生成分享卡片. 2.按照下述配置完成后,需要把内容发布 ...
- 合理编写C++模块(.h、.cc)
模块划分 合理编写模块的 demo.h.demo.cc 下例为C++为后端服务编写的探活检测服务 health_server.h #ifndef HEALTH_SERVER_H #define HEA ...
- X-Pack:创建阈值检查警报
简单的事情应该简单(Simple things should be simple),这是Elastic {ON} '17的主题之一,Elastics收到了许多关于使用简单易用的UI创建警报的请求.事实 ...
- Solutions:Elastic workplace 搜索:随时随地搜索所有内容 (一)