在本篇中将介绍Dockerfile的编写

除了通过修改Image,创建Container,在打包成Image来创建我们需要的Image之外

我们还可以编写Dockerfile文件,通过build来创建我们需要的Image

Dockerfile是一个文件名,Docker规定必须是这样子来命名的

Dockerfile放在项目的根目录

通过docker build -t {镜像的名字} {项目的路径}

来读取Dockerfile中的代码自动构建一个Image

Dockerfile中每一行指令执行完之后都会提交成为一个Image,这样保证了指令之间不会有影响

而且Docker会尽可能的尝试复用之前的Image

可以通过在build命令中添加–no-cache方式来取消这种cache复用方式

Dockerfile中只支持自己定义的那套指令,在书写时建议全部使用大写

FROM {base Image}

必须放在Dockerfile的第一行,表示从哪个Image开始构建

MAINTAINER

可选的,用来标识Image作者

RUN

每个RUN指令都会是在新的Container中执行,并提交为Image,作为下一个RUN的base image

RUN[“executable”,”arg1”,…]

CMD

在Dockerfile中定义的CMD命令,在提交成Image的时候不会起作用,只有当使用这个Image来创建一个Container的时候,会在Container内部默认执行这条CMD命令

一个Dockerfile中只能有一个有效的CMD

当运行Container时如果指定了command,那么将会覆盖默认设置的这个CMD

下面来编写一个Demo Dockerfile

在/test目录下新建Dockerfile

FROM busybox:ubuntu-14.04
RUN touch /test.sh
CMD ["ls","-al","/"]
//默认执行ls -al /
//外部可以通过ls -al /usr甚至是ps -al来覆盖原有的command

使用build来构建Image

docker build -t jchubby/testimage /test
//-t [image名] [Dockerfile目录]

运行结果如下:

ENTRYPOINT

之前的CMD是定义默认的command命令,但是在运行container的时候可以执行另外的command来覆盖原先的command

ENTRYPOINT的作用是在运行container的时候,设置默认要执行的command命令,是不可修改的,但是可以传不同的参数给这个command命令得到不同的结果

一个Dockerfile中只能有一个有效的ENTRYPOINT

使用ENTRYPOINT

FROM busybox:ubuntu-14.04
RUN touch /test.sh
ENTRYPOINT ["ls","-al"]
CMD["/"]
//默认会执行ls -al /
//外部只能通过传不同的路径,来得到对应目录的文件,只能使用ls命令

ADD&COPY

将host上的文件或目录复制到Image中,ADD如果是一个URL的情况下,会将其下载到指定的目录

FROM busybox:ubuntu-14.04
RUN touch /test.sh
ADD http://.... /test/..
//将指定网址的资源下载到/test/..文件中
ENTRYPOINT ["ls","-al"]
CMD["/"]

其他的一些Dockerfile指令

ENV

ENV key value

用来设置环境变量,后续的RUN可以使用其创建的环境变量

创建基于该Image的Container时也会自动拥有这些环境变量

WORKDIR

指定当前的工作目录

USER

指定在RUN的时候使用哪个用户

ONBUILD

类似于一个触发器,比如Image a的Dockerfile中制定了ONBUILD,Image b的Dockerfile指定FROM Image a,那么在构建Image b的时候会先执行Image a中的ONBUILD指定的操作(ONBUILD后面跟的是Dockerfile的指令)

VOLUME

通过VOLUME[“path1”,”path2”,…]

来指定某些目录为Container之间可以共享数据,访问的目录

Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写的更多相关文章

  1. Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装

    Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...

  2. Docker解析及轻量级PaaS平台演练(四)--Fig相关介绍

    本篇中将会使用开源工具Fig Fig是什么? 简单的说就是对Docker的封装,从而方便我们构建应用的运行环境 它所做的事情是协调Docker上的各个Container之间的联系,并通过服务发现的方式 ...

  3. Docker解析及轻量级PaaS平台演练(二)--Docker的一些简单命令

    上一篇中,我们对Docker有了一个基本的了解 下面将讨论Docker中Image,Container的相关实际操作 Image管理: 镜像的命名和版本管理: 普通镜像的命名规范 {namespace ...

  4. Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

  5. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

  6. Docker容器技术的PaaS云平台架构设计***

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...

  7. 基于Docker&Kubernetes构建PaaS平台基础知识梳理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...

  8. 2014 Container技术大会:未来Linux Container会是PaaS平台的核心

    不应错过2014 Container技术大会的九大理由. 一.Docker官方人员再次来到北京,首次向中国布道Docker技术.2013年Docker高级软件工程师Jerome Petazzoni,曾 ...

  9. 【原创】基于Docker的CaaS容器云平台架构设计及市场分析

    基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...

随机推荐

  1. Hadoop简单源码样例

    1.WordCount策略比较简单 import java.io.IOException; import java.util.StringTokenizer; import org.apache.ha ...

  2. python 学习笔记 aiohttp

    asyncio可以实现单进程并发IO操作,如果仅用在客户端,发挥的威力并不大,如果把asyncio用在服务器端,由于http链接就是IO操作, 因此可以用单线程+coroutine实现多客户的高并发支 ...

  3. python实战===一行代码就能搞定的事情!

    打印9*9乘法表: >>> print( '\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) ...

  4. 热安装NGINX并支持多站点SSL

    https://www.moonfly.net/801.html http://www.centoscn.com/image-text/config/2015/0423/5251.html 1.查看n ...

  5. JavaScript ES6部分语法

    ES6是JavaScript语言的新版本,它也可以叫做ES2015,之前学习的JavaScript属于ES5,ES6在它的基础上增加了一些语法,ES6是未来JavaScript的趋势,而且vue组件开 ...

  6. Python 进阶 之 闭包变量

    在闭包内访问外部变量的方法有两种: 1:变量前加nonlocal(仅支持Python3) 2:用列表来代替变量.即使是只有一个元素的数组,否则会报错.

  7. 让IE6/IE7/IE8支持CSS3属性的8种方法介绍

    我们都知道,IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现状,他们总是尽量使用一些手段使IE浏览器也能支持CSS3属性,我觉得这些都是很有意义,很有价值的工作,可以推动整个技术领域的 ...

  8. 【贪心】bzoj3850 ZCC Loves Codefires

    类似某noip国王游戏. 考虑交换两个题目的顺序,仅会对这两个题目的贡献造成影响. 于是sort,比较时计算两个题目对答案的贡献,较小的放在前面. #include<cstdio> #in ...

  9. 你真的懂ThreadPoolExecutor线程池技术吗?看了源码你会有全新的认识

    Java是一门多线程的语言,基本上生产环境的Java项目都离不开多线程.而线程则是其中最重要的系统资源之一,如果这个资源利用得不好,很容易导致程序低效率,甚至是出问题. 有以下场景,有个电话拨打系统, ...

  10. Sublime | 编辑工具Sublime的使用小结

    文章目录 Sublime Package & Usage MarkdownEditing MarkdownPreview Usage Key Bindings Setting (语法高亮和ma ...