本文为原创文章。转载需注明转自:http://blog.csdn.net/minimicall?

viewmode=contents

技术爱好者都是比較懒的。而docker又是开发人员支持起来的。所以。它肯定是有比較懒的方式供我们定制自己须要的东西。

docker build

docker 用build指令来运行dockerfile脚本。

详细的使用方法:

[java] view
plain
copy

  1. sudo docker build .

小心后面那个点,表示当前文件夹。当前文件夹有一个Dockerfile的文件。

当然,你能够指定你建立的镜像的名字。

[java] view
plain
copy

  1. sudo docker build -t shykes/myapp .

然后你就能够看到运行过程。也许,会很的漫长,取决于要下的东西的大小和你的网速。

[java] view
plain
copy

  1. sudo docker build -t SvenDowideit/ambassador .
  2. Uploading context 10.24 kB
  3. Uploading context
  4. Step 1 : FROM docker-ut
  5. ---> cbba202fe96b
  6. Step 2 : MAINTAINER SvenDowideit@home.org.au
  7. ---> Using cache
  8. ---> 51182097be13
  9. Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top
  10. ---> Using cache
  11. ---> 1a5ffc17324d
  12. Successfully built 1a5ffc17324d

当你下完之后,你能够用:

[java] view
plain
copy

  1. docker images

你会发现多了你下载的镜像。

好接下来我们讲讲Dockerfile本身怎样编写。

格式:

[java] view
plain
copy

  1. # Comment
  2. INSTRUCTION arguments

命令是大写的。

FROM

全部的镜像都应该是基于某一个现有的镜像。

所以。就有了FROM 指令

[java] view
plain
copy

  1. FROM <image>

或者,更加详细点说明它的Tag。

[java] view
plain
copy

  1. FROM <Image>:<TAG>

FROM语句必须是第一句“非凝视”语句,在Dockerfile中。

我们总是会想在一个脚本里面加入些凝视,来说明一些想说的话。

凝视

那就是凝视:#开头的行。

可是#在行中,则却表示是一个參数。

维护

接下来。须要说明维护人。

[java] view
plain
copy

  1. MAINTAINER <name>

填上你的NICK NAME。

表示你做的。

RUN指令

RUN指令应该是用的最多的指令。

[java] view
plain
copy

  1. RUN <command> (the command is run in a shell - /bin/sh -c - shell form)

还有一种方式是:

[java] view
plain
copy

  1. RUN ["executable", "param1", "param2"] (exec form)

RUN语句会在当前镜像的基础上运行该条指令,同一时候运行完就成了一个新的镜像一样,即数据和影响都是会保存的。然后用这个新的镜像去运行下一条指令。这样上一条的结果镜像是下一条指令的基础,如此不断推进。

CMD指令

格式:

[java] view
plain
copy

  1. CMD ["executable","param1","param2"] (exec form, this is the preferred form)
  2. CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
  3. CMD command param1 param2 (shell form)

有三种形式。

CMD在DOckerfile里面仅仅能用一次,假设你写了非常多条,那么仅仅有最后一条是有效的。

CMD有什么用呢,能够理解为Main函数一样吧。作为一个入口。详细见英文

The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

EXPOSE

这个单词的中文叫什么,暴露。对,他就是暴露镜像的某个接口出来。

比如,我的镜像是用来做http服务的,那么我就理应暴露我镜像的80port。

然后-p 主机port:80 。还记得吧。

port映射。

[java] view
plain
copy

  1. EXPOSE <port> [<port>...]

ENV

环境变量的设置

[java] view
plain
copy

  1. ENV <key> <value>

环境变量一旦设定,对整个Dockerfile都是有效的。

当然,key = value这样直接说,事实上效果是一样的。

ADD指令

有点像拷贝指令,至少它就是完毕文件的拷贝工作的。

[java] view
plain
copy

  1. ADD <src> <dst>
[java] view
plain
copy

  1. ADD hom* /mydir/        # adds all files starting with "hom"
  2. ADD hom?.txt /mydir/    # ? is replaced with any single character

COPY指令

和ADD一样。是拷贝

ENTRYPOINT

入口点

真正的MAIN函数

[java] view
plain
copy

  1. ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)
  2. ENTRYPOINT command param1 param2 (shell form)

CMD和这个指令的差别。是应用的场景不一样。

这里。我给大家贴原文会比較好。

An ENTRYPOINT helps you to configure a container that you can run as an executable. That is, when you specify an ENTRYPOINT, then the whole container runs as if it was just that executable.





Unlike the behavior of the CMD instruction, The ENTRYPOINT instruction adds an entry command that will not be overwritten when arguments are passed to docker run. This allows arguments to be passed to the entry point, i.e. docker run <image> -d will pass the
-d argument to the entry point.





You can specify parameters either in the ENTRYPOINT JSON array (as in "like an exec" above), or by using a CMD instruction. Parameters in the ENTRYPOINT instruction will not be overridden by the docker run arguments, but parameters specified via a CMD instruction
will be overridden by docker run arguments.





Like a CMD, you can specify a plain string for the ENTRYPOINT and it will execute in /bin/sh -c:





FROM ubuntu

ENTRYPOINT ls -l

For example, that Dockerfile's image will always take a directory as an input and return a directory listing. If you wanted to make this optional but default, you could use a CMD instruction:





FROM ubuntu

CMD ["-l"]

ENTRYPOINT ["ls"]

WORKDIR 工作文件夹

RUN ENTERPOINT带的指令在哪里运行的设置。

此外,另一些指令,比如

USER 。ONBUILD。等就不想说了。

最后给出一个演示样例

[java] view
plain
copy

  1. # Nginx
  2. #
  3. # VERSION               0.0.1
  4. FROM      ubuntu
  5. MAINTAINER Victor Vieux <victor@docker.com>
  6. RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
  7. # Firefox over VNC
  8. #
  9. # VERSION               0.3
  10. FROM ubuntu
  11. # Install vnc, xvfb in order to create a 'fake' display and firefox
  12. RUN apt-get update && apt-get install -y x11vnc xvfb firefox
  13. RUN mkdir /.vnc
  14. # Setup a password
  15. RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
  16. # Autostart firefox (might not be the best way, but it does the trick)
  17. RUN bash -c 'echo "firefox" >> /.bashrc'
  18. EXPOSE 5900
  19. CMD    ["x11vnc", "-forever", "-usepw", "-create"]
  20. # Multiple images example
  21. #
  22. # VERSION               0.1
  23. FROM ubuntu
  24. RUN echo foo > bar
  25. # Will output something like ===> 907ad6c2736f
  26. FROM ubuntu
  27. RUN echo moo > oink
  28. # Will output something like ===> 695d7793cbe4
  29. # You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
  30. # /oink.

阿里云部署Docker(9)----Dockerfile脚本定制镜像的更多相关文章

  1. 阿里云部署Docker(5)----管理和公布您的镜像

    出到这节,我在百度搜索了一下"阿里云部署Docker",突然发现怎么会有人跟我写的一样呢?哦,原来是其它博客系统的爬虫来抓取,然后也不会写转载自什么什么的.所以,我最终明确为什么那 ...

  2. 阿里云部署Docker(7)----将容器连接起来

    路遥知马力.日久见人心.恩. 该坚持的还是要坚持. 今天看到一个迅雷的师弟去了阿里,祝福他,哎,尽管老是被人家捧着叫大牛.我说不定通过不了人家的面试呢.哎,心有惭愧. 本文为本人原创,转载请表明来源: ...

  3. 阿里云部署Docker(2)

    之前有一篇文章讲过在阿里云中安装Docker,相对来说那个是安装.可是安装完之后我们通常会碰到问题. 今天我给大家记录一下我的新的解决过程. 环境还是ubuntu12.04.如果我们已经把内核升级到了 ...

  4. 阿里云部署Docker(3)----指令学习

    通过上两节的学习http://blog.csdn.net/minimicall/article/details/40119177 和http://blog.csdn.net/minimicall/ar ...

  5. 阿里云部署Docker(4)----容器的使用

    通过上一节的学习,我们知道怎样执行docker容器,我们执行了一个普通的,一个后台的,我们还学习了几个指令: docker ps - Lists containers. docker logs - S ...

  6. 阿里云部署Docker(6)----解决删除&lt;none&gt;镜像问题

    转载请注明来源,本博客原创作者为:http://blog.csdn.net/minimicall?viewmode=contents 在Docker使用中,常常会碰到删除镜像不成功.反而让镜像变成了& ...

  7. 阿里云部署Docker(8)----安装和使用redmine

    安装redmine对过程进行管理. 须要说明的是:当你在docker images的时候,会说没连接到xxxx的时候,并且会提示用"docker -d".事实上这仅仅是把docke ...

  8. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  9. 阿里云-部署-服务-Docker

    目录 ♫ MusicPlayer Naiveboom - 比较安全 个人阿里云部署的小服务,欢迎使用,服务器资源有限,如果遇到卡顿还请谅解~ 索引: 在线音乐播放器 阅后即焚 ♫ MusicPlaye ...

随机推荐

  1. vue 阿里云上传组件

    vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...

  2. Python 绘图与可视化 matplotlib 制作Gif动图

    参考链接:https://blog.csdn.net/theonegis/article/details/51037850 官方文档:https://matplotlib.org/3.1.0/api/ ...

  3. 新手学python-Day4-作业

    购物车程序 要求: 1.启动程序后,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检查余额是否足够,够了就扣款,不够就提醒 4.可随时退出,退出时,打印已购买 ...

  4. oracle 的交并差函数,intersect;union;minus。

    创建表并添加数据: --创建TABLE_A create table TABLE_A ( A ), B ) ); --给TABLE_A添加数据 insert into TABLE_A values(' ...

  5. Jquery学习总结(3)——Jquery获取当前城市的天气信

    Jquery代码: function findWeather() {     var cityUrl = 'http://int.dpool.sina.com.cn/iplookup/iplookup ...

  6. ZOJ 3688

    做出这题,小有成就感 本来已打算要用那个禁位的排列公式,可是,问题在于,每个阶乘前的系数r的求法是一个难点. 随便翻了翻那本美国教材<组合数学>,在容斥原理一章的习题里竟有一道类似,虽然并 ...

  7. call to OpenGL ES API with no current context 和Fatal signal 11

    近日在用cocos2dx3.4的时候使用了JNI调用,发现一个现象 当不使用jni的时候全然正常.使用了jni后回去的全部文字都变成黑块,而且有概率程序崩溃.附带出了两个log call to Ope ...

  8. offsetLeft,Left,clientLeft具体解释

      假设 obj 为某个 HTML 控件. obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上側位置,整型,单位像素. obj.offsetLe ...

  9. HDU 1166 敌兵布阵【线段树 单点更新】

    题意:给出n个数,a1,a2,a3,,,,,an,再给出一些操作 add i  j 表示给第i个节点增加j sub i  j 表示给第i个节点减少j query i j 表示询问第i个节点到第j个节点 ...

  10. pthread_join/pthread_exit的用法解析

    官方说法: 函数pthread_join用来等待一个线程的结束.函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread ...