閱讀312 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Docker基礎之十一: 鏡像操作(Dockerfile)

Docker鏡像(Dockerfile)

對Docker感興趣的朋友可以加我的微信ghostcloud2016,然後我把你加到我們的一個Docker愛好者群組裏麵。

https://docs.docker.com/engine/reference/builder/

Docker可以通過Dockerfile的指令來編譯Image,Dockerfile的主要好處是可以通過極少的空間來動態構建一個鏡像,但是對國內用戶而言,通常是比較通過的,因為下載國外的資源都比較慢。

1 Dockerfile 參考手冊

1.1 如何使用

建立了Dockerfile之後,進入到所在目錄,然後執行docker build.

通過-f選項,可以指定 Dockerfile:

$ docker build -f /path/to/a/Dockerfile .

通過-t選項可以為鏡像添加一個tag:

$ docker build -t shykes/myapp .

build過程中,會一條一條的執行語句,比如:

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 0 : FROM alpine:3.2
 ---> 31f630c65071
Step 1 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 2 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \& wait/' | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

1.2 Dockerfile格式

# Comment
INSTRUCTION arguments

指令是不區分大小寫的,不過一般都使用大寫來區分指令和參數。Dockerfile的第一句指令,必須是'FROM',這個後麵緊跟的是基礎鏡像名稱。#可以用來注釋。

1.3 環境變量替換指令

環境變量指令是ENV,這個類似於編程語言的變量,隻能在Dockerfile中使用。例如:

FROM busybox
ENV foo /bar
WORKDIR ${foo}   # WORKDIR /bar
ADD . $foo       # ADD . /bar
COPY \$foo /quux # COPY $foo /quux

其中支持變量應用的指令包括:

ADD
COPY
ENV
EXPOSE
LABEL
USER
WORKDIR
VOLUME
STOPSIGNAL
ONBUILD

1.4 dockerignoe file

如果你的編譯目錄下有一些文件是不需要打包進Image的,你可以使用該文件進行過濾。重要涉及的指令是ADD和COPY。

1.5 FROM

FROM <image>

或者

FROM <image>:<tag>

或者

FROM <image>@<digest>

FROM指令指定了目標Image的基礎鏡像。tag是某個特定版本的鏡像, digest是最新引入的一種ID,類似於唯一標示符。

1.6 MAINTAINER

MAINTAINER <name>

這個字段一目了然,就是設置作者。

1.7 RUN

RUN包含兩種格式:

  • RUN (shell格式,這種命令運行在shell中 /bin/sh -c)
  • RUN ["executable", "arg1", "arg2"] (exec格式) RUN指令可以執行任何命令,並在當前image的頂層添加一個文件層,並提交到新的image中。由此我們可以看出,每一個RUN指令都會新加一層文件係統,雖然這個並不占多少空間,不過還是推薦盡可能多的減少指令。因此我們可以使用\來做換行處理。
    RUN /bin/bash -c 'source $HOME/.bashrc ;\
    echo $HOME'
    
    不換行形式:
    RUN /bin/bash -c 'source $HOME/.bashrc ; echo $HOME'
    
    exec模式:
    RUN apt-get dist-upgrade -y

最後更新:2017-04-01 13:38:50

  上一篇:go 細品這杯香濃的咖啡——阿裏中間件高級專家沈詢的Java之旅
  下一篇:go 美團生活服務個性化推薦實踐