Docker学习八:Dockerfile

       Dockerfile是一个文本格式的配置文件,可以使用Dockerfile快速创建自定义的镜像。其实就是配置好linux能够执行的相关命令,然后通过docker build命令来构建镜像。

       Dockerfile由一行行命令组成,用#来进行注释。一般包括四个部分:基础镜像、维护者信息、镜像操作指令和容器启动时执行指令。


       分享搭建centos7 + jdk + tomcat环境的Dockerfile,其中jdk和tomcat是已经下载好的tar包,也可以直接用命令下载jdk和tomcat:

# VERSION 1.0
# 默认centos server长期支持版本,当前是7
FROM centos:centos7 
# 签名
MAINTAINER lin521lh "592332624@qq.com"

#安装JDK
#创建jdk目录
RUN mkdir /var/tmp/jdk1.7.0_79
#把当前目录下的jdk文件夹添加到镜像
ADD /java/jdk1.7.0_79 /var/tmp/jdk1.7.0_79
#RUN tar zxvf jdk7u79linuxx64.tar.gz -C /var/tmp/jdk1.7.0_79
#RUN rm -rf /opt/software/jdk7u79linuxx64.tar.gz

#安装tomcat
#创建tomcat目录
RUN mkdir /var/tmp/apache-tomcat-7.0.82
#把当前目录下的tomcat文件夹添加到镜像
ADD /java/apache-tomcat-7.0.82 /var/tmp/apache-tomcat-7.0.82
#RUN tar zxvf /opt/software/apache-tomcat-7.0.82.tar.gz -C /var/tmp/apache-tomcat-7.0.82
#RUN rm -rf /opt/software/apache-tomcat-7.0.82.tar.gz

#设置环境变量
ENV JAVA_HOME /var/tmp/jdk1.7.0_79
ENV CATALINA_HOME /var/tmp/apache-tomcat-7.0.82
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

#向容器中安装中文编码支持
RUN  yum -y install kde-l10n-Chinese telnet && \
         yum -y reinstall glibc-common &&\
              yum clean all  && \
                localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 
        
#设置容器编码格式        
ENV LC_ALL "zh_CN.UTF-8"  

#开启tomcat 8080端口
EXPOSE 8080

#启动tomcat服务
CMD ["./var/tmp/apache-tomcat-7.0.82/bin/catalina.sh","run"]
       Dockerfile文件创建好之后,可以在此文件目录下执行以下命令,来创建镜像文件:

docker build -t centos-jdk7-tomcat7:0.0.1 --rm=true .

指令

       指令的一般格式为INSTRUCTION arguments。

       1、FROM

       格式为FROM <image>或FROM <image> : <tag>。第一条指令必须是FROM指令。同一个Dockerfile中创建多个镜像时可以使用多个FROM指令。


      2、MAINTAINER

      格式为MAINTAINER  <name>,指定维护者信息。


       3、RUN

      格式为RUN  <command>或 RUN  ["executable", "param1","param2"]。RUN  <command>在shell终端中运行命令,即/bin/sh -c;后边在exec执行。每条RUN指令在当前镜像上执行指定命令,并提交为新的镜像。命令长的时候可以用\来换行。


      4、CMD

      CMD ["executable", "param1","param2"]使用exec执行,一般使用该方法;

      CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用;

      CMD ["param1","param2"]提供给ENTRYPOINT的默认参数;

      指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果有多条命令,只有最后一条会被执行。

       启动容器时指定了运行的命令,则会覆盖CMD指定的命令。


      5、EXPOSE

       格式为EXPOSE  <port> [<port> ...]。容器向宿主机暴露的端口号。


      6、ENV

       格式为ENV <key> <value>。指定环境变量,会被后续RUN指令只用,并在容器中保持运行。


      7、ADD

       格式为ADD<src> <dest>。复制指定的<src>容器中的<dest><src>是Dockerfile所在宿主机目录的一个相对路径(文件和目录都可以);也可以是一个URL;或者tar文件(自动解压为目录)。


      8、COPY

       格式为COPY<src> <dest>。复制宿主机的<src>到容器中的<dest>,不存在的时候回自动创建。使用本地目录为源目录时可以使用。


      9、ENTRYPOINT

      ENTRYPOINT["executable", "param1", "param2"]

       ENTRYPOINT command param1 param2(shell中执行)。

       容器启动后执行的命令,并且不会被docker run提供的参数覆盖。每个Dockerfile只能有一条ENTRYPOINT命令。如果有多条ENTRYPOINT时,只有最后一条会被执行。


      10、VOLUME

       格式为VOLUME ["/data"]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据。


       11、USER

       格式为USER daemon。指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。当服务不需要管理员权限时,可以用该命令来指定运行用户。并且可以在之前创建所需要的用户。临时取得管理员权限使用gosu。


       12、WORKDIR

       格式为WORKDIR  /path/to/workdir。为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR命令。


      13、ONBUILD

       格式为ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令。


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值