首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

dockerfile文件参数详解

1. FROM的作用

FROM的作用是定义基础镜像(baseimage),表示当前容器是基于哪个基础镜像构建新的镜像。例如:Centos、Ubuntu等。定义的格式如下:

FROM 基础镜像名

注意:如果是制作基础镜像(base image)可以直接写 scratch 。一般我们都是在某个基础镜像上镜像制作新镜像。

如果只写镜像名,默认为最新版本,例如 FROM ubuntu 。也可以指定基础镜像版本号。例如:FROM ubuntu:20.04 或者 FROM centos:7

2. LABEL的作用

label的作用主要描述镜像的作者、版本号及简介信息等。

LABEL maintainer="作者的名称"

LABEL version="1.0"

LABEL description="简介"

3. RUN的作用

run的作用是打包镜像时运行系统命令。例如 apt-get update && apt-get install -y vim 等。一般都是给镜像安装一些软件包。由于是打包镜像时执行,所以run只会执行一次。

由于每一次run都会制作一个分成,因此建议大家把多个run命令合并为一个。如果安装的命令比较多,可以使用 \ 换行,具体表现如下:

RUN apt-get update && apt-get install -y vim && \

rm -rf /var/lib/apt/lists/*

4. WORKDIR

workdir的作用是定义工作目录,它的实际作用类似于 cd 命令,但是如果workdir的目录不存在,会自动创建目录。例如下方案例:

WORKDIR /app

WORKDIR blog

RUN PWD

上面的命令打印结构为 /app/blog , 最后实际的工作目录为 /app/blog 目录。如果blog不存在,会自动创建blog目录

RUN命令执行cd操作也可进入某个目录,但是不推荐大家使用RUN来定义实际的工作目录

workdir尽量使用绝对路径不要使用相对路径,相对路径容易出错

5. CMD

cmd和run的作用都是执行命令和参数,但是cmd是容器启动时执行的命令和参数,并且定义了多个cmd时只有最后一个cmd才会执行。此外,如果 docker run 运行容器时指定了其他执行的命令,cmd相关命令会直接忽略。cmd的格式和run一样,具体格式如下:

FROM ubuntu

RUN apt-get update && apt-get install -y vim && \

rm -rf /var/lib/apt/lists/*

CMD echo 'hello' && bash /app/test.sh

上述dockerfile文件打包的镜像,如果使用【docker run 镜像名】命令运行容器时会执行一次CMD相关命令。但是如果使用【docker run -it 镜像名 /bin/bash】以交互方式运行容器时会忽略CMD的命令

6. ENTRYPOINT

entrypoint和上面的run以及cmd一样都是执行命令和参数,区别于entrypoint是让容器以应用程序或者服务的形式运行,并且entrypoint一定会执行不会被忽略。entrypoint一般用于启动容器中的某个应用程序。格式如下所示:

FROM ubuntu

ENTRYPOINT /app/start.sh

/app/start.sh:为某个应用启动的脚本。关于脚本可以使用下方的COPY或者ADD命令将本地的脚本复制到镜像中

7. ADD 和 COPY

ADD和COPY的作用都是将本地的文件添加到docker镜像中。两者之间最大的区别就是:ADD除了copy功能之外还自带解压缩的功能。例如:ADD 一个压缩包到镜像中时,会自动解压缩到指定的目录中。具体格式如下:

ADD nginx.conf /usr/local/nginx/nginx.conf

ADD test.tar.gz /

COPY test.py /app

这两个命令还可以结合 WORKDIR 使用。这样可以节省根目录的定义。具体格式如下:

WORKDIR /app

ADD test.py test/

结合workdir后,最终test.py实际目录为:/app/test/test.py

8. ENV

env的作用是定义常量,其他命令可以通过 ${} 的形式使用常量。这样可以增加dockerfile的可维护性

ENV MYSQL_VERSION 5.6

RUN apt-get update && apt-get install -y vim && \

rm -rf /var/lib/apt/lists/* && apt-get install -y mysql-server="${MYSQL_VERSION}"

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OsXjp8dBXR-ODUuTrs8EKifw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券