Dcokerfile 参考
$ docker build .
Sending build context to Docker daemon 6.51 MB ...
$ docker build -f /path/to/a/Dockerfile .
zane@zane-V:~/mydockerbuild$ docker build -t aiapple .
zane@zane-V:~/mydockerbuild$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aiapple latest d2f5f84bec87 seconds ago 275.1 MB
zane@zane-V:~/mydockerbuild$ docker build -t zane/aiapple: -t zane/aiapple: .
Sending build context to Docker daemon 2.048 kB
Step : FROM docker/whalesay:latest
---> 6b362a9f73eb
Step : RUN apt-get -y update && apt-get install -y fortunes
---> Using cache
---> 845104a653c5
Step : CMD /usr/games/fortune -a | cowsay
---> Using cache
---> d2f5f84bec87
Successfully built d2f5f84bec87
zane@zane-V:~/mydockerbuild$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ziapple latest d2f5f84bec87 minutes ago 275.1 MB
aiapple latest d2f5f84bec87 minutes ago 275.1 MB
zane/aiapple d2f5f84bec87 minutes ago 275.1 MB
zane/aiapple d2f5f84bec87 minutes ago 275.1 MB
- 存仓库不支持大写
- 所有存储库使用的image还是一个。
- 当然run的时候是指定 存储库。
- 删除image的时候实际上是删除存储库
- docker rmi ziapple
- ${variable:-word}
- 如果variable设置,则返回variable的值,否则返回word
- ${variable:+word}
- 如果variable设置,则返回word,否则返回空字符串
FROM busybox
ENV foo /bar
WORKDIR ${foo} # WORKDIR /bar
ADD . $foo # ADD . /bar
COPY \$foo /quux # COPY $foo /quux
- ADD
- COPY
- ENV
- EXPOSE
- LABEL
- USER
- WORKDIR
- VOLUME
- STOPSIGNAL
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc
# comment
*/temp*
*/*/temp*
temp?
- #comment
- 忽略,只是语法需要
- */temp*
- 排除任何root目录中间子目录名以temp开始的文件或目录
- /ttt/templlll
- */*/temp*
- /somedir/subdir/temporary
- temp?
- /tempa 或 /tempb
*.md
!README*.md
README-secret.md
*.md
README-secret.md
!README*.md
- FROM在Dockerfile中必须是除注释外的第一行
- FROM在一个Dockerfile中出现多次为了创建多个images.
- tag 或者 digest 值是选项。如果忽略这两个,则使用默认值latest。
- 如果没有能匹配到tag的值,会放回错误
- RUN <command>
- shell 形式,这个命令运行在一个shell中,默认shell是 /bin/sh -c
- RUN ["executable","param1","param2"]
- 执行 形式
RUN /bin/bash -c 'source $HOME/.bashrc;\
echo $HOME'
- 使用执行形式,指定不同shell
- RUN ["/bin/sh","-c","echo hello"]
- 执行形式,需要双引号
- 和shell形式不同,执行形式不调用命令行shell。
- 也就是说一般shell进程不会启动
- RUN ["echo","$HOME"],$HOME变量不会被替换,
- 即没有环境变量之说,因为shell 进程都没起来
- 但如果想用shell进程但又不想使用shell形式,则
- RUN ["sh","-c","echo $HOME"]
- 在执行形式,指定shell。
- 也就是说一般shell进程不会启动
docker build --no-cache
- CMD ["executable","param1","param2"]
- 首选形式
- CMD ["param1","param2"]
- 最为entrypoint,默认参数
- CMD command param1 param2
- shell 形式
- 不像shell 形式,首选形式不调用shell 命令行,shell进程不会启动。因此
- CMD [ "echo", "$HOME" ] 则在HOME没有变量的替换。
CMD [ "sh", "-c", "echo $HOME" ] 才会使用变量的替换
FROM ubuntu
CMD echo "This is a test." | wc -
FROM ubuntu
CMD ["/usr/bin/wc","--help"]
- run,实际上是执行命令然后提交执行结果
- cmd,在build时不执行任何命令,但为image指定了将要执行的命令
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."
每个LABEL都会产生一个layer,如果有很多layer的话可能会导致image不工作。
LABEL multi.label1="value1" multi.label2="value2" other="value3"
LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
- ADD <src>... <dest>
- ADD ["<src>",..."<dest>"]
- 这种形式适合路径包含空白。
ADD hom* /mydir/ # adds all files starting with "hom"
ADD hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt"
ADD test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # adds "test" to /absoluteDir/
- <src>路径必须在build的上下文中。
- 不能使用ADD ../something /something。.. 已经不再上下文中了
- 因为docker build的第一步就是讲上下文目录发送到docker daemon
- <src>是一个URL,<dest>没有以斜线结束,文件从URL下载然后复制到<dest>
- <src>是一个URL,<dest>以斜线结束,然后filename依据URL推断,file被下载到<dest>/<filename>.
- ADD http://example.com/foobar /
- 将创建文件 /foobar。URL必须有一非一般的路径,可以让一个合适的filename被发现。
- 这个例子将不会工作 http://example.com
- ADD http://example.com/foobar /
- <src>是一个目录,则整个目录中的内容都会被复制.
- 注意目录本身不会复制,仅复制目录中的内容
- 如果<dest>没有以斜杠结束,它会被认为一个常规文件,<src>内容会被写在<dest>中
COPY <src>... <dest>
- COPY ["<src>",... "<dest>"]
- 这种形式要求路径包含空白
COPY hom* /mydir/ # adds all files starting with "hom"
COPY hom?.txt /mydir/ # ? is replaced with any single character, e.g., "home.txt"
COPY test relativeDir/ # adds "test" to `WORKDIR`/relativeDir/
COPY test /absoluteDir/ # adds "test" to /absoluteDir/
- ENTRYPOINT ["executable", "param1", "param2"]
- 首选形式
- ENTRYPOINT command param1 param2
- shell 形式
docker run -i -t --rm -p : nginx
- docker run <image>命令行的所有参数,
- 会添加在exec形式的ENTRYPOINT中的元素之后,并将覆盖使用CMD指定的所有元素。
- docker run <image> -d argument,允许将参数传送到ENTRYPOINT
- 覆盖ENTRYPOINT 使用 docker run --entrypoint
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
- Dockerfile需要至少指定一个CMD或者ENTRYPOINT命令
- 当使用容器作为可执行文件时,应该定义ENTRYPOINT
- CMD来用作为定义ENTRYPOIN默认参数的一种途径或者
- 容器中执行ad-hoc命令
- 当运行容器并带有可变参数时CMD会被覆盖
FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
FROM busybox
ARG user1
ARG buildno ...
FROM busybox
USER ${user:-some_user}
ARG user
USER $user...
$ docker build --build-arg user=what_user Dockerfile
FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER v1.0.0
RUN echo $CONT_IMG_VER
$ docker build --build-arg CONT_IMG_VER=v2.0.1 Dockerfile
FROM ubuntu
ARG CONT_IMG_VER
RUN echo $CONT_IMG_VER
FROM ubuntu
ARG CONT_IMG_VER
RUN echo hello
FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER $CONT_IMG_VER
RUN echo $CONT_IMG_VER
- HEALTHCHECK [OPTIONS] CMD command
- 通过运行一个容器内部的命令来检测容器是否健康
- HEALTHCHECK NONE
- 关闭任何来自基础image的 健康检测
--interval=DURATION
(default:30s
)--timeout=DURATION
(default:30s
)--retries=N
(default:3
)
- 0: success
- 1: unhealthy
- 2: reserved
- 指定dockerfile位置,以及使用-t 指定image 名称
- .dockerignore file
- 排除一些不需要的文件,支持正则表达式
- 文件第一行
- # comment
- 仅是语法需要
- # comment
- 使用! 来双否定,即表示需要的文件
- *.md
- !README*.md
- 排除以.md结尾的文件,但是要包含以README开头 .md 结尾的文件。
- 主要语法
- FROM
- 设置基础image
- MAINTAINER
- 指定作者
- RUN
- 两种形式
- RUN <command>
- shell 形式,这个命令运行在一个shell中,默认shell是 /bin/sh -c
- RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
- RUN ["executable","param1","param2"]
- 执行 形式
- RUN ["echo","$HOME"]
- RUN <command>
- 执行结果在后面会被使用到
- 用户RUN指令的缓存在下一次构建期间不会自动失效。
- --no-cache,使缓存失效。
- 两种形式
- CMD
- Dockerfile中只有最后一个CMD是起作用的。
- CMD的最主要的目的就是为执行中的container提供默认参数。
- cmd,在build时不执行任何命令,但为image指定了将要执行的命令
- 主要形式
- CMD ["executable","param1","param2"]
- ENTRYPOINT
- ENTRYPOINT 允许你配置容器。如Nginx 端口号之类
- 在Dockerfile中只有最新的ENTRYPOINT会生效
- CMD & ENTRYPOINT
- 使用entrypoint exec 形式设定那些默认不改变参数和命令,
- 使用CMD设定那些可能会改变的参数。
- Dockerfile需要至少指定一个CMD或者ENTRYPOINT命令
- LABEL
- LABEL 增加元数据到image。一个LABEL是一个键值对。
- 每个LABEL都会产生一个layer,如果有很多layer的话可能会导致image不工作
- 单个image layer
- LABEL multi.label1="value1" multi.label2="value2" other="value3"
- 查看image labels
- docker inspect
- EXPOSE
- 指定容器在运行的时候监听的端口
- ENV
- 设置环境变量<key> 值为<value>
- ENV <key1>=<value> <key2>=<value>...
- ADD
- ADD命令从<src>复制文件 到 image文件系统的<dest>
- COPY
- COPY 从<src>复制新的文件或目录到容器的文件系统当中的<dest>
- VOLUME
- volume 创建一个指定名字的挂载点
- ARG
- ARG定义一个参数,使用户在使用docker build 时通过 --build-arg <varname>=<value> 传入
- ARG <name>[=<default value>]
- 注意:需要给定默认值
- FROM
Dcokerfile 参考的更多相关文章
- Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html hyper-v安装很多人没弄过,我这里介绍一下.(其他虚拟机参 ...
- ifconfig: command not found(CentOS专版,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) echo $PATH 解决方案1:先看看是不是 ...
- 参考bootstrap中的popover.js的css画消息弹框
前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
- Angularjs参考框架地址
1.Table(Grid)参考地址 https://github.com/samu/angular-table https://github.com/daniel-nagy/md-data-table ...
- iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)
这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...
- SQL 性能调优中可参考的几类Lock Wait
在我们的系统出现性能问题时,往往避不开调查各种类型 Lock Wait,如Row Lock Wait.Page Lock Wait.Page IO Latch Wait等.从中找出可能的异常等待,为性 ...
- RMAN异机恢复快速参考
应用场景:服务器A为正常运行的生产环境,需要在服务器B上部署一套相同环境做测试. 数据库环境:RHEL6.4 + Oracle 11.2.0.4.7 一. 服务器A备份数据库 1.1 在线备份(数据库 ...
- Linux平台oracle 11g单实例 安装部署配置 快速参考
1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 7 oinstall groupadd ...
随机推荐
- 我对于js注入的理解
资料:http://blog.csdn.net/gisredevelopment/article/details/41778671 js注入就是在前端利用使用js的地方 在这其中注入你写的js代码 使 ...
- PyInstaller打包python脚本
用python写的工具写好了,想打包然后发给测试同事使用,最后选择了PyInstaller,支持Windows.Linux.OS X,支持打包成一个文件夹或单个EXE文件. 我是直接在线安装的,在 ...
- python - 接口自动化测试 - TestRegister - 注册接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_register.py @ide: PyChar ...
- Android view相关与自定义View
一.关于view的机制的问答 1.gesturedetector和ontouchevent的区别 gesturedetector指的是手势检测器,根据动态手势的运动特性,提出了速率边沿检测算法来分割手 ...
- C#从大图中截取一部分图片
#region 从大图中截取一部分图片 /// <summary> /// 从大图中截取一部分图片 /// </summary> /// <param name=&quo ...
- Weixin API -- 微信js接口
今天在开发项目的时候,由于需要在微信中实现分享功能(分享成功后实现页面跳转并记录).问度娘,找了很久,终于找到一个不错的方法.收藏起来以后备用,也希望对大家有所帮助! 在github的地址:https ...
- 【Luogu】P4067储能表(数位DP)
题目链接 好的 看到这题之后我一直在想反演,然后想不出来,一度以为自己脑子有问题 然后我脑子真的有问题,这题tm根本就不是反演 设f[i][j][k][l]表示现在已经DP到从高位往低数的第i位,有没 ...
- BZOJ2657 [Zjoi2012]旅游(journey) 【树的直径】
题目 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出境口 ...
- php函数总结
1. isset($var) 变量存在且不为NULL,则返回TRUE 变量不存在或为NULL,则返回FALSE 2. empty($var) 若变量不存在或变量值为"".0.&qu ...
- Xcode 真机调试报错:This application's application-identifier entitleme
This application's application-identifier entitlement does not match that of the installed appli ...