天天看点

微服务架构从入门到精通之容器化(四) Dockerfile

     上篇文章《Docker常用命令》介绍了Docker的基本知识,接下来本章主要讲解Dockerfile。Dockerfile由一系列的指令和参数组成。每条指令都必须大写,并且后面跟随参数。

FROM ubuntu
MAINTAINER zhuxihua "[email protected]"
RUN mkdir -p /Users/zhuxihua/jdk
ADD jdk-8u112-linux-x64.tar.gz /Users/zhuxihua/jdk
COPY xxx-1.0.0.jar /Users/zhuxihua/webapp/
ENV JAVA_HOME /Users/zhuxihua/jdk/jdk1.8.0_112
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8081
CMD ["java","-jar","/Users/zhuxihua/webapp/xxx-1.0.0.jar"]
           

    Dockerfile中的指令按顺序从上往下执行。Docker从基础镜像ubuntu运行一个容器,执行一条指令并修改容器提交一个新的镜像层,基于此镜像层在运行一个新的容器执行Dockerfile中的下一条指令,直到所有指令都执行完毕

当镜像构建完成后,Docker删除了很多临时的容器。

  • RUN指令:默认情况下,RUN指令会在shell里使用命令包装器/bin/sh -c 来执行。也可以用exec格式的RUN指令,如RUN ["mkdir","-p","/

    Users/zhuxihua

    /jdk"]
  • ADD指令:ADD指令用来构建环境下的文件和目录复制到镜像中,它在复制的同时进行解压,合法的文件格式有gzip、bzip2、xz源文件,同时还迟滞通过URL的方式下载后在复制到指定的目录。
  • COPY指令:copy指令非常类似ADD,不同是COPY只关心在构建上下文复制本地文件,而不会做提取和解压文件。
  • ENV指令:ENV指令用来在镜像构建过程中设置环境变量,
    ENV JAVA_HOME /Users/zhuxihua/jdk/jdk1.8.0_112
    ENV PATH $PATH:$JAVA_HOME/bin
               

实际上就是设置了JAVA_HOME

  • EXPOSE指令:这条指令告诉Docker该容器内的应用程序将会使用容器指定端口。但是这并不意味可以自动访问该端口,而是需要在docker run时指定映射的端口,类似于
docker run -d -p 8080:8080 –name xxx
           

      如果不指定-p 8080:8080,实际上你通过端口8080端口是访问不到的。

  • CMD指令:CMD指令用于指定一个容器启动时要运行的命令,有点类似于RUN指令,只是RUN指令是构建镜像的时要运行的指令,CMD是镜像构建后要运行的指令。

继续阅读