1. 程式人生 > >Dockfile語法講解

Dockfile語法講解

FROM
FROM scratch  #製作base image
FROM centos   #使用base image
FROM ubuntu:14.04
LABEL

定義容器的Metadata

LABEL maintainer="[email protected]"
LABEL version="1.0"
LABEL description="This is description"
RUN

執行一些命令,每呼叫RUN一次,就會增加一層分層,為了避免無用分層,合併多條命令成一行

RUN yun update && yun install -y vim \
	python-dev  #\換行
WORKDIR

設定當前工作目錄

WORKDIR /test
WORKDIR demo
RUN pwd    #輸出/test/demo

用WORKDIR,不要用RUN cd ,儘量使用絕對目錄

ADD and COPY

把本地檔案新增到image裡

ADD hello /

ADD test.tar.gz /  #新增到根目錄並解壓

WORKDIR /root
ADD hello test/   # /root/test/hello

WORKDIR /root
COPY hello test/

大部分情況,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/list/*
RUN & CMD & ENTRYPOINT

RUN : 執行命令並建立新的image Layer
CMD : 設定容器啟動後預設執行的命令和引數,如果docker run指定了其他命令,CMD 命令會被忽略,如果定義了多個CMD,只有最後一個會執行
ENTRYPOINT : 設定容器啟動時執行的命令,讓應用程式或者服務的形式執行,不會被忽略,一定會執行

EXPOSE

暴露埠號

EXPOSE 5000   #暴露5000埠  
VOLUME

資料持久化

VOLUME "/var/lib/mysql"  #將容器中/var/lib/mysql路徑下的檔案持久化到本地主機

還有另一件只有-v引數能夠做到而Dockerfile是做不到的事情就是在容器上掛載指定的主機目錄

$ docker run -v /home/adrian/data:/data debian ls /data

該命令將掛載主機的/home/adrian/data目錄到容器內的/data目錄上。任何在/home/adrian/data目錄的檔案都將會出現在容器內