文档章节

编写Dockerfile的方法

t
 tommwq
发布于 2017/02/15 15:56
字数 821
阅读 27
收藏 0
点赞 0
评论 0

1 语法格式

Dockerfile的语法格式如下

# 注释
命令 参数

其中,<命令>是不区分大小写的。但为了同后面的参数区分开来,通常写成大写字母。

2 注释

在Dockerfile中,以#开头的行是注释。注释不会影响docker build的执行过程。

2.1 注释中的指示

注释中如果出现格式为

# directive=value

的内容,会被当作指示进行处理。

2.1.1 escape指示

escape指示的用法为

# escape=\

# escape=`

3 环境变量

部分指令支持在参数中使用环境变量。环境变量的语法格式如下:

$variable_name
${variable_name}

环境变量支持一些变形用法,如

${variable:-word} # 如果variable已设置,表达式以variable为结果,否则表达式以word为结果。

${variable:+word} # 如果变量variable已设置,表达式以word为结果。

支持环境变量的命令有

ADD
COPY
ENV
EXPOSE
LABEL
USER
WORKDIR
VOLUME
STOPSIGNAL

4 dockerignore文件

在使用docker build构建镜像时,docker会将工作目录(包括其中的文件和子目录)作为context发送给构建进程。对于构建过程中不会被用到的文件,可以把这些文件的名字写在.dockerfile文件中,以加速构建过程。 dockerignore文件中每个文件名占一行,并支持通配符,如

*~
*/*/temp/*
temp?

5 命令

5.1 首个命令FROM

Dockerfile的第一个命令必须是FROM。FROM命令用于定义基准镜像。后续一切命令都是在基准镜像上进行操作。 FROM命令的用法为

FROM <image>[:<tag>]

FROM <image>@<digest>

5.2 MAINTAINER命令

MAINTAINER指令指明了Dockerfile的维护者。MAINTAINER命令的用法为

MAINTAINER <name>

5.3 RUN命令

RUN命令用于在基础镜像中执行程序。RUN命令的语法为

RUN <command>

RUN ["executable", "param1", "param2"]

5.4 CMD命令

CMD命令用于为可执行容器指定默认行为。CMD指令在一个Dockerfile中最多出现一次,其语法为

CMD ["executable", "param1", "param2"]

CMD ["param1", "param2"] # 以param1、param2为参数执行ENTRYPOINT

CMD command param1 param2

5.5 LABEL命令

LABEL命令为镜像增加一组键值对作为元信息。

LABEL <key>=<value> <key2>=<value2>

5.6 EXPOSE命令

EXPOSE命令告诉docker容器需要监听指定的端口。

EXPOSE <port> [<port>...]

5.7 ENV命令

ENV命令用于设置环境变量。

ENV <key> <value>
ENV <key>=<value>

5.8 ADD命令

复制文件、目录或URL。

ADD <src>... <dest>

5.9 COPY命令

复制文件、目录或URL。

COPY <src>... <dest>

5.10 ENTRYPOINT命令

ENTRYPOINT定义了容器运行的程序。

ENTRYPOINT command param1 param2

5.11 VOLUME命令

VOLUME命令将外部存储挂载为容器内的目录。

VOLUME ["/data"]

5.12 USER命令

设置执行RUN/CMD/ENTRYPOINT命令时使用的用户。

USER <username_or_userid>

5.13 WORKDIR命令

设置执行RUN/CMD/ENTRYPOINT命令时使用目录。

WORKDIR <path/to/work/directory>

5.14 ARG命令

设置构建期参数。

ARG <name>[=<default value>]

6 Dockerfile示例

6.1 使用Alpine构建Go开发环境

FROM alpine

MAINTAINER Wang Qian

VOLUME ["/home/git", "/data/repo"]

RUN apk update
RUN apk add go
RUN apk add make
RUN apk jenkins
RUN apk git
RUN apk openssh

RUN addgroup git
RUN adduser -h /home/git -s /bin/false -S -G git git

CMD /bin/sh

7 参考

© 著作权归作者所有

共有 人打赏支持
t
粉丝 2
博文 18
码字总数 12894
作品 0
广州
DockerFile实战(二):DockerFile编写要求与基本风格

之前分享了一个Nginx的Dockerfile实战文章,但这是基于原有镜像的基础上去添加修改的,那么本文 来详细讲解一下,如何从ubuntu镜像生成一个Nginx镜像 Step1: #最开始,还是需要先搜索一个可...

Leon_zhang50773 ⋅ 2016/07/08 ⋅ 0

九步构建自己的hello world Docker镜像

构建 Docker 镜像 Docker镜像构建是通过 Dockerfile来构建的,里面运行的程序是可以自定的,从编写程序到安装Docker镜像,可以一气呵成。接下来我们就通过九步实现一个自定义的镜像的制作、构...

上官瑾文 ⋅ 04/17 ⋅ 0

快速构建docker镜像:maven插件

越来越多的项目开始了docker容器化部署的进化,在容器化之前我们部署一个项目,可能由源代码产出一个jar或者war即可直接发布了,启动之后是一个java进程;容器化之后,由源代码产出的是一个d...

rabbitGYK ⋅ 04/15 ⋅ 0

7 docker-使用dockerfile创建镜像

在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写。 本节中,我们需要依次完成下面几项任务: Dockerfile 基本框架 Dockerfile 编写常用命...

DevOPS666 ⋅ 2017/08/22 ⋅ 0

利用Docker部署mongodb集群--分片与副本集

环境 Docker version 1.6.2 mongodb 3.0.4 第一步 编写Dockerfile并生成镜像 主意包含两个Dockerfile镜像,一个mongod的,一个mongos(在集群中负责路由) 编写Mongod的Dockerfile: FROM ub...

robin-yao ⋅ 2015/06/22 ⋅ 6

Docker 基础知识-入门篇

1. Docker简介和KVM区别 1.1 docker的三大理念 构建 运输 运行 ps:有点类似于java代码,一次构建到处运行 1.2 docker结构 相关说明: image: 和虚拟机的镜像类似 container: 用镜像创建的实例...

wzaqj ⋅ 06/06 ⋅ 0

自制redis的docker镜像

去官网下载redis的源码安装包,我这儿下载的是:redis-2.8.18.tar.gz 方法一:使用 commit命令创建 1.先启动一个centos的容器 这儿使用的centos基础镜像和制作rabbitmq的基础镜像一样 可以看...

双月通天 ⋅ 2016/07/07 ⋅ 0

使用docker容器定制镜像(image)并部署简单 web应用

概念简述 镜像 一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。 Docker镜像是一个只读的模板。比如一个镜像可以包含...

zhaokx3 ⋅ 2017/05/25 ⋅ 0

使用 Gradle 构建 Spring-Boot 的 Docker 镜像

通常我们使用 Dockerfile 来构建项目的Docker 镜像,但是也有需求希望使用 gralde 在编译项目的时候一起把镜像给构建并上传,所以该教程讲解了使用 gradle 编写配置 Dockerfile 并生成镜像的...

mcjiffy ⋅ 01/05 ⋅ 0

Dockerfile:制作可ssh登录的镜像

我们先手动制作一个可以ssh登录的容器,然后按照操作步骤编写Dockerfile,用docker build根据Dockerfile创建镜像,最后我们可以用这个镜像来生成可ssh登录的容器了。 一、首先创建一个容器并...

张斌_青岛 ⋅ 2014/12/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 19分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 23分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 28分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 30分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 40分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部