Docker解析及轻量级PaaS平台演练(三)--Dockerfile编写
在本篇中将介绍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©
将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编写的更多相关文章
- Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装
Container技术: 传统的虚拟化技术: 通过对硬件层模拟,从而实现了能够在一套硬件上面运行多个操作系统,因为通过硬件虚拟化,使得操作系统认为在它之下就是硬件层 但是实际情况是这样的:虚拟机中的O ...
- Docker解析及轻量级PaaS平台演练(四)--Fig相关介绍
本篇中将会使用开源工具Fig Fig是什么? 简单的说就是对Docker的封装,从而方便我们构建应用的运行环境 它所做的事情是协调Docker上的各个Container之间的联系,并通过服务发现的方式 ...
- Docker解析及轻量级PaaS平台演练(二)--Docker的一些简单命令
上一篇中,我们对Docker有了一个基本的了解 下面将讨论Docker中Image,Container的相关实际操作 Image管理: 镜像的命名和版本管理: 普通镜像的命名规范 {namespace ...
- Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】
# Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...
- 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...
- Docker容器技术的PaaS云平台架构设计***
基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件.数据服务.云服务器等资源,开发人员 ...
- 基于Docker&Kubernetes构建PaaS平台基础知识梳理
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ...
- 2014 Container技术大会:未来Linux Container会是PaaS平台的核心
不应错过2014 Container技术大会的九大理由. 一.Docker官方人员再次来到北京,首次向中国布道Docker技术.2013年Docker高级软件工程师Jerome Petazzoni,曾 ...
- 【原创】基于Docker的CaaS容器云平台架构设计及市场分析
基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...
随机推荐
- json相关注解和序列化与反序列化
使用jackson进行序列化时,往往会遇到后台某个实体对象的属性为null,当序列化成json时对应的属性也为null,可以用以下的注解方式完成当属性为null时不参与序列化: @JsonSerial ...
- iOS开发-Runloop详解(简书)
不知道大家有没有想过这个问题,一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,不会自发的有任何动作发生,但是如果我们点击界面上的一个按钮,这个时候就会有对应的按钮响应事件 ...
- String、ANSIString、PChar及TBytes之间的转换 BytesOf move stringof
一.string转为ansistring 1.直接赋值 (有警告)2.ansistring()类型强制转换.(无警告) 二.ansistring 转为string 1.直接赋值 (有警告)2.stri ...
- VS2010编写C++程序出现error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
用VS2010编写C++程序,编译时出现如下错误: 修改方法: 右击项目,选择属性 点击确定,重新编译,错误解决.
- 【转】Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址
Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址 关注finddreams,一起分享,一起进步: http://blog.csdn.net/finddr ...
- linux下IPTABLES配置详解 (防火墙命令)
linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...
- uiautomator2 +Python进行Android原生应用UI测试
uiautomator2封装了google的uiautomator(只能用java),uiautomator2可以使用脚本语言python进行编写,更简单直观地修改.运行自动化测试代码: 不足为:仅支 ...
- 创建展开行明细编辑表单的 CRUD 应用
http://www.runoob.com/jeasyui/jeasyui-app-crud3.html jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用 当切换数据网格 ...
- java 时间格式化中的模式字母
java日期格式化中的模式字母有特定的意义,由于没有注意,今天在做工程的时候导致出现了奇怪的日期: 错误写法如下: 然而得到了错误的结果: 正确写法如下: 这样就得到了正确的结果 mm指的是分钟,MM ...
- JNI基础学习
1.JNI(Java Native Interface): 它允许Java代码和其他语言写的代码进行交互,JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要 ...