docker-Dockerfile

文章目录

  • Dockerfile 配置文件
    • 概览
      • 介绍
      • 目的
      • 作用
    • 构建镜像
      • commit
      • build
    • 常用指令
      • FROM 基础镜像(必需,一个)
      • MAINTAINER 描述(可选,一个)
      • LABEL 标签(可选,多个)
      • ENV 环境变量(多个)
      • RUN
      • ADD
      • WORKDIR
      • VOLUME
      • EXPOSE
      • CMD 与 ENTRYPOINT选其一
        • CMD
        • ENTRYPOINT
      • 拓展指令
        • ARG
        • USER
        • ONBUILD
        • STOPSIGNAL
        • HEALTHCHECK

Dockerfile 配置文件

概览

介绍

  • Docker为我们提供的一个用于自定义构建镜像的一个配置文件
  • 配置文件作用:描述如何构建一个对象
  • 利用Docker提供的build命令,指定Dockerfile文件,就可以按照配置的内容将镜像构建出来

目的

  • 作为开发者需要将自己开发好的项目打包成Docker镜像便于后面直接作为Docker容器运行
  • 作为运维人员需要构建更精简的基础设施服务镜像,满足公司的需求以及尽可能减少冗余的功能占用过多的资原

作用

  • 可以自定义镜像内容
  • 构建公共基础挽像减少其他镜像配置
  • 开源程序的快速部署
  • 实现企业内部项目的快速交付

构建镜像

commit

基于一个现有的容器,构建一个新的镜像
命令:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
例:
docker commit -a=“wolfcode” -m=“first image” centos7 mycentos:7

OPTIONS:
-a:镜像的作者
-c:使用Dockerfile指令来构建镜像
-m:提交时的描述
-p:在commit时智停容器

build

常用指令

FROM 基础镜像(必需,一个)

指定以什么镜像作为基础镜像,在改进项的是础之上构建新的镜像
如果不想以任何镜像作为基础:FROM scratch

语法:
FROM
FROM :
FROM :
以上为三种写法,后两者为指定具体版本,第一种则使用latest,也就是最新版

例如:
FROM openjdk:8

MAINTAINER 描述(可选,一个)

描述这个镜像的作者,以及联系方式(可选)

例如:
MAINTAINER wolfcodeliugang@wolfcode.cn

LABEL 标签(可选,多个)

为镜像设置标签,一个Dockerfile中可以配置多个LABEL

语法:
LABEL =

如:
LABEL “example.label”=“Example Label”
LABEL label-value=“LABEL”
LABEL version=“1.0.0”
LABEL description=“可以写成多行,使用\符号可l以拼接多行的value”

例如:
LABEL version=“1.0”
LABEL description=“这是我的第一个Dockerfile”

ENV 环境变量(多个)

设置容器的环境变量,可以设置多个
语法:
ENV
ENV = =…
两种语法的区别为第一种一次只能设置一个环境变量。第二种可以一次设置多个

例如:
ENV JAVA ENV dev
ENV APP NAME test-dockerfile

ENV JAVA ENV=dev APP NAME=test-dockerfile

RUN

构建境像的过程中要执行的shell命令
语法:
RUN
RUN [“executableFile”,“param1”,“param2”,“paramN”]
第一种写法就是直接写SheI即本即可
第二种写法类以函数调用,第一个数为可执行文件,后面的都是参数

例如:
RUN 1s -al
RUN mkdir /www/dockerfile/test

ADD

将主机中的指定文件复制到容器的目标位置
复制命令,把src的文件复制到镜像的dest位置,可以简单理解为cp命令
语法:
ADD
ADD [“”,“”]

例如:
ADD /www/wolfcode.cn/index.html /www/server
ADD [“/www/wolfcode.cn/index.html”,“/www/server”]

WORKDIR

设置容器内的工作目录,如果该目录不存在,那么会自己创建并进入该目录

例如:

WORKDIR /app
#在设置完工作目录后,执行pwd命令,打印的目录就是/app
RUN pwd

VOLUME

镜像数据卷绑定,将容器中指定的目录映射到主机中
注意这里只是创建了一个指向container内该路径的数据卷,如果定义了名字则为具名数据卷;
这里并没有进行挂载操作,dockerfile不允许在file中指定数据卷的挂载,数据卷的挂载需要在docker run命令中指定;

语法:以下三种写法都可
VOLUME [“

”]
VOLUME
VOLUME

例如:

EXPOSE

该镜像运行容器后,需要暴露给外部的端口,但仅仅表示该容器想要暴露某些端口,并不会与主机端口有映射关系
如果想将容器暴露的端口与主机映射则需要使用-p或-P参数来映射,可以暴露多个端口
语法:
EXPOSE /<tcp/udp>
EXPOSE [/<tcp/udp>]

例如:
EXPOSE 8080/tcp
EXPOSE 8080/udp

CMD 与 ENTRYPOINT选其一

CMD和ENTRYPOINT选择其一即可,作用是描述镜像构建完成后,启动容器时默认执行的脚本

CMD

该镜像启动容时默认执行的命令或参数
语法:
CMD [“executable",“param1”,“param2”]
CMD [“param1”,“param2”]
CMD
以上为该命令的三种写法.第一、二两种部是可执行文件+参数的形式,第三种与普通Shell命令类似;另外数组内的参数必须使用双引号。

例如:
CMD ping 127.0.0.1
CMD[“sh”,“-c”,“ping 127.0.0.1”]

ENTRYPOINT

运行容器时的启动命令,感觉与CMD命令会很像,实际上还是有很大区别,筒单对比一下:

相同点:
在整个Dockerfile中只能设置一次,如果写了多次则只有最后一次生效

不同点:
ENTRYPOINT不会被运行容器时指定的命令(docker run)所覆盖,而CMD会被 docker run中的命令所覆盖
如果同时设置了这两个指令,且CMD仅仅是选项而不是参数,CMD中的内容会作为NTRYPOINT的参数(一般不这么做)
如果两个都是完整命令,那么只会执行最后一条

语法:
ENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command paraml param2

例如:
ENTRYPONINT ping 127.0.0.1
ENTRYPOINT [“sh”,“-c”,“ping 127.0.0.1”]

拓展指令

ARG

设置变量,在镜像/docker file中定义一个变量
当使用docker build命令构建镜像时,带上–build-arg =来指定参数值,如果该变量名在Dockerfile中不存在则会抛出一个警告
语法:
ARG [=]

例如:
ARG jdk=8 #定义变量
FROM openjdk:$jdk # 使用 $ 引用变量

若在构建时指定,则优先使用指定的,否则使用默认
docker build -t --build-arg jdk=11 # jdk由原来默认的 8 指定为 11

USER

设置容器的用户,可以是用户名或UID,如果容器设置了以daemon用户去运行,那么RUN、CMD和ENTRYPOINT都会以这个用户去运行
一定要先确定容器中有这个用户,并且拥有对应的操作权限。

语法:
USER
USER

例如:
RUN useradd testuser #提前添加好用户
USER testuser #表示后续容器(docker file)中所有执行命令的用户都是以testuser进行操作的

ONBUILD

表示在构建镜像时做某操作,不过不对当前Dockerf1le的镜像生效,而是对以当前Dockerfile镜像作为基础镜像的子镜像生效

语法:
ONBUILD [INSTRUCTION]

例:
当前镜像为A,设置了如下指令
ONBUILD RUN ls -al
镜像B:
FROM 镜像A

构建镜像B时,会执行ls -al命令

STOPSIGNAL

STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
此信号可以是与内核的系统调用表中的位置匹配的有效无符号数,例如9,或SIGNAL格式的信号名,例如SSIGKILL。

默认的stop-signal是SIGTERM,在docker stop的时候会给容器内PID为1的进程发送这个signal,.通过–stop-signal可以设置自己需要的signal
主要的目的是为了让容器内的应用程序在接收到sigal之后可以先做一些事情,实现容器的平滑退出
如果不做任何处理,容器将在一段时间之后强制退出,会造成业务的强制中断,这个时间默认是10s

STOPSIGNAL

HEALTHCHECK

容器健康状况检查,可以指定周期检查容器当前的健康状况
该命令只能出现一次,如果有多次则只有最后一次生效。

语法:
HEALTHCHECK [OPTIONS] CMD command #在容器内部按照指定周明运行指定命令来检测容器健康状况
HEALTHCHECK NONE #取消在基础镜像

OPTIONS选项:
–interval=DURATION 两次检查的间隔时间,默认3Os
–timeout=DURATION 命令执行的超时时间,默认30s
–retries=N 当连续失败指定次数,容器会被认定为不健康,默认为3次

返回参数:
0:success=>健康状态
1:unhealthy=>不健康状态
2:reserved=>保留值

例如:
健康检查,每隔10s检查容器是否正常,每次不超过3s,并且如果失败了,最多不能超过5次
HEALTHCHECK --interval=10 --timeout=3 --retries=5 CMD ps-ef | grep java || exit 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461352.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序服务通知

项目中用到了小程序的服务消息通知&#xff0c;通知订单状态信息&#xff0c;下边就是整理的一下代码&#xff0c;放到项目中&#xff0c;把项目的小程序appid和小程序的secret写进去&#xff0c;直接运行即可 提前申请好小程序服务信息通知短信模板&#xff0c;代码需要用到模…

3000字帮你彻底搞懂Java抽象类与接口的区别(含JDK8接口新增三种方法与丰富案例)

Java-OOP 1-Final 1.1简介 final关键字是最终的意思&#xff0c;可以修饰&#xff1a;类、方法、变量。 修饰类&#xff1a;该类被成为最终类&#xff0c;特点是不能被继承了。修饰方法&#xff1a;该方法被称为最终方法&#xff0c;特点是不能被重写了。修饰变量&#xff…

有没有噪音低的宠物空气净化器推荐?希喂、IAM性能PK

有一说一&#xff0c;随着清洁家电市场的不断发展&#xff0c;市面上的各种清洁家电品类也是越来越多&#xff0c;像是吸尘器、洗地机、扫地机等等这些产品估计大家都很熟悉了。 但&#xff01;如果你家也跟我家一样也是养了几只猫猫狗狗&#xff0c;那你就会发现到&#xff0…

vscode摸鱼学习插件开发

不知道大家在摸鱼的时候&#xff0c;会不会想要学习&#xff1f; 或者有没有考公人&#xff0c;下班要学习的&#xff1f; 上班时间摸鱼&#xff0c;下班时间不够学习&#xff1f; 为此&#xff0c;我决定开发一个vscode插件&#xff0c;来刷粉笔题 粉笔插件名称&#xff1a;…

hive将包含逗号的字段拆分为多列

目录 一、概述 二、行动 1.准备数据 2.数据清洗 3.substring_index函数 4.split函数实现 一、概述 想将hive表中包含逗号的字段按逗号做分隔符进行分列操作 二、行动 1.准备数据 --1 select {1,2,3,4,5,6,7,8} as num_str --使用的数据2.数据清洗 --2 select num_s…

文心一言 VS 讯飞星火 VS chatgpt (381)-- 算法导论24.5 1题

一、给出图24-2的与图中两棵最短路径树不同的另外两棵最短路径树。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在图论中&#xff0c;最短路径树&#xff08;Shortest Path Tree, SPT&#xff09;是一种从单个源点到所有其他节点的最短路径形成的树。给定一个…

故障诊断 | MTF-TLSSA-DarkNet-GRU-MSA迁移学习故障识别程序(t分布+莱维飞行改进麻雀优化)

故障诊断 | 故障诊断实例代码 目录 故障诊断 | 故障诊断实例代码效果一览基本介绍程序设计参考资料 效果一览 基本介绍 利用了迁移学习和多项技术改进&#xff0c;包括麻雀搜索法、DarkNet19、GRU、多头注意力机制等&#xff0c;以提高故障识别的准确性和效率 模型框架&#x…

在Bash脚本中 set -e 是什么意思

问题 我正在研究这个预安装(preinst)脚本的内容&#xff0c;该脚本会在从 Debian 软件包(.deb)文件解压该包之前执行。 脚本包含以下代码&#xff1a; #!/bin/bash set -e # Automatically added by dh_installinit if [ "$1" install ]; thenif [ -d /usr/share…

使用yolov3配置文件训练自己的数据

目录 前言 一、准备数据集 二、创建文件结构 三、格式化文件 1.data文件夹 2.config文件夹 四、修改yolo的配置文件 1.train文件 2.json2yolo文件 3.datasets文件 前言 使用yolov3框架训练自己的数据大致分为这四步&#xff1a; 准备数据集创建文件结构格式化文件 …

【小白学机器学习29】 概率统计与图形 ( hist, bar, pie , box ,scatter ,line)

目录 1 频度/次数 1.1 频度统计表&#xff1a;频度分布表 1.2 频数分布图直方图 histogram / hist 1.3 对比&#xff0c;柱状图 bar graph /column chart 2 饼图 pie chart 2.1饼图特点 3 南丁格尔玫瑰图 4 茎叶图 stem-and-leaf display 5 箱型图 box plot 6 …

springboot098基于web的网上摄影工作室的开发与实现(论文+源码)_kaic

网上摄影工作室 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了网上摄影工作室的开发全过程。通过分析网上摄影工作室管理的不足&#xff0c;创建了一个计算机管理网上摄影工作室的方案。文章介绍了网上摄影工…

【再谈设计模式】单例模式~唯一性的守护者

一、引言 在软件工程中&#xff0c;软件开发&#xff0c;设计模式是提高代码复用性和可维护性的有效工具。单例模式&#xff08;Singleton Pattern&#xff09;作为一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供对该实例的全局访问。这一模式在…

UDP-鼠李糖合成酶基因的克隆与鉴定-文献精读76

何首乌中UDP-鼠李糖合成酶基因FmRHM1/2的克隆与鉴定 摘要 UDP-鼠李糖是一种由UDP-鼠李糖合酶&#xff08;RHM&#xff09;催化合成的鼠李糖供体&#xff0c;而鼠李糖是鼠李糖苷化合物的重要组成部分&#xff0c;植物中只有少数基因编码的酶参与UDP-鼠李糖生物合成。本研究基于…

创建多维数组的全部元素的索引np.indices

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 创建多维数组的 全部元素的索引 np.indices [太阳]选择题 根据题目代码&#xff0c;执行的结果是&#xff1f; import numpy as np arr np.arange(6).reshape((2, 3)) print(&quo…

C/C++ 矩阵的QR分解

#include <iostream> #include <vector> using namespace std;int main() /* 矩阵A的QR分解*/ {// 动态分配内存int m 3; // 行数int n 3; // 列数// 初始化矩阵Adouble A[3][3] {{1, 2, 2},{2, 1, 2},{1, 2, 1}};double R[3][3] { 0 };double Q[3][3] { 0 };…

2023-2024年教育教学改革、教学成果奖等项目申请书合集-最新出炉 附下载链接

2023-2024年教育教学改革、教学成果奖等项目申请书合集 下载链接-点它&#x1f449;&#x1f449;&#x1f449;&#xff1a;2023-2024年教育教学改革、教学成果奖等项目申请书合集-最新出炉.zip 资源介绍 本资源展示了2023-2024年高等教育领域的教育教学改革项目以及教学成…

某大型建设集团有限公司信息化技术方案(250页WORD)

方案介绍&#xff1a; 本信息化技术方案旨在构建一个集成度高、功能全面、操作简便的信息化系统&#xff0c;涵盖公司管理、业务运营、项目监控、数据分析等多个方面。通过引入云计算、大数据、物联网、人工智能等先进技术&#xff0c;实现资源的优化配置、流程的高效协同和数…

EDA --软件开发之路

之前一直在一家做数据处理的公司&#xff0c;从事c开发&#xff0c;公司业务稳定&#xff0c;项目有忙有闲&#xff0c;时而看下c&#xff0c;数据库&#xff0c;linux相关书籍&#xff0c;后面跳槽到了家eda公司&#xff0c;开始了一段eda开发之路。 eda 是 electric design …

Failed to install Visual Studio Code update

当关闭vsCode的时候&#xff0c;出现了下面的报错&#xff1a; 可能是之前将vscode文件换了位置导致的&#xff0c;并且vscode在桌面的图标也变成了下面这个&#xff1a; 解决方法&#xff1a; 找到上图路径的log文件并打开&#xff1a; 搜索电脑中的Code.exe文件 并粘贴到上…

神经网络进行波士顿房价预测

前言 前一阵学校有五一数模节校赛&#xff0c;和朋友一起参加做B题&#xff0c;波士顿房价预测&#xff0c;算是第一次自己动手实现一个简单的小网络吧&#xff0c;虽然很简单&#xff0c;但还是想记录一下。 题目介绍 波士顿住房数据由哈里森和鲁宾菲尔德于1978年Harrison …