Docker Dockerfile詳解

Docker Dockerfile詳解

2017年02月19日 09:28:30 閱讀數:42950 標籤: Docker 更多python

我的分類: dockerdocker

dockerfike快速建立自定義的Docker鏡像 
1、目錄 
1.docker典型結構 
2.指令介紹 
3.建立docker鏡像shell

2、結構 
DockerFile分爲四部分組成:基礎鏡像信、維護者信息、鏡像操做指令和容器啓動時執行指令。例如:數據庫

#第一行必須指令基於的基礎鏡像
From ubutu

#維護者信息
MAINTAINER docker_user  docker_user@mail.com

#鏡像的操做指令
apt/sourcelist.list

RUN apt-get update && apt-get install -y ngnix 
RUN echo "\ndaemon off;">>/etc/ngnix/nignix.conf

#容器啓動時執行指令
CMD /usr/sbin/ngnix
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3、指令 
一、From指令 
From 或者From :ruby

DockerFile第一條必須爲From指令。若是同一個DockerFile建立多個鏡像時,可以使用多個From指令(每一個鏡像一次)bash

二、MAINTAINER 
格式爲maintainer ,指定維護者的信息app

三、RUN 
格式爲Run 或者Run [「executable」 ,」Param1」, 「param2」] 
前者在shell終端上運行,即/bin/sh -C,後者使用exec運行。例如:RUN [「/bin/bash」, 「-c」,」echo hello」] 
每條run指令在當前基礎鏡像執行,而且提交新鏡像。當命令比較長時,可使用「/」換行。curl

四、CMD指令 
支持三種格式: 
CMD [「executable」 ,」Param1」, 「param2」]使用exec執行,推薦 
CMD command param1 param2,在/bin/sh上執行 
CMD [「Param1」, 「param2」] 提供給ENTRYPOINT作默認參數。post

每一個容器只能執行一條CMD命令,多個CMD命令時,只最後一條被執行。ui

五、EXPOSE

格式爲 EXPOSE […] 。

告訴Docker服務端容器暴露的端口號,供互聯繫統使用。在啓動Docker時,能夠經過-P,主機會自動分配一個端口號轉發到指定的端口。使用-P,則能夠具體指定哪一個本地端口映射過來

例如: 
EXPOSE 22 80 8443

六、ENV

格式爲 ENV 。 指定一個環境變量,會被後續 RUN 指令使用,並在容器運行時保持。

例如

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
  • 1
  • 2
  • 3
  • 4

七、ADD 
格式爲 ADD 。

該命令將複製指定的 到容器中的 。 其中 能夠是Dockerfile所在目錄的一個相對路徑;也能夠是一個URL;還能夠是一個tar文件(自動解壓爲目錄)。則。

八、COPY

格式爲 COPY 。

複製本地主機的 (爲Dockerfile所在目錄的相對路徑)到容器中的 。

當使用本地目錄爲源目錄時,推薦使用 COPY 。

九、ENTRYPOINT

兩種格式:

ENTRYPOINT [「executable」, 「param1」, 「param2」] 
ENTRYPOINT command param1 param2 (shell中執行)。 
配置容器啓動後執行的命令,而且不可被 docker run 提供的參數覆蓋。

每一個Dockerfile中只能有一個 ENTRYPOINT ,當指定多個時,只有最後一個起效。

十、VOLUME

格式爲 VOLUME [「/data」] 。

建立一個能夠從本地主機或其餘容器掛載的掛載點,通常用來存放數據庫和須要保持的數據等。

十一、USER

格式爲 USER daemon 。

指定運行容器時的用戶名或UID,後續的 RUN 也會使用指定用戶。

當服務不須要管理員權限時,能夠經過該命令指定運行用戶。而且能夠在以前建立所須要的用戶,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要臨時獲取管理員權限可使用 gosu ,而不推薦 sudo 。

十二、WORKDIR

格式爲 WORKDIR /path/to/workdir 。

爲後續的 RUN 、 CMD 、 ENTRYPOINT 指令配置工做目錄。

可使用多個 WORKDIR 指令,後續命令若是參數是相對路徑,則會基於以前命令指定的路徑。例如

WORKDIR /a 
WORKDIR b 
WORKDIR c 
RUN pwd 
則最終路徑爲 /a/b/c 。

1三、ONBUILD

格式爲 ONBUILD [INSTRUCTION] 。

配置當所建立的鏡像做爲其它新建立鏡像的基礎鏡像時,所執行的操做指令。

例如,Dockerfile使用以下的內容建立了鏡像 image-A 。

[…] 
ONBUILD ADD . /app/src 
ONBUILD RUN /usr/local/bin/python-build –dir /app/src 
[…] 
若是基於A建立新的鏡像時,新的Dockerfile中使用 FROM image-A 指定基礎鏡像時,會自動執行 ONBUILD 指令內容,等價於在後面添加了兩條指令。

FROM image-A

#Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的鏡像,推薦在標籤中註明,例如 ruby:1.9-onbuild 。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、建立鏡像 
經過Docker Build 建立鏡像。 
命令讀取指定路徑下(包括子目錄)全部的Dockefile,而且把目錄下全部內容發送到服務端,由服務端建立鏡像。另外能夠經過建立.dockerignore文件(每一行添加一個匹配模式)讓docker忽略指定目錄或者文件

格式爲Docker Build [選項] 路徑 
須要制定標籤信息,可使用-t選項 
例如:Dockerfile路徑爲 /tmp/docker_build/,生成鏡像的標籤爲build_repo/my_images 
$dudo docker build -t build_repo/my_images /tmp/docker_build/

Dockerfile指令總結

指令的通常格式爲INSTRUCTION arguments,指令包括FROM、MAINTAINER、RUN等。 FROM 格式爲FROM 或FROM :。 第一條指令必須爲FROM指令。而且,如...

相關文章
相關標籤/搜索