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 ...
随机推荐
- Asp.net自定义控件开发任我行(6)-嵌入资源下
摘要 上一章,我们讲了嵌入.css文件,这一章,我们来讲一下嵌入.js文件,也顺带一个嵌入Image文件 内容 我们前面的几章,一运行,下拉框就显示出来了,但是DropDwonList的下拉框是被隐藏 ...
- leetcode 【 Best Time to Buy and Sell Stock III 】python 实现
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- pycharm许可证过期
1.选择enter license 2.选择license server 3.输入http://idea.imsxm.com 4.点击ok 好,解决了
- python小脚本(18-11.10)-修改excle后批量生成,作用:导入数据时,系统做了不能导入重复数据时的限制时使用 -本来是小白,大神勿扰
from testcase.test_mokuai.operation_excle import OperationExcleimport shutil class test_daoru(): #一个 ...
- Leetcode 648.单词替换
单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other(其他),可 ...
- java-dispose方法
今天在编一道JAVA例题时,看到 dispose 这个方法,在程序中是用来关闭一个GUI页面的.这也让我想到了setVisible(false)方法.在网上查了意思,dispose()即释放所有本机屏 ...
- 【转】Unity3d中制作Loading场景进度条所遇到的问题 LoadLevelAsync,AsyncOperation
背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长.为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景.因为Loading场景包含的资源较少,所以 ...
- Codeforces Round #364 (Div. 2) C 二分处理+求区间不同字符的个数 尺取法
C. They Are Everywhere time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- lcx 端口转发
1.查看3389端口开放情况: REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStati ...
- jspspy database help
.