1、什么是Dockerfile
Dockerfile是建立自定义Docker镜像的描述文件,咱们能够在Dockerfile中写出一条条指令来控制镜像须要执行什么操做,下面具体讲讲Dockerfile中的指令。mysql
2、Dockerfile四大功能分区
1. 基础镜像
声明自定义镜像的基础镜像git
FROM centos
2. 描述信息
此处能够声明镜像的负责人、版本、构建时间、描述等一系列信息,此处能够声明任何信息sql
LABEL maintainer=tingtiandadi@360.cn LABEL version="1.0" LABEL date="2020/03/08" LABEL description="RPM软件包制做"
3. 安装镜像执行指令
3.1 USER
执行Dockerfile中shell指令时指定的用户,包括:RUN、CMD、ENTRYPOINTdocker
USER <user>[:<usergroup>] USER root
3.2 EXPOSE
指定容器运行时的服务端口shell
EXPOSE 80 443
3.3 WORKDIR
为Dockerfile中执行的指令设置工做目录,包括:ADD、COPY、RUN、CMD、ENTRYPOINTcentos
WORKDIR /root
3.4 ADD
拷贝文件/目录到镜像中ssh
ADD <src>...<dest> ADD rpmbuild.tar.gz /root/ ADD https://xxx.com/rpmbuild.tar.gz /root/
3.5 COPY
拷贝文件/目录到镜像中,用法与ADD相同,可是不支持自动下载和解压curl
ADD /home/mysql_cron /etc/cron.d/
3.6 VOLUME
把主机的目录挂载到docker中,相似nfs文件共享,通常不多用,大多在docker run中用-v来进行挂载ui
VOLUME ["/usr/local/"]
3.7 ARG
在构建镜像时指定的参数url
ARG user USER $user
只须要在docker build时带上user参数便可
docker build --build-arg user=root -f dockerfile_rpmbuild .
3.8 RUN
构建镜像时运行的指令
RUN ["yum", "install", "net-tools", "-y"] RUN yum install net-tools -y
3.9 ENV
设置当前系统内环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_231
3.10 HEALTHCHECK
检查容器是否在仍在工做
HEALTHCHECK --interval=5m --timeout=3s --retries=3 \ CMD curl -f http:/localhost/ || exit 1
- 选项说明:
--interval=DURATION (default: 30s):每隔多长时间探测一次,默认30秒
-- timeout= DURATION (default: 30s):服务响应超时时长,默认30秒
--start-period= DURATION (default: 0s):服务启动多久后开始探测,默认0秒
--retries=N (default: 3):认为检测失败几回为宕机,默认3次
- 返回值说明:
0:容器成功是健康的,随时能够使用
1:不健康的容器没法正常工做
2:保留不使用此退出代码
4. 容器启动执行指令
4.1 CMD方式
能够编辑多条,每条指令按顺序执行。
CMD ["-C", "/start.sh"] CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd -D
4.2 ENTRYPOINT方式
同CMD相似,但这种方式执行的命令不会被docker run执行的参数所覆盖,同时docker run执行的参数会传到此方式执行的脚本中。
ENTRYPOINT [ "rpmbuild", "-bb" , "/root/rpmbuild/SPEC/mysql-install.spec"] ENTRYPOINT [ "dpkg", "-b", "mysql-install", "mysql-install.deb"]
重要提示:ENTRYPOINT能够有多行,可是执行时只有最后一行生效,切记!
3、Dockerfile实例
# 基础镜像 FROM centos # 描述信息 LABEL maintainer=tingtiandadi@360.cn LABEL version="1.0" LABEL date="2020/03/08" LABEL description="RPM软件包制做" # 安装镜像执行指令 WORKDIR /root USER root RUN rpm -ivh net-tools-2.0-0.51.20160912git.el8.x86_64.rpm RUN yum install rpm-build-4.14.2-25.el8.x86_64 -y # 启动容器执行指令 ENTRYPOINT [ "rpmbuild", "-bb", "rpmbuild/SPEC/*.spec"]