centos7下安装docker(dockerfile常用的指令)
FROM:指定ase镜像
MAINTAINER:设置镜像作者,可以是任意字符
COPY:将文件从build context复制到镜像。支持两种形式:1.COPY src dest 2.COPY [“src”,“dest”]
注意:src只能指定build context中的文件或目录
ADD:与COPY类似,从build context复制文件到镜像。不同的是。如果src是归档文件(tar,zip,tgz,xz等),文件会自动解压到dest。
ENV:设置环境变量,环境变量可被后面的指令使用。
例如:ENV MY_VERSION 1.3
RUN yum install -y mypackage=$ENV MY_VERSION 1.3
EXPOSE:制定容器中的进程会监听牧歌端口,Docker可以将该端口暴露出来
VOLUME:将文件或者是目录声明为volume
WORKDIR:为后面的RUN CMD ENTRYPOINT ADD COPY 指令设置镜像中的当前目录
RUN: 在容器中运行相应的指令
CMD:容器启动时运行的相应的命令,dockerfile中可以有多个cmd指令,但只有最后一个生效。CMD可以被docker run 之后的参数代替
ENTRYPOINT:设置容器启动的时候运行的命令。Dockerfile中可以有多个ENTRYPOINT指令,但只有最后一个生效,CMD或docker run之后的参数都会被当作参数传递给ENTRYPOINT
下面做一个实验
编辑dockerfile
创建镜像进行验证:
创建完成
进行验证:
证明,运行容器时默认会进入WORKDIR指定的目录下,RUN和COPY也会在WORKDIR下执行,输出ENV的变量hello
注:build context值得是Dockerfile所在的目录以及子目录
分析RUN CMD ENTRYPOINTDE 区别
1.RUN:执行命令,创建新的镜像层,通常执行安装的命令
2.CMD:容器启动后默认执行的命令,可以被docker run后面的参数代替
3.ENTRYPOINT:容器启动时执行的命令,CMD的参数可以执行给ENTRYPOINT
RUN CMD ENTRYPOINT执行的时候会有两种形式:SHELL 和 EXEC
SHELL格式:<说明><命令>
例如:RUN yum install -y tree
CMD echo “hello”
ENTRYPOINT echo “likun”
SHELL 会调用/bin/sh -c <命令>
例如:ENV name likun
ENTRYPOINT echo “hello,$name”
执行 docker run <镜像>
会输出 hello,likun 这里的环境变量被likun代替
EXEC格式:<说明>["executable","param1","param2",...]
例如:RUN ["yum","install","tree"]
CMD ["/bin/echo","hello world"]
ENTRYPOINT ["/bin/echo","hello world"]
当命令执行的时候,会直接调用<命令>,不会被shell解析
例如:ENV name likun
ENTRYPOINT [“/bin/echo”,“hello,$name”]
实验充分证明:exec格式不会解析shell,以上的实验直接将$HELLO输出,而不是hi,hello
如果希望使用环境变量,可以做一下修改:
ENV HELLO "hello"
ENTRYPOINT ["/bin/sh",-c","echo hi,$HELLO"]
运行容器时输出 hi,hello
下面做一下实验:
修改Dockerfile
创建新的镜像:
创建成功
运行镜像:
直接输出hi,hello
注:EXEC格式可读性更强,更容易被理解。CMD 和ENTRYPOINT 推荐使用EXEC格式,RUN则两种格式都可以
以上说明了两中格式,下面研究一下他们的区别,什么时候用什么格式
RUN
RUN有两种格式:
1.Shell格式:RUN
2.EXEC格式:RUN ["executable",“param1”,“param2”]
使用RUN安装多个安装包的例子
RUN yum insatll -y tree httpd vim
注意:1.yum install update和yum install -y最好放在一个指令中执行,如:RUN yum install update && yum install -y tree,这样能够保证每次安装的都是新的安装包。如果他们分开使用的话会分别为yum install update 和yum install -y分别创建一个镜像层,下次创建新的镜像的时候会直接使用cache这个镜像,不能保证安装的是最新的安装包。
2.也可以使用docker build -t 镜像名字 --no-cache也可以保证install是最新的。
3.--no-cache适用于任何场景,update&install仅适用于安装软件
CMD
容器启动且docker run 没有指定其他命令时运行的命令
1.如果docker run指定了新的命令,CMD指定的默认命令将被忽略
2.如果Dockerfile中有多个CMD,,只有最后一个CMD生效
CMD有三种格式:
1.Exec格式:CMD ["executable","param1","param2"]这是CMD的推荐格式
2.CMD[“param1”,“param2”]为ENTRYPOINT提供额外的参数,此时ENTRYPOINT必须使用Exec格式,这种格式要与ENTRYPOINT配合使用,为ENTRYPOINT提供默认参数
3.SHELL格式:CMD command param1 param2
param是参数的意思
进行实验
同样是修改Dockerfile
制作镜像
查看镜像
运行镜像,输出hi likun
在docker run it centos-cmd:cmd加命令,CMD会被忽略,下面进行实验
CMD直接被忽略,输出hello docker
ENTRYPOINT:可以让容器以应用程序或者服务的形式运行
ENTRYPOINT和CMD很像,都可以指定要执行的命令及参数。但是ENTRYPOINT不会被忽略,一定会被执行,即使docker run后面指定了其他命令。
ENTRYPOINT有两种格式:
1.Exec格式:ENTRYPOINT [“executable”,“param1”,“param2”],这个是ENTRYPOINT的推荐格式
2.SHELL格式:ENTRYPOINT command param1 param2
注:在为ENTRYPOINT选择格式时一定要注意,因为两种格式差别很大。
再次强调:ENTRYPOINT的exec格式中的参数始终会被使用,CMD的参数会被docker run后面的参数替换;shell格式会忽略任何CMD或docker run提供的参数
总结
1.使用RUN 指令安装应用和软件包,构建镜像
2.使用ENTRYPOINT运行应用程序或服务,比如运行一个MySQL,应该优先使用EXEC格式的ENTRYPOINT指令
3.CMD可为ENTRYPOINT提供额外的默认参数,同时可以利用docker run后面的参数进行更改。
centos7下安装docker(dockerfile常用的指令)的更多相关文章
- docker(一) Centos7下安装docker
docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...
- centos7下安装docker与镜像加速
1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...
- CentOS7下安装docker(Docker系列1)
CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...
- centos7 下安装docker报错:You could try using...
搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...
- Centos7下安装Docker(详细的新手装逼教程)
早就听说过Docker,一直不清楚是个啥,今天捣鼓了一下,这里做个记录. --------------------------------------------------------------- ...
- Centos7下安装Docker[z]
[z]https://www.cnblogs.com/qgc1995/p/9553572.html https://yq.aliyun.com/articles/691610?spm=a2c4e.11 ...
- Linux(centos7)下安装Docker
近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...
- centos7下安装docker(21docker swarm集群创建)
创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...
- centos7下安装docker(19容器架构)
What,Why,How What:什么是容器? 说起容器大家想到的是什么? 集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...
- centos7下安装docker(14安装docker machine)
之前我们做的实验都是在一个host上面的,其实在真正的环境中有多个host,容器在这些host上面启动,运行,停止和销毁,相关容器会通过网络相互通信,无论他们是否运行在相同的host上面. 对于这种歌 ...
随机推荐
- 从壹开始微服务 [ DDD ] 之八 ║剪不断理还乱的 值对象和Dto
缘起 哈喽大家周四好,时间是过的真快,这几天一直忙着在公司的项目,然后带带新人,眼看这周要过去了,还是要抽出时间学习学习,这些天看到群里的小伙伴也都在忙着新学习,还是很开心的,至少当时的初衷已经达到了 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十║Vue基础终篇:传值+组件+项目说明
缘起 新的一天又开始啦,大家也应该看到我的标题了,是滴,Vue基础基本就到这里了,咱们回头看看这一路,如果你都看了,并且都会写了,那么现在你就可以自己写一个Demo了,如果再了解一点路由,ajax请求 ...
- 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换
目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...
- BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于缩放bitmap以及将bitmap保存成图片到SD卡中 效果图 代码分析 bitmapZoomByHeight(Bitmap s ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- 以太坊工作原理之txpool详解
txpool详解 交易池txpool作为区块链系统的重要组成部分,对系统的安全性和稳定性具有重要作用.功能可归纳为:交易缓存.交易验证和交易过滤. 基本介绍 交易分类和缓存 txpool主要包含两个重 ...
- pdf.js 使用实例
pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责 ...
- spring的理解
看过<fate系列>的博友知道,这是一个七位英灵的圣杯争夺战争.今天主要来谈谈圣杯的容器概念,以便对spring的理解. 圣杯: 圣杯本身是没有实体的,而是将具有魔术回路的存在(人)作为“ ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. ...
- 一个GIS开源工具集架构的总结
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 最近由团队HWG主导的GIS开源工具集基本告一段落,该项目虽然 ...