5、Dockerfile
作者:互联网
1、Dockerfile常用指令
FROM
指定构建新镜像时使用的基础镜像
MAINTAINER
作者的信息
ADD
将宿主机目录下的文件拷贝进镜像,且会自动处理URL和解压tar压缩包
COPY
功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。同样需求下,官方推荐使用 COPY
LABEL
用于为镜像添加元数据
ENV
设置环境变量
EXPOSE
指定于外界交互的端口
VOLUME
用于指定持久化目录(指定此目录可以被挂载出去)
WORKDIR
工作目录,类似于cd命令。设置了工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等都会在该目录下执行。
USER
指定运行容器时的用户名或 UID
ARG
定义构建镜像时的变量,相当于构建镜像时可以在外部为里面传参
ONBUILD
用于设置镜像触发器
格式:
ONBUILD [INSTRUCTION]
示例:
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
注:
NNBUID后面跟指令,当当前的镜像被用做其它镜像的基础镜像,该镜像中的触发器将会被钥触发
RUN
镜像构建【docker build】时执行的命令。如果有多个RUN,自上而下依次运行
CMD
容器启动【docker run】时执行的命令。如果有多个CMD,只有最后一个运行。
当使用docker run命令的时候,可以在整个 docker 命令的【最后】加上其他额外的命令,那么额外的命令会覆盖Dockerfile中所有的CMD命令,
例如我们执行如下命令:【docker run -it centos ls / -l】,【ls / -l】会覆盖Dockerfile中所有的CMD命令。
ENTRYPOINT
功能类似CMD,如果有多个Entrypoint,只有最后一个运行。如果CMD和ENTRYPOINT共存,则只有ENTRYPOINT运行,且最后的CMD会被当做ENTRYPOINT的参数。
例一:
Dockerfile:
FROM centos
MAINTAINER zhengjingmao@163.com
RUN mkdir -p /datas/
ENTRYPOINT ["echo", "hello"]
CMD ["world"] #会将world作为echo hello的参数,最后的命令其实为echo hello world
例二:
Dockerfile:
FROM centos
MAINTAINER zhengjingmao@163.com
RUN mkdir -p /datas/
ENTRYPOINT ["echo", "hello"]
执行启动命令:
docker run -it my-centos word
命令最后面的 word 会作为 Dockerfile ["echo", "hello"] 中的参数,最终形成的命令为 ["echo", "hello", "word"]
2、制作镜像
如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
如果有多个CMD,只有最后一个运行
如果有多个Entrypoint,只有最后一个运行
如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数
构建镜像命令: docker build -f /path/Dockerfile
docker build . # "."表示当前目录
build并不是在本地构建,而是在docker引擎中构建的。
实际上Dockerfile的文件名并不要求必须为 Dockerfile,而且并不要求必须位于上下文目录中,
比如可以用 -f …/Dockerfile 参数指定某个文件作为 Dockerfile。当然,一般大家习惯性的会使用默认的文件名Dockerfile,以及会将其置于镜像构建上下文目录中。
【docker build -t nginx:v3 .】
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:
由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。
这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
标签:CMD,命令,ENTRYPOINT,镜像,docker,Dockerfile 来源: https://www.cnblogs.com/sunhao1234/p/16395773.html