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 裏面的語法和語法的使用場景

相關文章
相關標籤/搜索