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
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
七、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 。
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/
指令的通常格式爲INSTRUCTION arguments,指令包括FROM、MAINTAINER、RUN等。 FROM 格式爲FROM 或FROM :。 第一條指令必須爲FROM指令。而且,如...