廣元熱線_廣元最具影響力的企業資訊門戶網站

Docker鏡像和Dockerfile詳解

2020-03-23 08:29:40 來源:互聯網 閱讀:-

鏡像是容器的模板,容器是鏡像運行的實例,可以類比為模具和實物的關系或者編程語言里面"類"和"實例"的關系,鏡像是靜態的定義,容器是動態運行的實體

河南快三:一、鏡像的構成

河南快三 www.ndams.com hello-world

Hello-world是docker官方提供的一個很小的鏡像,用來測試docker是否正確運行

$ docker run hello-world$ docker images

這個鏡像才1.04kb,我們看下他的Dockerfile描述

FROM scratchCOPY hello /CMD ["/hello"]

(1) FROM scratch 說明鏡像是白手起家,從0開始構建

(2) COPY hello / 將文件"hello"復制到鏡像的目錄

(3) CMD ["/hello"] 容器啟動時執行 /hello

二、Dockerfile的構建

概念:Dockerfile 是一個包含創建鏡像所有命令的文本文件,通過docker build命令可以根據 Dockerfile 的內容構建我們自己需要的鏡像

base鏡像:

a、不依賴其他鏡像,從scratch開始

b、以其他鏡像為基礎擴展

Dockerfile常用指令,主要分為配置指令和操作指令,一圖展示各種命令


dockerfile常用命令

配置指令

2.1、ARG(定義鏡像創建過程中的變量)

用法:ARG <name>[<default value>]

2.2、FROM

用法:FROM <image>
  • FROM指定構建鏡像的基礎源鏡像,如果本地沒有該鏡像,默認會從 DockerHub上拉取鏡像
  • FROM scratch 說明鏡像是從0開始構建,不依賴其他鏡像
  • FROM可以在一個 Dockerfile 中出現多次,如果有需求在一個 Dockerfile 中創建多個鏡像

2.3、LABEL

用法:LABEL <key>=<value> <key>=<value> <key>=<value>

例如:LABEL version="l.0.0-rc3"

LABEL author="[email protected]" date="2020-01-01"

2.4、EXPOSE(聲明鏡像內服務監聽的端口)

用法:EXPOSE <port>

例如:EXPOSE 22 80 8443

2.5、ENV

用法:ENV <key> <value>或 ENV <key>=<value>

例如:

ENV APP_VERSION=1.0.0

ENV APP_HOME=/usr/local/bin

ENV PATH $PATH:/usr/local/bin

2.6、ENTRYPOINT

支持兩種格式:

□ ENTRYPOINT ["executable", "paraml ", "param2"]:exec 調用執行;

□ ENTRYPOINT command param 1 param2: shell 中執行;

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

2.7、WORKDIR

指定工作目錄

用法:WORKDIR <PATH>

WORKDIR /root/test

操作指令

2.8、RUN

用法:RUN <command>

例如:

RUN apt-get update \

&& apt-get install -y libsnappy-dev zliblg-dev libbz2-dev \

&& rm -rf /var/cache/apt

2.9、CMD(啟動容器時指定默認執行的命令)

用法:CMD command paraml param2 :在默認的Shell 中執行

每個Dockerfile 只能有一條CMD 命令。如果指定了多條命令,只有最后一條會被執行

2.10、ADD

格式為ADD <src> <dest>

COPY的作用和ADD類似,這里不再贅述

三、通過示例練習Dockerfile

# This my first nginx Dockerfile# Version 1.0# Base images 基礎鏡像FROM centos#MAINTAINER 維護者信息MAINTAINER pythontaotao#ENV 設置環境變量ENV PATH /usr/local/nginx/sbin:$PATH#ADD  文件放在當前目錄下,拷過去會自動解壓ADD nginx-1.8.0.tar.gz /usr/local/  ADD epel-release-latest-7.noarch.rpm /usr/local/  #RUN 執行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpmRUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean allRUN useradd -s /sbin/nologin -M www#WORKDIR 相當于cdWORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make installRUN echo "daemon off;" >> /etc/nginx.conf#EXPOSE 映射端口EXPOSE 80#CMD 運行以下命令CMD ["nginx"]

推薦閱讀:筆記本電腦有哪些品牌

{ganrao}