Docker镜像和Dockerfile详解

2020年03月21日 06:39:24   [来源:互联网]   [阅读:-]
字体:【

镜像是容器的模板,容器是镜像运行的实例,可以类比为模具和实物的关系或者编程语言里面"类"和"实例"的关系,镜像是静态的定义,容器是动态运行的实体

一、镜像的构成

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="yeasy@github" 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"]

推荐阅读:汶上县依博艺水产资讯中心


相关新闻
新闻焦点
凡关乎美的东西,都离不开色彩。一直觉得,中国是个没有绚烂色彩的国家,能想起来的色彩,也都单调乏味,比如,宫墙红?也许是太熟悉了的缘故。反倒是很多[更多]
正所谓:一屋,两人,三餐,四季。最幸福的生活莫过于,平淡却温馨的日常生活。想要过上这种生活,取决于三餐离不开的餐厅。但是实际上你家的餐厅区域,餐[更多]
厨房虽小,却装着天下美食,在家里,不管是谁主厨,一个好的厨房绝对能让整个烹饪过程高效节能。空间动线//节省劳动时间//在做饭过程中,是不是总觉得[更多]
生活不止眼前的苟且,还有买房和家装,而家装的投入决定了之后生活居住的品质。相信大多数业主从拿到新家钥匙的那一刻起,脑海中对未来生活的完美憧憬和口[更多]
关于我们 | 联系我们 | 老版地图 | 网站地图 | 版权声明
版权所有:嘉兴都市网未经授权禁止复制或建立镜像
相关作品的原创性、文中陈述文字以及内容数据庞杂本站无法一一核实,如果您发现本网站上有侵犯您的合法权益的内容,请联系我们,本网站将立即予以删除!
中国互联网违法和不良信息举报中心 网络警察报警岗亭