Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像

Dockerfile由一行行命令语句组成,支持#开头的注释

Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行命令

Dockerfile中的关键字

FROM

格式 FROM <image> 或 FROM <image>:<tag>

第一条指令必须为FROM指令,并且如果同一个Dockerfile中创建多个镜像时,可以使用多个FROM,每个镜像一次

MAINTAINER

格式 MAINTAINER <name> 指定维护者信息

RUN

格式 RUN <command> 或 RUN ["executable", "param1", "param2"]

前者使用shell终端执行命令,即/bin/sh -c; 后者使用exec执行命令;指定其他终端使用第二种方式实现,例如 RUN ["/bin/bash" "-c", "echo hello"]

每条RUN指令将在当前镜像基础上面执行命令,并提交为新的镜像,当命令较长时可以使用 \ 换行

CMD

支持三种格式

CMD ["executable", "param1", "param2"] 使用exec执行,推荐

CMD command param1 param2 在/bin/sh中执行,提供给需要交换的应用

CMD ["param1", "param2"] 提供给ENTRYPOINT的默认参数

指定容器时执行的命令,每个Dockerfile只能有一条CMD命令,如果有多条,最后一条生效

如果用户启动容器指定了运行的命令,则CMD指令被覆盖

EXPOSE

格式 EXPOSE <port> ... 容器暴露的端口号,当启动容器时,如果指定了-P参数,则会随机指定端口映射到暴露的端口上

ENV

格式 ENV <key> <value> 指定环境变量,可以被后续的RUN指令使用

ADD

格式 ADD <src> <des> 该命令复制指定的src到容器中的des,启动src可以是一个相对路径,可以是一个url,也可以是一个tar文件(会自动解压为目录)

COPY

格式 COPY <src> <des> 复制本地文件到容器中,当本地文件时目录时,推荐使用COPY

ENTRYPOINT

两种格式

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2 (shell中执行)

配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖

每个Dockerfile只有一个ENTRYPOINT,多条时最后一个生效

CMD和ENTRYPOINT的区别

如果同时有CMD和ENTRYPOINT指令,ENTRYPOINT指令级别高

如果Dockerfile中有CMD指令,则CMD指令的参数会附加到ENTRYPOINT指令的后面

如果docker run命令携带参数,这个参数会覆盖掉CMD命令的参数,并且会附加到ENTRYPOINT这里后面

ENTRYPOINT指令不会被docker run提供的指令覆盖

VOLUME

格式 VOLUME ["/data1", "/data2"] 自动匿名挂载,自动生成挂载点---暂时不知道用途

USER

格式 USER daemon

指定容器运行时的用户名或UID,后续的RUN也会使用指定用户

WORKDIR

格式 WORKDIR /path/to/workdir

为后续的RUN, CMD, ENTRYPOINT指令配置工作目录

可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径

WORKDIR /a WORKDIR b WORKDIR c 最终路径为 /a/b/c

ONBUILD

格式 ONBUILD [INSTRUCTION]

配置当创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令

该命令的意思为:如果别的Dockerfile使用该文件创建的镜像时,会自动执行ONBUIDL后面的命令

创建镜像

目录使用当前目录查找,如果当前目录为空,则子目录查找

如果工作目录和Dockerfile是同一级, 使用./表示当前目录下查找

创建文件 Dockerfile,可以使用-f参数来指定使用的Dockerfile文件(默认配置文件名为Dockerfile)

# Dockerfile文件, 同时本地镜像中有一个镜像名为 centos:6.7, 基于该镜像创建一个新建镜像
# Dockerfile的原理是根据提供的镜像创建一个容器,执行完指定的命令后,再重新打包出一个新的镜像并删除运行的容器
FROM centos:6.7 MAINTAINER djoker EXPOSE RUN yum -y install epel-release
#RUN yum -y install supervisor openssh openssh-server openssh-clients
RUN yum -y install supervisor run sed -i 's/nodaemon=false/nodaemon=true/' /etc/supervisord.conf CMD ["/usr/bin/supervisord"]

执行命令创建新的镜像

# -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
# 后面是Dockerfile所在的目录, 当工作目录和Dockerfile在同一级时,使用./来表示从当前目录查找,
# 执行 docker build -t myrepo/myapp:laster ./
docker build -t myrepo/myapp /tmp/test1

Docker系列三:Dockerfile的更多相关文章

  1. Docker系列07—Dockerfile 详解

    本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...

  2. Docker系列(三)常用命令

    命令说明 docker pull 格式: docke pull [OPTIONS] NAME[:TAG] 作用:下载名称为 name 的镜像 例子: sudo docker pull dl.docke ...

  3. Docker系列(四)Dockerfile

    基本语法 使用 #来注释 FROM 指令告诉Docker使用哪个镜像作为基础 接着是维护者信息 RUN 开头的指令会在创建中运行,比如安装软件包 FROM 格式: FROM<image>或 ...

  4. Docker 系列三(容器管理).

    一.运行容器 1.基于镜像新建一个容器并启动 : tomcat:8.0 -i:交互式操作 -t:终端 -rm:容器退出后随之将其删除,可以避免浪费空间 -p :端口映射 -d :容器在后台运行 指明了 ...

  5. Docker应用三:Dockerfile使用介绍(以安装redis为例)

    Dockerfile使用介绍 一.Dockerfile介绍 Dockerfile用于自定义创建docker镜像,是由一行行命令组成的文件. Docker file中的命令根据作用分为四类: 1.1.指 ...

  6. docker系列三之docker的安装

    docker的安装 读者只需按照以下的命令一步步执行即可实现安装,笔者也只是将官网的步骤复制出来(笔者的环境为Centos7),详细请参考:https://docs.docker.com/instal ...

  7. Docker系列三:Docker容器管理

    Docker容器管理 1. 单一容器管理 1) 容器的启动 $ docker run --name gitlab-redis -d --volume /srv/docker/gitlab/redis: ...

  8. Docker系列(三):Docker自定义容器镜像

    将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...

  9. windows下部署.netcore+docker系列三 (unbuntu 18.4 下安装ftp)

    // 先更新下系统sudo apt-get update//安装ftpsudo apt-get install vsftpd// 启动 服务sudo service vsftpd start//ftp ...

随机推荐

  1. Java中Scanner类在nextInt()后无法输入nextLine()的问题

    首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是 ...

  2. nexus3安装 - CentOS7环境

    nexus3安装 - CentOS7环境 使用nexus3管理docker镜像,配合rancher进行部署. 建资料卷 资料卷默认地址:/var/lib/docker/volumes/资料卷名/_da ...

  3. POJ-2492 A Bug's Life(种类并查集)

    http://poj.org/problem?id=2492 题意: 给出一个T代表几组数据,给出一个n一个m,代表人的编号由1~n,m条命令,每条命令由两个数值组成,代表这两个人性别不同,问所有命令 ...

  4. SQLServer多条件查询技巧

    2019-10-15  13:31:04 在实际项目开发中,有很多页面都会出现多条件查询功能,类似于这种情况: 牵扯到数据就少不了数据库了.这么多条件的查询,如果要用常规的if else来写判断逻辑的 ...

  5. Java学习十五

    学习内容: MyBaits 以前从来没有接触过mybatis,通过今天的学习知道这是一个框架,适用于关注SQL优化和需要频繁更新的项目. 今天做一个关于mybatis项目的入门小程序,效果很不理想. ...

  6. 客户主题分析(tableau)—客户留存

    客户留存分析(客户漏斗分析),关键在于找到影响客户留存的因素,设计场景测试,验证关键因素.即可以通过关键因素影响留存,从而重塑客户漏斗到更有价值的形状. 案例:母婴产品客户留存分析 数据结构:  1) ...

  7. Kerbernetes的Service资源管理

    Kerbernetes的Service资源管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Service概述 1>.为什么需要Service资源 我们知道在Kube ...

  8. 《Docekr入门学习篇》——Docker常用命令

    Docker常用命令 Docker镜像管理 搜索镜像:docker search 获取镜像:docker pull 查看镜像:docker images 删除镜像:docker rmi 构建镜像:do ...

  9. 提示Asp.net4.5未在web服务器上注册

    在用vs2012代开项目时, 每回都显示Asp.net4.5未在web服务器上注册,最后是由于没有下载一个补丁的原因,只需要下载安装补丁 VS11-KB3002339.exe ,下载地址:https: ...

  10. KVM---利用 libvirt+qemu-kvm 创建虚拟机

    KVM 虚拟化已经是一个工业级的虚拟化解决方案了,以前都是直接下载 VMware,然后安装其他操作系统的,今天我们来体验一下自己动手创建一台虚拟机,这样你就会知道在KVM下创建一台虚拟机,是多么简单的 ...