Dockerfile制作镜像

Dockerfile制作镜像

Dockerfile介绍

dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成,因此,层越多,效率越低,创建镜像,层越少越好。因此能在一个指令完成的动作尽量通过一个指令定义。
使用docker build命令,用户可以创建基于基础镜像的自定义镜像。

Dockerfile指令

FROM
指定基础镜像,Dockerfile的第一条命令

格式:
  FROM
  FROM :

若使用第一种格式,则基础镜像的tag为latest
MAINTAINER
镜像维护者信息

格式:
MAINTAINER
RUN
构建镜像时在镜像中运行的shell命令

格式:
RUN
RUN [“executable”, “param1”, “param2”]

第一种格式(shell形式)默认使用/bin/sh -c 执行命令,推荐使用第一种格式
第二种格式(exec形式)使用exec执行命令

若想使用其他shell类型执行命令,请使用第二种格式即 RUN [“/bin/bash”,“-c”,“command”]

多条RUN命令可以合并,如:
RUN command1
&& command2
&& command3
ENV
设置镜像的环境变量

格式:
ENV
ENV = …

第一种格式一次只能设置一个环境变量
第二种可以设置多个环境变量,若需换行使用反斜杠()
EXPOSE
设置启动镜像时要暴露的端口,用于与外界交互

格式:
EXPOSE […]

VOLUME
申明容器挂载点

格式:
VOLUME [“/path1/to/dir1”,“/path2/to/dir2”]
USER
指定启动镜像时运行用户

格式:
  USER [:]
  USER [:]

使用用户之前请确保镜像中有该用户,创建用户可以 RUN groupadd -r 用户 && useradd -u uid -r -g 用户组 用户
使用USER指定用户后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户
WORKDIR 
设置进入容器的默认目录

格式:
WORKDIR </path/to/workdir>
ADD 
拷贝本地文件或目录到镜像中

格式:
ADD
  ADD [“”, “”] 用于支持包含空格的路径

src是Dockerfile文件所在的同一级目录或者同级目录的子目录路径
tar类型的文件会自动解压到dest目录下

注意:
1.src是个文件,且dest以 / 结尾, 则docker会把dest当作目录,会把src文件拷贝到dest目录下。
如果dest不存在,则会自动创建
2.src是个文件,且dest不以 / 结尾,则docker会把dest当作文件,会把dest文件替换为src文件。
如果dest不存在,则创建名为src的文件
3.src是个目录,且dest不存在,则docker会自动以dest创建一个目录,把src目录下的文件拷贝进来。
如果dest是个已经存在的目录,则docker会把src目录下的文件拷贝到dest下

COPY
拷贝本地文件或目录到镜像中

格式:
  COPY

与ADD功能相似,但是不能解压tar类型的文件
CMD
启动容器时执行的shell命令

格式:
CMD [“executable”,“param1”,“param2”] (exec形式执行可执行文件,优先)
CMD command param1 param2 (shell形式执行命令)

Dockerfile中只能有一条CMD命令,如果指定多条,只有最后一条生效,推荐使用第一种格式
第二种格式默认使用/bin/sh -c 执行命令
若要改变shell类型,请使用第一种格式即 CMD [“/bin/bash”,“-c”,“command”,“param1”,“param2”]
CMD会被docker run命令行指定的参数所覆盖

ENTRYPOINT 
启动容器时执行的shell命令

格式:
ENTRYPOINT [“executable”,“param1”,“param2”] (exec形式执行可执行文件,优先)
ENTRYPOINT command param1 param2 (shell形式执行命令)

第二种格式默认使用/bin/sh -c 执行命令
Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效
同CMD类似,但是不会被docker run命令行指定的参数所覆盖,可以被docker run --entrypoint 覆盖
若Dockerfile中既有CMD(通常位置会在ENTRYPOINT之后)又有ENTRYPOINT,则CMD会被当做参数传递给ENTRYPOINT

ARG
构建镜像时,指定变量

格式:
  ARG
  ARG =

第一种格式:变量值可以在docker build --build-arg name=value时指定

制作镜像

制作镜像的基础命令:
  Dockerfile在当前目录下:
  docker build -t 镜像名:tag .

Dockerfile不在当前目录下(-f 指定Dockerfile文件路径,xxx/为构建docker镜像时的上下文路径,即该目录下的文件可以在Dockerfile中COPY/ADD):
  docker build -t 镜像名:tag -f xx/Dockerfile xxx/

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值