Docker 精通系列

  • Docker 精通之入门
  • Docker 精通之微服务
  • Docker 精通之常用命令
  • Docker 精通之 Dockerfile

1.基本说明

  Dockfile 是一个用于编写 docker 镜像生成过程的文件,其有特定的语法。在一个文件夹中,如果有一个名字为 Dockfile 的文件,其内容满足语法要求,在这个文件夹路径下执行命令,就可以按照描述构建一个镜像了。

docker build --tag name:tag .
# name是镜像的名称,tag是镜像的版本或者是标签号,不写就是lastest。注意后面有一个空格和点。

dockerfile 简单文件实例

FROM node:8.4COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
CMD node demos/01.js
  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
  • COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  • WORKDIR /app:指定接下来的工作路径为/app。
  • RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
  • EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口。
  • CMD node demos/01.js:它表示容器启动后自动执行node demos/01.js

RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。下面详细介绍。

2.Dockfile 语法

  Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面对这些指令的用法一一说明。

2.1 FROM

  用法:FROM <image>

  说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个 Dockerfile 中构建多个镜像。

2.2 MAINTAINER

  用法:MAINTAINER <name> <email>

  说明:描述镜像的创建者,名称和邮箱

2.3 RUN

  用法:RUN "command" "param1" "param2"

  说明:RUN 命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

2.4 CMD

  用法:CMD command param1 param2

  说明:CMD 在 Dockerfile 中只能出现一次,有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。

2.5 EXPOSE

  用法:EXPOSE <port> [<port>...]

  说明:告诉Docker服务器容器对外映射的容器端口号,在 docker run -p 的时候生效。

2.6 ENV

  用法:EVN <key> <value> 只能设置一个

       EVN <key>=<value>允许一次设置多个

  说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。

定义环境变量的同时,可以引用已经定义的环境变量。在ENV指令中,可以直接引用如下环境变量:

  1. HOME,用户主目录
  2. HOSTNAME,默认容器的主机名
  3. PATH,
  4. TERM,默认xterm
ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8
ENV TERM xterm
ENV PYTHON_VERSION 3.5.3
ENV name1=ping name2=on_ip

2.7 ADD

  用法:ADD <src>   <dest>

  说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。

2.8 COPY

  用法:COPY <src> <dest>

  说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。

2.9 ENTRYPOINT

  用法:ENTRYPOINT "command" "param1" "param2"

  说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效。

2.10 VOLUME

  用法:VOLUME ["path"]

  说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。

2.11 USER

  用法:USER daemon

  说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令。

2.12 WORKDIR

  用法:WORKDIR path

  说明:为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR  /home  WORKDIR test 。最终的路径就是/home/test。path路径也可以是环境变量,比如有环境变量HOME=/home,WORKDIR $HOME/test也就是/home/test。

2.13 ONBUILD

  用法:ONBUILD [INSTRUCTION]

  说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。

3.Dockerfile例子

  一个使用安装包安装的tomcat例子:

FROM centosMAINTAINER nobody "xx@qq.com"
RUN mkdir -p /opt/jdk/
RUN mkdir -p /opt/tomcat/
ADD jdk1.7.0_79 /opt/jdk/
ADD tomcat  /opt/tomcat/
ENV CATALINA_HOME /opt/tomcat
ENV JAVA_HOME /opt/jdk
EXPOSE 8080
ENV PATH $PATH:$JAVA_HOME/bin
CMD ["/opt/tomcat/bin/catalina.sh","run"]

Docker 精通之 Dockerfile相关推荐

  1. Docker 精通之常用命令

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile 配置文件路径 /etc/sysconfig/do ...

  2. Docker 精通之微服务

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile Docker 是一个容器工具,提供虚拟环境.很多 ...

  3. Docker 精通之入门

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile 2013年发布至今, Docker 一直广受瞩目 ...

  4. Docker用Dockerfile定制镜像

    用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...

  5. Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像

    文章目录 Pre Docker 官方镜像 Dockerfile dockerfile制作tomcat镜像 准备软件 编写Dockerfile文件 dockerfile构建镜像 启动镜像 测试访问tom ...

  6. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  7. Docker : Dockerfile 定制镜像

    使用 Dockerfile 定制镜像 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程.   镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们 ...

  8. Docker使用Dockerfile构建简单镜像

    Docker使用Dockerfile构建简单镜像 首先确保系统已经安装docker 构建镜像 安装基础镜像 sudo docker pull ubuntu 查看镜像是否已经拉取成功 REPOSITOR ...

  9. Docker使用Dockerfile构建镜像

    2019独角兽企业重金招聘Python工程师标准>>> Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条 ...

最新文章

  1. Mybatis:颠覆你心中对事务的理解
  2. python3 ssl.CertificateError: hostname manifest.googlevideo.com doesn t match either
  3. cmake中添加 -g编译选项
  4. NOI2020 前最后的日子
  5. 实用的IDE工具助力你学习Python!
  6. MySQL数据库迁移到PostgreSQL
  7. 空间谱专题16:间距选取分析
  8. P2323-[HNOI2006]公路修建问题【并查集】
  9. 【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试
  10. python编写计算器输入1或2代表+或x_Python实现两款计算器功能示例
  11. mysql实际是用命令还是图形化_那些你不常用却非常有用的MySql语句和命令
  12. 更新Android SDK之后Eclipse提示ADT版本过低的一个简易解决办法
  13. Retinex算法介绍
  14. 利用FinalData恢复shift+delete误删的文件
  15. 人证合一验证目前逐渐普及大众
  16. python尺与米的转换_在线长度换算-公里换算-米换算-纳米换算-长度单位在线换算工具...
  17. 为抖音而生的多闪,如何获取抖音的用户数据?
  18. 北大计算机专业研究生录取分数线,北京大学考研分数线是多少
  19. VirtualBox安装CentOS5.5 Insert Guest Additions CD image…(HOST+D)
  20. malloc与calloc

热门文章

  1. 科目三电子路考哪些情况会被评判不合格
  2. 代码面试最常用的10大算法
  3. 王淮经验谈:我的码农原则
  4. Vector用法详解
  5. 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)
  6. H.264的两个概念:DC系数和AC系数。 MV预测过程详解(附图)
  7. IntelliJ IDEA 工具篇之如何切换 git 分支
  8. 基于BISS0001构成的热释电红外延时照明控制器电路图
  9. 蓝桥杯-组素数-java
  10. 基于sqlite数据库的C语言编程