您的位置: 德阳热线网 > 资讯 > 正文

Docker镜像和Dockerfile详解!

2020-11-19 05:43:32来源:阅读:-

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

一、镜像的构成

hello-world

Hello-world是docker官方提供的一个很小的镜像,用来测试docker是否正确运行

$ docker run hello-world$ docker images
Docker镜像和Dockerfile详解

这个镜像才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常用指令,主要分为配置指令和操作指令,一图展示各种命令


Docker镜像和Dockerfile详解

dockerfile常用命令

配置指令

2.1、ARG(定义镜像创建过程中的变量)

用法:ARG []

2.2、FROM

用法:FROM 
  • FROM指定构建镜像的基础源镜像,如果本地没有该镜像,默认会从 DockerHub上拉取镜像
  • FROM scratch 说明镜像是从0开始构建,不依赖其他镜像
  • FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像

2.3、LABEL

用法:LABEL = = =

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

LABEL author="yeasy@github" date="2020-01-01"

2.4、EXPOSE(声明镜像内服务监听的端口)

用法:EXPOSE 

例如:EXPOSE 22 80 8443

2.5、ENV

用法:ENV  或 ENV =

例如:

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 

WORKDIR /root/test

操作指令

2.8、RUN

用法:RUN 

例如:

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  

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"]

推荐阅读:潮秀网

滚动推荐
43:32Docker镜像和Dockerfi
镜像是容器的模板,容器是镜像运行的实例,可以类比为模具和实物的关系或者[详细]
27:16PCR雷达助力共享停车服务商HAN
借助ParkingFriends™共享车位服务应用程序(app),停车[详细]
25:04基于大中台架构的电商业务中台最佳实
架构总原则:大中台+小前台的架构思路业务中台采用领域驱动设计(DDD)[详细]
19:59为了给全球用户提供高速宽带上网服务
早在2015年,美国太空探索技术公司创始人伊隆·马斯克便提出在太空组建[详细]
14:38在 Flutter 中使用 Web
我已经在StackOverflow 和 Flutter 的 issue[详细]
07:17在过去10年中,这10位亿万富翁的
其中,亚马逊创始人杰夫·贝佐斯位列第一,10年之间身价暴增974亿美元[详细]
01:58十年大厂的几点启发性建议!强烈推荐
“垃圾的业务逻辑!!!” 估计很多程序员在刚接触一个新项目的业务代码的[详细]