【Docker】Dockerfile指令
来源:互联网 发布:python机器人编程书籍 编辑:程序博客网 时间:2024/05/18 05:12
Dockerfile的全部指令清单可以到Dockerfile reference访问
FROM
每个Dockerfile的第一条指令必须是FROM
FROM指令指定一个已经存在的镜像,后续指令都将基于该镜像进行,这个镜像被称为基础镜像(base image)
FROM <image> [AS <name>]或者FROM <image>[:<tag>] [AS <name>]或者FROM <image>[@<digest>] [AS <name>]
MAINTAINER
MAINTAINER指令会设置该镜像的作者
MAINTAINER <name>
RUN
RUN指令会在当前镜像中运行指定的命令
RUN <command>
默认情况下,RUN指令会在Linux的shell里使用命令包装器/bin/sh -c
来执行,或者Windows的cmd /S /C
如果是在一个不支持shell的平台上运行或者不希望在shell中运行(比如避免shell字符串篡改),也可以使用exec
格式的RUN指令
RUN ["executable", "param1", "param2"]
在shell中,可以使用\
来将指令分开写在不同行上
RUN /bin/bash -c 'source $HOME/.bashrc; \echo $HOME'
和这条指令等价
RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
如果要使用不同的shell,可以使用exec格式的RUN指令
RUN ["/bin/bash", "-c", "echo hello"]
exec
格式的命令会被解析为JSON格式的数据,所以只能只用双引号,不能使用单引号
EXPORT
EXPORT指令告诉Docker该容器内的应用将会使用容器的指定端口
EXPOSE <port> [<port>...]
CMD
CMD指令用于指定一个容器启动时要运行的命令,主要有三种格式
exec
格式的CMD是优选的
CMD ["executable","param1","param2"]
作为ENTRYPOINT的默认参数
CMD ["param1","param2"]
shell格式
CMD command param1 param2
Dockerfile里只能有一条CMD命令,如果有多条,那么只有最后一条CMD命令会起作用
使用docker run
命令可以覆盖CMD指令
ENTRYPOINT
docker run
命令中的任何参数都会被当作参数再次传递给ENTRYPOINT指令中指定的命令,主要有两种格式
exec格式是优选的
ENTRYPOINT ["executable", "param1", "param2"]
shell格式
ENTRYPOINT command param1 param2
可以使用CMD和ENTRYPOINT指令来使镜像运行一个默认的命令,同时也支持通过docker run
命令指定可覆盖的选项或者标志
FROM ubuntuENTRYPOINT ["top", "-b"]CMD ["-c"]
WORKDIR
WORKDIR指令用来从镜像创建一个新容器时,在容器内部设置一个工作目录,RUN,CMD,ENTRYPOINT,COPY和ADD指令会在这个目录下执行
WORKDIR /path/to/workdir
可以通过-w
标志在运行时覆盖工作目录
sudo docker run -it -w /var/log ubuntu
ENV
ENV指令用来在镜像构建过程中设置环境变量
ENV <key> <value>ENV <key>=<value> ...
这个新的环境变量可以在后续的任何RUN指令中使用
也可以使用-e
标志来传递环境变量,这些变量将只会在运行时有效
sudo docker run -it -e "WEB_PORT=8080" ubuntu
USER
USER指令用来指定该镜像会以什么样的用户去运行
USER <user>[:<group>]或者USER <UID>[:<GID>]
如果不通过USER指令指定用户,默认用户为root
VOLUME
VOLUME指令用来向镜像创建的容器添加卷
VOLUME ["/data","/opt/project"]
ADD
ADD指令用来将构建环境下的文件和目录复制到镜像中
指向源文件的位置参数可以是一个URL,或者构建上下文或环境中的文件名或目录
如果目的位置不存在,Docker会创建这个全路径
ADD <src>... <dest>
如果要在路径中包含空格
ADD ["<src>",... "<dest>"]
在ADD文件时,Docker通过目的地址参数末尾的字符来判断文件源是目录还是文件。如果目标地址以/
结尾,那么指向的是一个目录。否则就是文件
如果将一个归档文件(gzip、bzip2、xz)指定为源文件,Docker会自动将归档文件解开(unpack)
ADD latest.tar.gz /var/www/wordpress/
COPY
COPY指令非常类似于ADD,它们的不同在于COPY只关心构建上下文中复制本地文件,而不会做文件提取(extraction)和解压(decompression)的工作
COPY <src>... <dest>
如果要在路径中包含空格
COPY ["<src>",... "<dest>"]
文件源路劲必须是一个与当前构建环境相对的文件或者目录,本地文件都放在和Dockerfile同一个目录下
COPY指令的目的位置必须是容器内部的一个绝对路径
LABEL
LABEL指令用于为Docker镜像添加元数据。元数据以键值对的形式展现
LABEL <key>=<value> <key>=<value> <key>=<value> ...
STOPSIGNAL
STOPSIGNAL指令用来设置停止容器时发送什么系统调用信号给容器,这个信号必须是内核系统调用表中合法的数
STOPSIGNAL signal
ARG
ARG指令用来定义可以在docker build
命令运行时传递给构建运行时的变量
ARG <name>[=<default value>]
可以在构建时使用--build-arg
标志即可
ONBUILD
ONBUILD指令能为镜像添加触发器(trigger)
ONBUILD [INSTRUCTION]
触发器会在构建过程中插入新指令,可以认为这些指令是紧跟在FROM之后指定的,触发器可以是任何构建指令
- Docker DockerFile指令
- 【Docker】Dockerfile指令
- Docker -- dockerFile指令说明
- Docker学习笔记4.2-Dockerfile指令详述
- docker学习笔记(五): Dockerfile指令
- docker筑基篇-05-Dockerfile常用指令
- 12 - Dockerfile指令集(Docker系列)
- docker学习之常用Dockerfile指令
- docker--dockerfile
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Docker学习文档之三 其他相关-Dockerfile指令
- Docker的基本命令和Dockerfile的指令
- docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍
- Dockerfile指令
- Dockerfile指令
- Dockerfile指令
- Docker Dockerfile详解
- Docker Dockerfile详解
- Gradle 安装
- ThreadLocal原理与应用详解(2)
- 中断线程化的注册
- 2.1 借助 Intent 让 Activity 拿着数据瞬间移动
- 初探Promise
- 【Docker】Dockerfile指令
- 检索的页面的虚拟空间信息
- 线程池shutdown初认识
- Good Bye.
- 全面理解Java内存模型
- python tornade 表单和模板
- Spring00_准备
- java移位操作符详解
- Windows下如何启动oracle的服务以及监听