认识dockerfile
dockerfile结构大致分为四部
1、基础镜像信息
2、维护者信息
3、镜像操作指令
4、镜像启动时执行的命令
一、dockerfile常用命令
1、FROM:指明构建容器的基础镜像
FROM centos:7
2、MAINTAINER:指明镜像的维护者(创建者)
MAINTAINER fengzhilaoling 邮箱地址
也可以使用LABEL指定作者
LABEL maintainer="fengzhilaoling"
3、RUN:构建镜像是运行的shell命令
RUN yum -y install httpd
4、CMD:启动容器时执行的命令
CMD ["/usr/sbin/sshd",""-D] CMD /usr/sbin/sshd -D
5、EXPOSE:声明容器运行的服务端口
EXPOSE 80 443
6、EVN:设置环境内环境变量
ENV JAVA_HOME /usr/local/jdk1.8
7、ADD:拷贝文件或目录到镜像中
ADD /opt/index.html /var/www/html
8、COPY:拷贝文件或目录到镜像中,用法与ADD相同,但不支持自动下载和解压
COPY ./start.sh /start.sh
9、ENTRYPOINT:启动容器时执行的shell命令,同CMD类似,不会这些命令行被docker run 指定的命令行所覆盖,而且,这些命令行参数会被当做参数传递给ENTRYPOINT指定指定指定的程序
ENTRYPOINT /bin/bash -C '/start.sh' ENTRYPOINT ["/bin/bash","-C","/start.sh"]
注意:dockerfile中可以存在多个ENTRYPOINT指令,但仅有最后一个会生效
10、VOLUME:指定目录容器挂载点到宿主机自动生成的目录或其他容器
VOLUME ["var/lib/mysql"]
注意:一般不会在dockerfile中用到,更常见的时在docker run -v的时候指定数据卷
11、user:为RUN、CMD、ENTRUPOINT执行shell命令指定运行用户
USER root
12、WORKDIR:为RUN、CMD、COPY、AND设置工作目录
WORKDIR /data
13、HEALTHCHECK:告诉docker如何测试容器以检查它是否仍在工作
HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://localhost/ || exit 1 --interval=5m :每个多长时间探测一次,默认30s --timeout=3s:服务响应超时时长,默认30s --start-period=3s:服务启动多久后开始探测,默认0秒 --retries=3:认为检测失败几次为宕机,默认3次 一些返回值说明: 0:容器成功是健康的,随时可以使用 1:不健康的容器无法正常工作 2:保留不使用此退出代码
14、ARG:构建镜像时,指定一些参数
FROM centos:7 ARG user USER $user 在使用docker build时可以带上自定义参数user了 docker build --build-arg user=root Dockerfile
二、dockerfile案例
mkdir soft #上传所需要的安装包 cd soft ls apache-tomcat-8.5.51.tar.gz OpenJDK8U-jdk_x64_linux_openj9_8u242b08_openj9-0.18.1.tar.gz #编写Dockerfile文件 vim Dockerfile FROM centos:latest #指定基础镜像 MAINTAINER fengzhilaoling #作者 USER root #命令执行用户 ADD OpenJDK8U-jdk_x64_linux_openj9_8u242b08_openj9-0.18.1.tar.gz /usr/local/ #从宿主机拷贝安装包到容器 ADD apache-tomcat-8.5.51.tar.gz /usr/local #从宿主机拷贝安装包到容器 WORKDIR /usr/local #切换工作目录 RUN mv apache-tomcat* tomcat8 #将Tomcat的目录更改名称 ENV JAVA_HOME=/usr/local/jdk8u242-b08 PATH=$PATH:JAVA_HOME/bin #设置JAVA_HOME的环境变量 ADD tomcat_start.sh ./ #将脚本拷贝到当前工作目录 也就是WORKDIR /usr/local 切换到的目录 RUN chmod +x ./tomcat_start.sh #给脚本加执行权限 EXPOSE 8080 #设置服务的端口 ENTRYPOINT /usr/local/tomcat_start.sh #启动服务脚本 #编写Tomcat启动脚本 tomcat_start.sh #!/bin/bash /usr/local/tomcat8/bin/startup.sh #在当前目录下执行docker build docker build -t="tomcat:v1.2" . -t:指定创建镜像的名称 .:表示使用当前目录下的Dockerfile 进行镜像创建 #创建完成查看 docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat v1.0 ef3e559278fa 49 minutes ago 500MB tomcat v1.2 ef3e559278fa 49 minutes ago 500MB nginx latest 6678c7c2e56c 7 days ago 127MB centos latest 470671670cac 7 weeks ago 237MB