常用指令
FROM
基础镜像
例子:FROM centos:7
LABEL
描述信息
例子:LABEL verision=“1.0" author=“tbc"
MAINTAINER
维护者信息
例子:MAINTAINER tianbocheng <tianbocheng@teleinfo.cn>
RUN
执行命令,创建新的Image Layer
例子:RUN yum install -y vim && chmod +x /home/start.sh
建议多行命令使用”&&“和”\”放到一个RUN命令中,减少分层
WORKDIR
设定当前目录(如果没有会自动创建)
例子:WORKDIR /home/tbc
备注:
建议使用绝对目录
目录切换尽量使用WORKDIR,不建议使用RUN cd
ADD
添加文件到镜像中
例子:ADD test.tar.gz /home/tbc/
注意:除添加文件还会解压文件
COPY
添加文件到镜像中
例子:COPY run.sh /home/tbc/
备注:
大部分情况优于ADD
添加远程文件可以通过RUN curl或RUN wget
ARG
构建参数
例子:ARG VERSION=“1.0"
备注:与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效
ENV
设置环境变量
例子:
ENV MYSQL_VERSION=5.7
ENV myName John Doe
备注:
可在Dockerfile中使用${MYSQL_VERSION}引用常量
一次只能设置一个变量
CMD
设置容器启动时默认执行的命令和参数
例子:CMD echo “hello docker”
备注:
如果docker run指定了其他命令,CMD命令被忽略
如果定义了多个CMD,只有最后一个会执行
ENTRYPOINT
设置容器启动时运行的命令
例子:ENTRYPOINT [“docker-entrypoint.sh"]
备注
让容器以程序或者服务的形式运行
不会被忽略,一定会运行
最佳实践:写一个shell脚本作为entrypoint
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
例子:
VOLUME [“/home", “/data”]
VOLUME /home
备注:
避免容器不断变大
避免重要的数据,因容器重启而丢失
EXPOSE
声明端口
例子:
EXPOSE 80 443
EXPOSE 3306
EXPOSE 11211/tcp 11211/udp
备注:
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
例子:
HEALTHCHECK --interval=5s --timeout=3s \ CMD curl -fs http://127.0.0.1:8080/ || exit 1
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
ONBUILD
延迟构建命令的执行
例子:
ONBUILD ehco “tbc"
ONBUILD ADD run.sh /home
备注:
Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当
当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
RUN,CMD,ENTRYPOINT常用格式
- Shell(读取环境变量)
- RUN apt-get install -y vim
- CMD echo “hello $name” // 会将变量替换,,即打印出环境变量name的值
- ENTRYPOINT echo “tbc"
- Exec
- RUN [“apt-get”, “install”, “-y”, “vim"]
- CMD [“/bin/echo”, “hello $name”] // 不会将变量替换,即打印$name
- ENTRYPOINT [“/bin/bash”, “-c”, “echo hello $name”] // 会将变量替换,即打印出环境变量name的值
常见样例
# Version 0.0.1
FROM centos:7
# 作者
MAINTAINER tianbocheng <tianbocheng@teleinfo.cn>
# LABEL version=“1.0” description=“二级-IDIS-注册服务”
# 环境变量
ENV NODE=5.7
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 加入部署文件
ADD idis/ /home/
# 设置工作目录
WORKDIR /home
# 初始化
RUN echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf
# 安装rpm包
RUN rpm -ivh *.rpm
# 获取执行权限
RUN chmod +x /home/DigestTool && chmod +x /home/start.sh && chmod +x /usr/local/idisapi/bin/runApi.sh
# 移除安装包
RUN rm -rf /home/*.rpm
# 镜像启动执行脚本
ENTRYPOINT ["/home/start.sh"]