文档章节

Dockerfile构建镜像

喵了_个咪
 喵了_个咪
发布于 2018/05/05 15:01
字数 990
阅读 168
收藏 9

几乎所有的image都是通过Dockerfile生成出来的,使用Dockerfile可以让我们很轻松的构建出一个镜像,我们如果需要部署自己的程序常常也可会Dockerfile把代码和环境构建成一个image进行使用

附上:

喵了个咪的博客:w-blog.cn

官方Git地址:https://github.com/moby/moby

1.DockerFile介绍

以hub.docker中的项目来说,一般作者都会存放这个image对应的Dockerfile,我们也可以直接使用Dockerfile来生成自己的nginx镜像

2.编译自己的nginx

Dockerfile可以基于任何镜像的技术上搭建环境,可以基于别人做好的镜像比如Nginx,也可以基于基础镜像比如centos等,这里基于nginx镜像构建出本地的nginx:local并且运行镜像不在启动nginx只是输出一条nginx

> vim Dockerfile
FROM nginx:1.13.12
CMD ["echo", "nginx"]

> docker build -t nginx:local .
> docker images
REPOSITORY                                                          TAG                 IMAGE ID            CREATED             SIZE
nginx                                                               local               6ea964efbbc8        10 seconds ago      109 MB

> docker run -it nginx:local
> docker run -it nginx:local
nginx

3.Dockerfile 语法

使用以下的语法可以实现各种各样的镜像

  • FROM:指定父镜像,可以通过添加多个FROM,在同一个Dockerfile中创建多个镜像
  • MAINTAINER:维护者信息,可选
  • RUN:用来修改镜像的命令,可以用来安装程序,当一条RUN完成后,会在当前的镜像上创建一个新的镜像层,接下来的指令会在新的镜像层上执行。有2种形式。
    • RUN [“apt-get”, “update”],调用exec
    • RUN apt-get update,调用的/bin/sh
  • EXPOSE:用来指明容器内进程对外开放的端口。在docker run的时候可以加-p(可以将EXPOSE中没列出的端口设置为对外开放)和-P(EXPOSE里所指定的端口映射到主机上另外的随机端口???)来设置端口。
  • ADD:向新容器中添加文件,文件可以是
    • 主机文件:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
    • 网络文件:URL文件,在创建容器时会下载下来添加到镜像中。(如果是压缩文件,docker不会解压缩)
    • 目录:必须是相对Dockerfile所在目录的相对路径(如果是压缩文件,docker会解压缩)
  • COPY: 与ADD的区别是COPY的<src>只能是本地文件,其他用法一致
  • VOLUME:会在镜像里创建一个指定路径的挂载点。这个路径可以来自主机,也可以来自其他容器,多个容器通过同一个挂载点来共享数据,即便有个容器已经停止,其余容器还是可以访问挂载点,只有当挂载点所有的容器引用消失,挂载点才会自动删除。
  • WORKDIR:为接下来的指令指定一个新的工作目录。当启动一个容器后,最后一条WORKDIR指令所指向的目录为容器当前运行的工作目录。
  • ENV:设置环境变量,在docker run 时可以用-e来设置环境变量docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com
  • CMD:设置容器运行时默认运行的命令,CMD参数格式与RUN类似。CMD ls -l -a 或CMD ["ls", "-l", "-a"]
  • ENTRYPOIN:与CMD类似,指定容器运行时默认命令。ENTRYPOINT和CMD的区别,在于运行容器时,镜像后的命令参数,ENTRYPOINT是拼接,CMD是覆盖
  • USER:为容器的运行和RUN CMD ENTRYPOINT等指令的运行 指定用户或者UID
  • ONBUILD:触发器指令,父镜像中不会执行,只有在子镜像中才会执行。 给一个例子

© 著作权归作者所有

共有 人打赏支持
喵了_个咪
粉丝 327
博文 150
码字总数 199180
作品 4
杨浦
技术主管
私信 提问
Dockerfile 的详解

Dockerfile 的详解 使用Docker技术构建自己的镜像是最常见的应用场景,目前为止Docker官方也提供两种构建镜像的方法。一种是使用 指令将当前的容器状态保存为一个镜像,另外一种则是编写Doc...

Allocator
2017/04/06
0
0
Dockerfile 简版大全,附赠编写实例

Docker 逗你玩儿 - Git@OSC 联合灵雀云的 Docker 镜像征集活动,更有奖品赠送点击查看详情。 基础镜像可以用于创建Docker容器。镜像可以非常基础,仅仅包含操作系统;也可以非常丰富,包含灵...

oschina
2015/07/20
8.2K
11
使用 Dockerfile 定制镜像教程

使用 Dockerfile 定制镜像 从刚才的docker commit的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一...

王冠hurt的博客
2017/12/20
0
0
docker - 构建一个简单的docker镜像

docker构建镜像的方式有两种,一种是通过 docker commit 命令构建,另一种是通过 Dockerfile 构建文件构建。下面分别通过两种方式介绍这两种构建方式。 接下来,我们会分别采用上述的两种方式...

细肉云吞
2018/11/11
0
0
Docker修炼第一招: 先从Dockerfile开始

东坡有诗:日建镜像三百个,不辞长用Dockerfile。 觉得镜像构建枯燥乏味?困货,快来根Dockerfile吧! 作为一枚构建镜像的老司机,下面跟大家展示一篇Dockerfile实战。 Docker、Dockerfile、...

好雨云帮
2016/11/30
16.1K
2

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
25分钟前
0
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
2
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
3
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部