Dockerfile 语法梳理及最佳实践

FROMpython

  • FROM scratch #制做base image
  • FROM centos #使用base image
  • FROM ubuntu:14.04

FROM 是Dockerfile 最开头的关键字,它制定了咱们要Build 的Docker image 的Base image 是什么,就是咱们想在哪一个image 之上去Build 咱们的image ,如最开始的 Hello-world,它没有依赖任何Base image ,这样的话咱们就选FROM scratch ,从头制做一个Base image ,更多的状况是使用已有的Base image,好比说官方的centos 的已有的Base image ,而后FROM centos ,这样的话能够在centos 的基础之上去Build image,一样也能够选择一些其余的Linux 发行版,如:ubntumysql

FROM 尽可能使用官方的image 做为base image ->为了安全sql

LABEL ubuntu

  • LABEL maintainer="xxxx@xxx.com"
  • LABEL version="1.0"
  • LABLE description="This is description"

LABEL 这个语法在Dockerfile 里面定义了咱们的image Metadatavim

对于LABEL 来说 Metadata 不可少!->对于image来说它必须有一些帮助信息,就像咱们日常了解的注释同样centos

RUN安全

  • RUN yum update && yum install -y vim \

python-dev # 反斜线换行                                                       bash

  • RUN apt-get update && apt-get install -y perl \

pwgen --no-install-recommends && rm -rf \                      网络

/var/lib/apt/lists/*   #注意清理 cache                                     curl

  • RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'

咱们每RUN 一次,对image 来说都会生成新的一层

RUN 为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!

WORKDIR

  • WORKDIR /root
  • WORKDIR /test # 若是没有会自动建立test 目录
  • WORKDIR demo
  • RUN pwd # 输出结果应该是 /test/demo

WORKDIR 是设定当前公公目录的,有点像Linux 中使用cd 改变当前目录位置

WORKDIR 用WORKDIR,不要用 RUN cd!尽可能使用绝对目录!

ADD and COPY

  • ADD hello /
  • ADD test.tar.gz / # 添加到根目录并解压
  • WORKDIR /root

ADD hello test/ # /root/test/hello                                                           

  • WORKDIR /root

COPY hello test/                                                                                     

ADD 和 COPY 很是像,都是经过把本地的文件添加到Docker image 里面

ADD or COPY 大部分状况,COPY优于ADD!ADD除了COPY还有额外功能(解压)!添加远程文件/目录请使用curl或者wget!

ENV

  • ENV MYSQL_VERSION 5.6  # 设置常量
  • RUN apt-get install -y mysql-server= "${MYSQL_VERSION}" \

&& rm -rf /var/lib/apt/lists/*  # 引用常量                              

ENV 尽可能使用 ENV 增长可维护性!

VOLUME and EXPOSE (存储和网络)

CMD and ENTRYPOINT 

要想对Dockerfile 有更加深刻的了解能够搜索Dcokerfile reference 官网,里面详细的描述了Dockerfile 里面的语法和语法的使用场景

相关文章
相关标签/搜索