Docker Dockerfile详解

原创 2014年05月15日 11:09:32

如何使用

Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockerfile,使用命令build来创建新的image,并命名为edwardsbean/centos6-jdk1.7:

docker  build -t edwardsbean/centos6-jdk1.7  .

Dockerfile关键字

如何编写一个Dockerfile,格式如下:

# CommentINSTRUCTION arguments

FROM

基于哪个镜像

RUN

安装软件用

MAINTAINER

镜像创建者

CMD

container启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD.

CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。如:
Dockerfile:

CMD echo hello world

运行一下试试:

edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd
hello world

一旦命令匹配:

edwardsbean@ed-pc:~/software/docker-image/centos-add-test$ docker run centos-cmd echo hello edwardsbean
hello edwardsbean

ENTRYPOINT

container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

ENTRYPOINT没有CMD的可替换特性

USER

使用哪个用户跑container
如:

ENTRYPOINT ["memcached"]
USER daemon

EXPOSE

container内部服务开启的端口。主机上要用还得在启动container时,做host-container的端口映射:

docker run -d -p 127.0.0.1:33301:22 centos6-ssh

container ssh服务的22端口被映射到主机的33301端口

ENV

用来设置环境变量,比如:

ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

ADD

将文件<src>拷贝到container的文件系统对应的路径<dest>
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0
如果文件是可识别的压缩格式,则docker会帮忙解压缩

  • 如果要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下

  • 如果要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。比如:

    docker build github.com/creack/docker-firefox
    

    docker-firefox目录下必须有Dockerfile和要ADD的文件

注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD url file.

ADD只有在build镜像的时候运行一次,后面运行container的时候不会再重新加载了。

VOLUME

可以将本地文件夹或者其他container的文件夹挂载到container中。

WORKDIR

切换目录用,可以多次切换(相当于cd命令),对RUN,CMD,ENTRYPOINT生效

ONBUILD

ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
详见here


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wsscy2004/article/details/25878223

Docker学习笔记(3)-- 如何使用Dockerfile构建镜像

原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerf...
  • qinyushuang
  • qinyushuang
  • 2015-01-31 17:48:15
  • 133809

Dockfile

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命...
  • kevin_201353
  • kevin_201353
  • 2016-05-31 17:22:45
  • 549

Dockerfile 指令详解

Docker创建镜像的方式有两种: 一种通过commit的方式:把做了一系列操作的容器关闭,然后利用docker的commit指令:dockercommit 容器ID 镜像名:tag。然后docker...
  • i6448038
  • i6448038
  • 2016-03-11 13:58:34
  • 11284

使用 Dockerfile 实现自动化

转载自:https://segmentfault.com/a/1190000002711357 Docker 提供的 Dockerfile 是一个类似 Makefile 的工具,主要用来自动化构...
  • ivan820819
  • ivan820819
  • 2016-07-19 11:38:50
  • 3039

DockerFile详解

Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器 所有的 Dockerfile 命令格式都是: INSTRUCTION argum...
  • iloveyin
  • iloveyin
  • 2014-10-28 16:55:28
  • 4393

Docker学习笔记 — Dockerfile

Docerfile文件结构
  • wangtaoking1
  • wangtaoking1
  • 2015-03-10 21:22:14
  • 2388

[Mac OS X] 在Dock上增加文件夹,存放APP -- 堆栈@dock

[Mac OS X] 在Dock上增加文件夹,存放APP。 -- 堆栈@dock 效果图: 步骤: (下面有图示) 1.在应用程序文件夹中,新建文件夹,取名“XXX” 2.为目标APP制...
  • qq285744011
  • qq285744011
  • 2017-01-04 16:26:58
  • 2861

docker筑基篇-04-使用Dockerfile构建自己的镜像

构建自己的镜像 1 构建Dockerfile上下文 2 Dockerfile文件内容 3 构建镜像 4 启动容器 构建过程中的几个问题 1 Dockerfile大致流程 2 缓存上一篇文章介绍了使用d...
  • hylexus
  • hylexus
  • 2016-10-18 23:54:45
  • 7944

使用Dockerfile

今天看到汪云飞老师的Spring boot实战中关于Dockerfile的创建以及用docker部署项目,感觉非常简单,这里跟大家分享下。 默认有一台已经安装了docker的主机,新建一个s...
  • qq_35981283
  • qq_35981283
  • 2017-04-06 14:31:51
  • 2721

Dockerfile 最佳实践

Dockerfile 最佳实践本文是 Docker 官方文档 docs/archive:v1.1 中 Best practices for writing Dockerfiles 的理解和翻译。包含了...
  • shimachao
  • shimachao
  • 2016-11-27 19:06:34
  • 6034
收藏助手
不良信息举报
您举报文章:Docker Dockerfile详解
举报原因:
原因补充:

(最多只允许输入30个字)