Dockfile語法講解
阿新 • • 發佈:2018-12-11
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目錄的檔案都將會出現在容器內