镜像是容器的模板,容器是镜像运行的实例,可以类比为模具和实物的关系或者编程语言里面"类"和"实例"的关系,镜像是静态的定义,容器是动态运行的实体
一、镜像的构成
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 []
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"]
推荐阅读:福州汽车网
-
以下6个景点节假日不要去,除了人,什么都没有
时代在发展,经济也在发展,国家繁荣昌盛,随之我们的生活水平也不断的在提高!随着生活水平的提高,我们也学会了享受生活,在日常工作的忙碌之余,选择了旅游,从而释放压...
2020-02-18 -
坐酷航是一种怎样的体验?座椅舒适机餐美味 怕
说到廉价航空公司,你的脑海里第一个出现的是哪家?亚洲航空,还是春秋航空?对于经常国内和东南亚旅行的人应该比较熟悉这两家,但事实上,全世界的廉价航空非常多。有的航...
2020-02-18 -
三亚最美沿海公路,绵延海岸十几公里,是多数游
如果你来三亚选择自驾旅行,那么从机场前往市区,建议走海虹路再转入 三亚湾 路,这是一段沿着海边的公路,风景非常不错。开着车往市区方向行驶,此刻你的右边就是碧海蓝...
2020-02-18 -
传说俄罗斯美女如云,来了俄罗斯才知道,别活在
俄罗斯是一个非常有魅力的国家,这个国家也在大力的发展旅游业,中国游客也特别喜欢去俄罗斯旅游,来到俄罗斯之后,大家也会发现可以观察到很多具有俄罗斯风格的建筑,比如...
2020-02-18 -
老外到中国旅游,看到中国式结账感到惊讶,网友
对于外国人来说,中国是一个充满神秘和魅力的国家,无论是长达五千年的文化和历史,还是现代化的发展和变革,中国总能在一段时间内,创造出令人瞠目结束的硕果。也正是这样...
2020-02-18 -
BBC专业测评告诉你,奢华酒店为什么这么贵
今天大师兄为大家推荐一部酒店控们必看的BBC纪录片《Amazing Hotels: Life Beyond The Lobby》(中文译名:《奇妙酒店:大堂之外...
2020-02-18