docker学习笔记(2)---Dockerfile_w踏雪w的博客-程序员秘密

技术标签: Dockerfile  其他  docker  

在docker学习笔记(1)中,我们提到了通过commit 的命令来提交新的image,下面我们来通过Dockerfile文件来生成image,而且使用Dockerfile,很方便移植。


一、Dockerfile中几个常用的指令:

(1)FROM

格式:

FROM  <image>
或者

 FROM  <image>:<tag>

(2)MAINTAINER

格式:

MAINTAINER  <name>

说明:设置生成image的作者


(3)RUN

格式:

  使用shell 的形式

RUN  <command>
或 使用exec的形式

RUN ["executable",  "param1",  "param2"] 

说明:RUN指令会在当前的Image上的新一层layer执行指令,并提交结果。这些结果会在Dockerfile的下一步中使用到。


(4)CMD

格式:

CMD ["executable","param1","param2"]  
CMD ["param1","param2"] 
CMD command param1 param2

说明:CMD指令会在启动container时执行服务,例如一个命令,启动一个服务,或启动一个脚本之类的。

注意:一个Dockerfile文件只能有一个CMD指令,如果有多条,则只有最后一条有效。


(5)ADD

格式:

ADD  <src>  .... <dest>

说明:

如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下,如:ADD  files    /root/hadoop_files/(注意,这里hadoop_files后面要有/,否则在build  Dockerfile时会失败,提示说: lchown /var/lib/docker/aufs/mnt..........................not  a directory之类的报错信息)

如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下,如:ADD  ADD https://archive.apache.org/dist/hadoop/common/hadoop-1.0.4/hadoop-1.0.4-bin.tar.gz /root/


(6)VOLUME

格式:

VOLUME  ["/data"]
说明:可以将本地文件夹或者其他container的文件夹挂载到container中。


二、例子

下面的Dockerfile创建一个基于ubuntu:precise的镜像。

通过docker build  -t  ubuntu:base   .   命令执行。

#Authro:wgc
#Data:2014-10-24
#Introduction:Build basic development
From ubuntu:precise

# Set correct source list
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN echo "deb http://archive.ubuntu.com/ubuntu precise-updates main universe" >> /etc/apt/sources.list

# Install a few other useful packages plus Open Jdk 7
RUN apt-get update && apt-get upgrade -y && apt-get install -y openjdk-7-jdk wget vim sudo openssh-server 

# Add hadoop_files
ADD files /root/hadoop_files/

# Set JAVA_HOME
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
RUN echo export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 >> /root/.bashrc

# Download hadoop
ADD https://archive.apache.org/dist/hadoop/common/hadoop-1.0.4/hadoop-1.0.4-bin.tar.gz /root/




参考:

(1)docs.docker.com/reference/builder/

(2)http://blog.csdn.net/wsscy2004/article/details/25878223

(3)tonybai.com/tag/博客/






版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wen294299195/article/details/40478529

智能推荐

NetCore3.1——Autofac基础之配置、注册类、切面(一)_石头@很想你~的博客-程序员秘密

1,添加所需类库using Autofac;using Autofac.Extensions.DependencyInjection;using Autofac.Extras.DynamicProxy;2,添加应用层代码public class Program{ public static IHostBuilder CreateHostBuilder(string[] args) =&gt; Host.CreateDefaultBuilder(args)

java复习_love398146779的博客-程序员秘密

1. 关于动态加载机制??学习Java比C++更容易理解OOP的思想,毕竟C++还混合了不少面向过程的成分。很多人都能背出来Java语言的特点,所谓的动态加载机制等等。当然概念往往是先记住而后消化的,可有多少人真正去体会过动态加载的机制,试图去寻找过其中的细节呢? 提供大家一个方法:在命令行窗口运行Java程序的时候,加上这个很有用的参数:java ?verbose *.class这样会清...

Android官方ORM数据库Room技术解决方案简介(一)_zhangphil的博客-程序员秘密

是时候该忘记Android SQLite了!Android官方ORM数据库Room技术解决方案简介(一)Android的Romm是Android官方整合出来的一揽子ORM数据库解决方案。Android Room和历史上的ORM数据库如Android ORMLite(见附录文章1,2),Android greenDao等等,有诸多相同的设计思想和理念,但Android Room同时吸收众家ORM数据

MODBUS协议剖析 【MODBUS协议在STM32上实现 - 上】_CodeAllen嵌入式编程的博客-程序员秘密

原文首发地址:https://blog.csdn.net/super828/article/details/83662945#comments参考资料:获取资料加QQ群 7363863241.Modbus通信协议.pdf2.Modbus调试精灵1.024.rar3.主机源码.rar4.育灵科技视频第一节 通讯的硬件协议机制 主从模式的建立目的:实现在mo...

做题记录四_Lecet11111的博客-程序员秘密

洛谷新人做题日记(四)## P4414 [COCI2006-2007#2] ABC题目描述:见洛谷思路:先确定A B C所对应的整数值,再进行情况讨论。即一个3个数比大小的算法和if多情况判断语句。代码如下:#include&lt;iostream&gt;#include&lt;cstring&gt;using namespace std;int main(){ int a, b, c; cin &gt;&gt; a &gt;&gt; b &gt;&gt; c; int temp

SpringBoot入门篇(二)_刘总Java的博客-程序员秘密

今天的博客主题 SpringBoot——》SpringBoot入门篇(二)springboot可以在做成一个独立的项目运行,也可以做成前后端分离的那种。做成一个独立的项目,在工程里要写前端的代码(HTML,CSS,JS)如果是前后端分离,那工程里只需要提供接口出去就好。springboot的web开发1)webJarwebJar就是以jar包的形式来...

随便推点

Windows 8管理员权限的运用_weixin_34132768的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

jfrog Received status code 401 from server: Unauthorized_mldxs的博客-程序员秘密

使用JFrog的maven库是,拉取pom文件出现,Received status code 401 from server: Unauthorized。由于后台配置的原因导致。打开jfrog后台,进入设置界面,Administration -&gt; Security -&gt; Settings , 选中Allow Anonymous Access,然后点击保存。...

python+opencv入门-动手实现人脸检测_行走在路上的HOU的博客-程序员秘密

python+opencv入门-动手实现人脸检测任务描述本关任务:利用 openCV 对图片进行相应的处理。相关知识为了完成本关任务,你需要掌握:1 . 人脸检测。2 . 如何利用 openCV 实现人脸检测。人脸检测在上一关,我们已经知道如何去检测图片中人物的性别。然而,在真实项目中,我们不仅仅是需要知道图片中人物的性别,有时候还需要将图片中人脸的位置检测出来。如上图,我们用一个方框将人脸部分给划分出来,人脸检测就是需要找出这个方框的正确位置。需要将检测框位置确定下来需要知道四个参数:

AngularJS核心特性——模块化_chengqiuming的博客-程序员秘密

一 点睛AngularJS为了分离代码达到复用效果,提供了一个module。定义模块需要使用下面的代码。无依赖模块:angular.module(&quot;firstModule&quot;, []);有依赖模块:angular.module(&quot;firstModule&quot;, [&quot;moduleA&quot;,&quot;moduleB&quot;]);模块中控制器的定义方法:angular.module(&quot;...

面向对象高级_weixin_30492601的博客-程序员秘密

参考: http://www.cnblogs.com/linhaifeng/articles/6204014.html1. isinstance(obj,cls)和issubclass(sub,super)sinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo()...

前端实现大文件上传分片上传断点续传_Mr_Zang666的博客-程序员秘密

总结一下大文件分片上传和断点续传的问题。因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况。http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件切片(分块),但这不是我们现在说的重点,我们要做的事是保证在网络中断后1G的文件已上传的那部分在下次网络连接时不必再重传。所以我们本地在上传的时候,要将大文件进行分片,比如分成1024*1024B,即...

推荐文章

热门文章

相关标签