文档章节

Dockerfile 指令简介

傻傻知不道
 傻傻知不道
发布于 2017/05/18 19:19
字数 964
阅读 22
收藏 0

一、常用指令

  • FROM指令说明
FROM <image>
FROM <image>:<tag>
  1. 已经存在的镜像
  2. 基础镜像
  3. 必须是第一条非注释指令

 

  • MAINTAINER指令说明
MAINTAINER <name>

 指定镜像的作者信息,包括镜像的所有者和联系信息

  • RUN指令说明
RUN <command> (shell模式)
RUN ["executable","param1","param2"] (exec模式)

shell模式

     /bin/sh -c command

     例如:RUN echo hello

exec模式

    例如:RUN ["/bin/bash","-c","echo hello"]

两条RUN指令合并为一条RUN指令,例如:

RUN yum update && yum install -y nginx

  • EXPOSE指令说明
EXPOSE <port> [<port>...]

指定运行该镜像的容器使用的端口

二、COM、ENTERYPONINT用来指定在容器运行时运行的命令

  • COM指令说明
CMD ["executable","param1","param2"] (exec模式)
CMD command param1 param2 (shell模式)

说明:CMD指令指定容器运行的默认行为,CMD指令会被RUN命令参数覆盖

  • ENTERYPOINT指令说明
ENTERYPOINT ["executable","param1","param2"] (exec模式)
ENTERYPOINT command param1 param2 (shell模式)

ENTERYPOINT指令不会被docker run 命令中指定的启动命令所覆盖,可以使用docker run --entrypoint覆盖

三、ADD、COPY、VOLUME用来设置镜像的目录和文件

都是将文件或目录复制到使用Dockerfile构建的镜像中

  • ADD指令说明
ADD <src>...<dest>
ADD [<src>...<dest>] (适用于文件路径中有空格的情况)

注意:ADD指令自动对压缩包进行解压缩

  • COPY指令说明
COPY <src>...<dest>
COPY [<src>...<dest>] (适用于文件路径中有空格的情况)

ADD vs COPY

ADD 包含类似tar的解压功能

如果单纯复制文件,Dokcer推荐使用COPY

docker推荐使用 curl、wget 来获取文件

 

  • VOLUME指令说明

VOLUME["/data"]

用来想基于镜像创建的容器添加卷,一个卷可以存在一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供如共享数据、数据持久化的功能

 

四、镜像在构建及容器运行时的环境设置

  • WORKDIR指令说明
WORKDIR /path/to/workdir

在容器内部设置工作目录

在构建中为后续的指令指定工作目录

通常使用绝对路径,如果使用相对路径,那么路径会一直传递下去

例如:

WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

/a/b/c

 

  • ENV指令说明

用来设置环境变量,作用于构建构 成中或运行过程中

ENV <key> <value>
ENV <key>=<value>...
  • USER指令说明

指定容器以什么用户的身份来运行

例如: USER nginx

USER user          USER uid

USER user:group    USER uid:gid

USER user:gid      USER uid:group

如果不指定USER,那么默认使用root用户

五、类似触发器的指令

  • ONBUILD指令说明

为镜像添加触发器

当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令

例子:

此Dockerfile文件指令实现基于Docker官方的的Jenkins镜像,构建包含Maven功能的自定义镜像功能。

#
# MAINTAINER        Howard.Ma <howardma@xxxx.com>
# DOCKER-VERSION    1.12.6
#
# Docker base docker.io/jenkins : Dockerfile for building Jenkins_Maven images
#

# 必须是第一条非注释指令
FROM docker.io/jenkins

# 指定镜像的作者信息,包括镜像的所有者和联系信息
MAINTAINER Howard.Ma <howadma@xxxx.com>

# 指定容器以什么用户的身份来运行
USER root

# 在容器内部设置工作目录,在构建中为后续的指令指定工作目录
WORKDIR /var/maven3

# 将文件或目录复制到使用Dockerfile构建的镜像中,注意ADD指令自带解压缩功能
ADD apache-maven-3.5.0-bin.tar.gz /var/maven3

# 用来设置环境变量,作用于构建构过程或运行过程中
ENV MAVEN_HOME=/var/maven3/apache-maven-3.5.0
#ENV MAVEN_OPTS=[-Xms256m -Xmx512m]
ENV PATH=$PATH:$MAVEN_HOME/bin

# 运行指令
RUN echo "MAVEN_HOME=/var/maven3/apache-maven-3.5.0\nMAVEN_OPTS=-Xms256m -Xmx512m\nPATH=$PATH:$MAVEN_HOME/bin" >> /etc/profile

欢迎大家关注懒也要有正确的方式公众号

© 著作权归作者所有

傻傻知不道
粉丝 4
博文 17
码字总数 15533
作品 0
东城
程序员
私信 提问
使用 Dockerfile定制Java Web镜像

一、前言 对使用 Docker 搭建 Java Web 运行环境(利用 commit 理解镜像构成 来源:黄勇 )博文的归纳: 1、启动容器: docker run <相关参数> <镜像 ID> <初始命令> -i:表示以“交互模式”运...

吴伟祥
2018/11/16
0
0
企业分布式微服务云SpringCloud SpringBoot mybatis (十一)docker部署spring cloud项目

构建eureka-server镜像成功。 同理构建service-hi镜像 pom文件导入同eurek-server 修改下配置文件: 一、docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植...

1000145038859921
01/14
0
0
(十一)JAVA ssm b2b2c多用户商城系统源码-docker部署spring cloud项目

构建eureka-server镜像成功。 同理构建service-hi镜像 pom文件导入同eurek-server 修改下配置文件: 一、docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植...

sccspuercode
01/28
0
0
dockerfile制作

一、Dockerfile 简介及书写规则 Dockfile 是一种被Docker 程序解释的脚本,Dockerfile 由一条一条的指令组成,每条指令对应Linux 下面的一条命令。Docker 程序将这些Dockerfile 指令翻译真正...

Mr_chen
2017/07/07
0
0
Docker: 精通ENTRYPOINT指令

ENTRYPOINT简介: docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令。 一个Dockerfile中只能有一个ENTRYPOINT命令。如果有多条,只有最后一条有效。 无...

CHENYUFENG1991
2017/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0
增加 PostgreSQL 服务进程的最大打开文件数

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7 要在systemd的配置里加才行...

helloclia
今天
2
0
组合模式在商品分类列表中的应用

在所有的树形结构中最适合的设计模式就是组合模式,我们看看常用商品分类中如何使用。 先定义一个树形结构的商品接口 public interface TreeProduct { List<TreeProduct> allProducts(...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部