Dockerfile

Dockerfile是一个文本文件,用来定制镜像。

镜像是分层存储的,前一层会是下一层的基础。而镜像的定制就是定制每一层镜像在上一层做了什么改变。

Dockerfile其内包含一条条指令,每条指令构建一层,定义对上一层做了什么改变。

以定制spring cloud的eureka注册中心为例:

工程结构为idea默认生成的eureka工程,使用maven package 生成jar包:

Dockerfile如下:

#以java8为父镜像
FROM java:8 #将maven打包的jar包复制到/register.jar
ADD ./target/register-0.0.1-SNAPSHOT.jar /register.jar #暴露容器的8761端口
EXPOSE 8761 #执行java -jar /register.jar命令
CMD ["java", "-jar", "/register.jar"]

在当前目录执行docker build -t register .

可以看到每一条指令都生成了一个镜像,我们可以使用docker images -a查看所有的镜像。

但我们再次执行docker build -t register .时会发现每一条指令都显示Using cache,这就是镜像分层存储的意义——构建缓存。

常用指令

  1. FROM 指定基础镜像
  2. RUN 执行命令
    1. RUN ,如:RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    2. RUN ["可执行文件", "参数1", "参数2"]
  3. COPY 复制文件
    1. COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
    2. 源路径可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 filepath.Match 规则
  4. ADD 更高级的复制文件
    1. ADDCOPY基本一致,区别在ADD源路径可以是url,且如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。
    2. 在 Docker 官方的 Dockerfile 最佳实践文档 中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。
  5. CMD 容器启动命令
  6. ENTRYPOINT 入口点
    1. ENTRYPOINTCMD的目的一样,都是指定容器启动程序与参数。
    2. 当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令
  7. ENV 设置环境变量
  8. ARG 构建参数
  9. VOLUME 定义匿名卷
  10. EXPOSE 暴露端口

详细介绍,可以查看Docker——从入门到实践

镜像构建上下文

上面我们构建镜像时使用docker build -t register ..就是在指定构建的上下文,其作用在于执行docker build 命令时会将该目录下的内容打包交给 Docker 引擎,以便后续的ADD/COPY找到需要复制的文件。

下图红线标记可以看出发送了43mb的文件给Docker引擎。

ps:只会打包构建上下文下的文件和文件夹,不会打包父目录,所以使用ADD ../register.jar会报找不到文件。

参考资料

Docker——从入门到实践

Docker,一个傲娇的男人

Docker 入门教程(3)——Dockerfile的更多相关文章

  1. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  2. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  3. Docker入门教程(四)Docker Registry

    Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...

  4. Docker入门教程(一)介绍

    http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了 ...

  5. Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

  6. Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

  7. Docker 入门教程与实践

    title: Docker 入门教程与实践 tags: Docker ---- 在Windows上安装Docker客户端 1.下载Docker TollBox: https://docs.docker ...

  8. [转帖]Docker 入门教程

    Docker 入门教程 http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html 自己学的还是太肤浅啊.. 作者: 阮一峰 日期: 201 ...

  9. docker 入门教程(5)——总结与学习资料

    总结 registry:docker镜像仓库,集中存储和管理镜像,类似maven仓库. image:docker镜像,定义容器运行的文件和参数,可以看作是面向对象编程的类. container:doc ...

  10. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

随机推荐

  1. Mybatis学习笔记(1)

    CRUD操作 1.从实体类参数中取值 #{属性名} select * from user where username = #{username} 2.当sql语句只有一个参数且参数类型是基本类型或基 ...

  2. phpstorm设置xdebug调试

    phpstorm设置xdebug调试# wamp开发环境安装完成以后,打开网页,输入 :localhost 检测xdebug是否开启 3.若xdebug已开启,请找到你wamp或者phpstudy的安 ...

  3. Office2019 相关激活秘钥

    零售版 W8W6K-3N7KK-PXB9H-8TD8W-BWTH9 批量板 N9J9Q-Q7MMP-XDDM6-63KKP-76FPM

  4. java-IO流(commons-io-2.6)使用教程

    工具库下载: https://pan.baidu.com/s/1tXXF4zjIfJ9ouObsU5RTpA  提取码:214v 1.打开IDEA 2.在模块下新建个lib文件夹将框架复制进去 3.点 ...

  5. SpringBoot--swagger搭建、配置及使用

    一. 作用: 1. 接口的文档在线自动生成. 2. 接口测试. 二.模块介绍 Swagger是一组开源项目,其中主要要项目及功能如下: 1.Swagger Codegen: 通过Codegen 可以将 ...

  6. Mysql百万级数据查询优化

    1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题 ...

  7. Tomcat启动流程简析

    Tomcat是一款我们平时开发过程中最常用到的Servlet容器.本系列博客会记录Tomcat的整体架构.主要组件.IO线程模型.请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识. ...

  8. Numerical Sequence (Hard vision) 题解

    The only difference between the easy and the hard versions is the maximum value of \(k\). You are gi ...

  9. git clone下载速度很慢的解决方法

    一直用git clone从github上下载源码学习,但是有时候git clone速度好慢,只有几Kb的速度,按这个速度下载安卓源码的话估计要下一年. 然后我再网上找各种教程,试过通过vps下载git ...

  10. 介绍python由来, 安装python3.8.3 及其变量的定义, 小整数池

    介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字,来自Guido所挚爱 ...