编写Dockerfiles
指令
docker build通过Dockerfile制作镜像
docker build [PATH] [-f Dockerfile]
其中PATH不写,默认执行指令的当前目录,不要用 /,这样将导致整个操作系统复制到镜像中
ENV
定义环境变量
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$ab
使用环境变量
WORKDIR ${foo} # WORKDIR /bar
ADD . $foo # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
.dockerignore
# comment
*/temp*
*/*/temp*
temp?
| RULE | Behavior |
|---|---|
| # comment | Ignored. |
| /temp | Exclude files and directories whose names start with temp in any immediate subdirectory of the root. For example, the plain file /somedir/temporary.txt is excluded, as is the directory /somedir/temp. |
| //temp* | Exclude files and directories starting with temp from any subdirectory that is two levels below the root. For example, /somedir/subdir/temporary.txt is excluded. |
| temp? | Exclude files and directories in the root directory whose names are a one-character extension of temp. For example, /tempa and /tempb are excluded. |
FROM 母镜像
FROM <image>[:<tag>] [AS <name>]
Dockerfile通过ARG设置编译变量,通过${xxxx}在编译过程中调用
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
RUN 镜像制作指令
用于制作镜像过程之中,执行指令,比如拷贝文件,删除文件。
RUN [/bin/sh -c | cmd /S /C ]
linux下,默认采用 /bin/sh -c
window下,默认采用 cmd /S /C
RUN ["executable", "param1", "param2"]
不像shell form ,exec form 不用直接通过shell命令运行,比如 RUN [ "echo", "$HOME" ]就不会运行,如果希望exce from像shell form那样运行,必须写成RUN [ "sh", "-c", "echo $HOME" ]
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 节点在Dockerfile只能有一个,如果有多个CMD的话,最后出现的CMD生效,其他的忽略
CMD节点目的是给容器提供一个默认的运行指令。
LABEL 镜像标签
示例
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
EXPOSE 监听端口
EXPOSE <port> [<port>/<protocol>...]
EXPOSE 80/tcp
EXPOSE 80/udp
容器中定义好监听端口后,在docker run中如果不用 -p 重新指定监听端口,将直接默认端口映射出去
docker run -p 80:80/tcp -p 80:80/udp
ENV 镜像环境变量
ENV <key> <value>
ENV <key>=<value> ...
示例:
ENV myName="John Doe" myDog=Rex\ The\ Dog \
myCat=fluffy
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat fluffy
在docker run中可以通过 --env 重写参数
docker run --env <key>=<value>
ADD
- ADD [--chown=:] ...
- ADD [--chown=:] ["",... ""] (this form is required for paths containing whitespace)
ADD hom* /mydir/ # adds all files starting with "hom"
ADD hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt"
COPY
- COPY [--chown=:] ...
- COPY [--chown=:] ["",... ""] (this form is required for paths containing whitespace)
COPY hom* /mydir/ # adds all files starting with "hom"
COPY hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt"
ENTRYPOINT
- ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
- ENTRYPOINT command param1 param2 (shell form)
WORKDIR
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
编写Dockerfiles的更多相关文章
- docker(四) 使用Dockerfile构建镜像
下面以一个例子来演示构建镜像的过程. #在/tmp目录下演示 cd tmp mkdir build-redis-image 1.创建Dockerfile文件 vim Dockerfile 并写入如下内 ...
- Docker--Dockerfile引用及指令集的功能用法
Dockerfile引用的官网文档:https://docs.docker.com/engine/reference/builder/ 编写Dockerfiles的最佳实践的官网文档:https:// ...
- Docker-Compose入门-(转载)
Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务 ...
- docker-compose入门--翻译
在这一页,你将学习到如何构建一个简单的python的web应用,并通过Docker compose来运行.这个应用程序使用的是Flask框架,并维护着一个存储在reids里的点击计数器.由于这个案例使 ...
- 如何编写最佳的Dockerfile
译者按: Dockerfile 的语法非常简单,然而如何加快镜像构建速度,如何减少 Docker 镜像的大小却不是那么直观,需要积累实践经验.这篇博客可以帮助你快速掌握编写 Dockerfile 的技 ...
- docker 应用-2(Dockerfile 编写以及镜像保存提交)
我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤 ...
- Dockerfile 编写
转: https://blog.fundebug.com/2017/05/15/write-excellent-dockerfile/如何编写最佳的Dockerfile 译者按: Dockerfile ...
- Docker的简介以及Dockerfile编写与使用
Docker的简介 Docker是在容器的基础上,进行了进一步的封装,极大的简化了容器的创建和维护.使得Docker技术比虚拟机技术更为轻便.快捷. 下面是两张对比图. 可以看到传统虚拟机技术是虚拟出 ...
- 自己编写k8s
## 基于Docker和Kubernetes的企业级DevOps实践训练营 ### 课程准备 1. 离线镜像包 百度:https://pan.baidu.com/s/1N1AYGCYftYGn6L0Q ...
随机推荐
- Maven环境变量配置和在Eclipse中的配置
1.Maven环境变量配置 M2_HOME :变量值为maven的安装目录 在path后添加%M2_HOME%\bin; 检查JDK,maven配置的cmd命令 echo %JAVA_HOME% ja ...
- [控件] LineAnimationView
LineAnimationView 效果 说明 水平循环无间隔播放动画效果,用于loading的界面 源码 https://github.com/YouXianMing/UI-Component-Co ...
- windows下搭建vue开发环境
Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.2016 ...
- Linux 文件特殊权限详解[suid/sgid/t]
setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...
- virtual memory exhausted: Cannot allocate memory 解决方法
在阿里云买了个云服务器,内存1G.编译kudu时出现下面的错误: virtual memory exhausted: Cannot allocate memory 问题原因:由于物理内存本身很小,且阿 ...
- 4星|《情感驱动》:可口可乐营销VP的案例回顾与经验总结
情感驱动 作者是西班牙人,1963年出生,可口可乐前营销VP. 作者大学是法律专业,毕业后5年,在西班牙开了一个律师事务所,干了1年后去读MBA.1988年进入宝洁工作,1996年跳槽到可口可乐,辗转 ...
- python3+OpenGL环境配置
注:示例系统环境:Windows10 64位 + Anaconda3: 1.首先登录https://www.opengl.org/resources/libraries/glut/,下载下图箭头所指的 ...
- AbstractApplicationContext 笔记
一.这个类的属性 public abstract class AbstractApplicationContext extends DefaultResourceLoader implements C ...
- 第五周:MySQL数据库
首先,先了解一下数据库的基本概念要点: 数据库是数据存储的集合,表示数据结构化的信息 列存储表中的信息 行存储表的明细 主键是表中的唯一标识 主键不具备业务意义 在实际操作中,对表的主键不做强制性要求 ...
- 是否含有RTTI(运行时类型信息)是动态语言与静态语言的主要区别
运行时类型信息代表类型信息和对内存的操作能力. 运行时类型信息是运行时系统的基础. 类型信息分为编译时类型信息和运行时类型信息两种: 静态语言的类型信息只在编译时使用和保留,在可执行文件中没有类型信息 ...