当前位置: 首页 > news >正文

dockerfile文件详解

dockerfile

Dockerfile是一种用于构建Docker镜像的文件,它包含一系列的指令,用于描述如何构建镜像。

dockerfile示例

# 指定基础镜像

FROM harbor.zhianoa.com/phoenix/ubuntu-python:3.7

# 镜像中创建/app目录,这一步可提前在基础镜像中创建好

RUN mkdir /app

# 拷贝当前目录下的指定文件到镜像中的/app目录

COPY requirements.txt /app

# 设置工作目录

WORKDIR /app

# 安装Python依赖

RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

# 拷贝当前目录下所有文件(代码)到镜像中的/app目录

COPY . /app

# 给/app目录下以run_开头的文件设置可执行权限

RUN /bin/chmod 777 run_*

镜像的分层设计

Dockerfile的指令每执行一条就会在镜像上新建一层。所以指令越多,层数越多,镜像越大。

例如:

FROM ubuntu:latest

RUN apt-get update

RUN apt-get install -y python3 python3-pip

RUN pip3 install -r requirements.txt

以上执行会创建 3 层镜像。可简化为以下格式:

FROM ubuntu:latest

RUN apt-get update \

    && apt-get install -y python3 python3-pip \

    && pip3 install -r requirements.txt

如上,以 && 符号连接命令,这样执行后,只会创建一层镜像。

指令

FROM

指定基础镜像,用于后续的指令构建。

MAINTAINER

指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)

LABEL

添加镜像的元数据,使用键值对的形式。

RUN

在构建过程中在镜像中执行命令。

EXPOSE

声明容器运行时监听的特定网络端口。

ENV

在容器内部设置环境变量。

VOLUME

为容器创建挂载点或声明卷。

WORKDIR

设置后续指令的工作目录。

USER

指定后续指令的用户和用户组。

ADD

将宿主机上的文件/目录/远程URL拷贝到镜像中。

例如:ADD http://example.com/foobar /app

格式:

ADD <源路径1>...  <目标路径>

ADD ["<源路径1>",...  "<目标路径>"]

COPY

将宿主机上的文件/目录复制到镜像中。

同ADD,区别是ADD可以是URL,COPY只能是本地文件。

格式:

COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]

<目标路径>:容器内的指定路径,路径不存在则自动创建。

CMD

指定容器创建时(运行时)的默认命令。(可以被覆盖)

为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

格式:

CMD <shell 命令>

CMD ["<可执行文件或命令>","<param1>","<param2>",...]

CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

ENTRYPOINT

设置容器创建时(运行时)的主要命令。(不可被覆盖)

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖。

如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。

如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。

示例:

假设已通过 Dockerfile 构建了 nginx:test 镜像:

FROM nginx

ENTRYPOINT ["nginx", "-c"] # 定参

CMD ["/etc/nginx/nginx.conf"] # 变参

1、不传参运行

$ docker run  nginx:test

容器内会默认运行以下命令,启动主进程。

nginx -c /etc/nginx/nginx.conf

2、传参运行

$ docker run  nginx:test -c /etc/nginx/new.conf

容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)

nginx -c /etc/nginx/new.conf

RUN和CMD的区别

CMD 在docker run 时运行。

RUN 在docker build 时运行。

相关文章:

  • C++类和对象(中)
  • Influxdb2修改管理员密码
  • 【MySQL】ANY函数 的巧用(筛选字段 > ANY(语句) 和 筛选字段 < ANY(语句))
  • 【80211-2022】【学习记录】【第九章】Duration/ID 字段(Qos STA)
  • L1-012 计算指数(Java)
  • go 中的 fmt 占位符
  • 【React】常见疑问的整理
  • thinkphp递归实现无限级子分类合并上级children
  • 【idea】idea插件编写教程,博主原创idea插件 欢迎下载
  • Openharmony 对应Android基本系统信息
  • 【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)
  • 路径规划(二):Dijkstra算法
  • 【sgPasswordInput】自定义组件:带前端校验密码强度的密码输入框,能够提供密码强度颜色提示和文字提示
  • 注解与反射接口AnnotatedElement
  • PTA✨C语言 就不告诉你
  • 收藏网友的 源程序下载网
  • 5、React组件事件详解
  • es6(二):字符串的扩展
  • Js基础知识(一) - 变量
  • oschina
  • Sass Day-01
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • uva 10370 Above Average
  • 给github项目添加CI badge
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 说说我为什么看好Spring Cloud Alibaba
  • ###C语言程序设计-----C语言学习(3)#
  • #vue3 实现前端下载excel文件模板功能
  • (13)Hive调优——动态分区导致的小文件问题
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET面试题(二)
  • /etc/sudoer文件配置简析
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Controller和@RestController的区别?
  • @EnableConfigurationProperties注解使用
  • [\u4e00-\u9fa5] //匹配中文字符
  • [1204 寻找子串位置] 解题报告
  • [Angular] 笔记 21:@ViewChild
  • [BIZ] - 1.金融交易系统特点
  • [C++]拼图游戏
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [HNCTF 2022 WEEK2]easy_include 文件包含遇上nginx
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • [luoguP1666] 前缀单词(DP)
  • [nlp] 损失缩放(Loss Scaling)loss sacle
  • [No000016]为什么假期计划总是做不到?