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 ...
随机推荐
- load_file()与into outfile函数详解
load_file()函数的使用: 1.使用条件 ①有读取文件的权限 r and (select count(*) from mysql.user)>0 如果返回正常则说明有权限,反之没有 ②文 ...
- Map 中的EntrySet() ,Map的遍历
我们循环Map时一般用到EntrySet(),EntrySet() 返回的时Set集合(Set<Map.Entry<K, V>>). 那么这里的有Map.Entry< ...
- Codeforces Round #418 (Div. 2) A+B+C!
终判才知道自己失了智.本场据说是chinese专场,可是请允许我吐槽一下题意! A. An abandoned sentiment from past shabi贪心手残for循环边界写错了竟然还过了 ...
- java 例子
1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一个重要的命令javac ...
- order by 对null的处理
[Oracle 结论] order by colum asc 时,null默认被放在最后order by colum desc 时,null默认被放在最前nulls first 时,强制null放在最 ...
- BZOJ-1043 [HAOI2008]下落的圆盘
几何题... 先把所有圆储存起来,然后对于每个圆我们求得之后放下的圆挡住了的部分,求个并集,并把没被挡到的周长加进答案. #include <cstdlib> #include <c ...
- BZOJ 4561 [JLoi2016]圆的异或并 ——扫描线
扫描线的应用. 扫描线就是用数据结构维护一个相对的顺序不变,带修改的东西. 通常只用于一次询问的情况. 抽象的看做一条垂直于x轴直线从左向右扫过去. 这道题目要求求出所有圆的异或并. 所以我们可以求出 ...
- bzoj 合集 1079 1791 1876 2208 2306
1079 记忆化瞎搞吧,[a][b][c][d][e][l]表示当前有能涂1次的油漆a个,能涂2次的b个….前一个颜色为l,再搞下转移就行了. 1791 基环树上找直径 1876 高精度 2208 看 ...
- jquery 实践操作:iframe 相关操作
此篇记录关于HTML 的 iframe 元素 的相关记录 定义:iframe 元素会创建包含另外一个文档的内联框架(即行内框架). 常用的基本 iframe 设置(详细设置属性参考API:http:/ ...
- 【14】vuex2.0 之 mutation 和 action
我们的项目非常简单,当点击+1按钮的时候,count 加1,点击-1按钮的时候,count 减1. 1, mutation The only way to actually change state ...