LaoCat带你认识容器与镜像(四【下】)

news2024/11/13 10:22:50

基础概念章节是告一段落了,不知道各位童鞋是否阅读的顺畅,欢迎各位童鞋踊跃的提出意见和看法并指正。

本章内容

Dockerfile基础命令详解。

本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身

上节粗略介绍了Dockerfile相关命令,这节把一些常用的命令进行详细解释,我们还是以NginxDockerfile为主。


指令

FROM 【指定创建镜像的基础镜像】

Dockerfile必须首行可存在多条,大部分Dockerfile基础镜像可以选用体积较小的镜像如Alpine或Debian作为基础镜像,有些则可以使用基础依赖为基础镜像,比如启动Java项目就可以使用JDK作为基础镜像,Vue项目则可以使用node作为基础镜像。

--------------------------------------------------------------------------------------------------------------------------

LABEL 【为镜像添加标签信息】

标签你懂得,有快速筛选出某个特征镜像的东东,可存在多条。

--------------------------------------------------------------------------------------------------------------------------

ENV 【指定镜像的环境变量】

变量嘛~你也懂得,就是肯定会有调用它的地方,Dockerfile也一样,一般会在RUN中被调用到,后续镜像启动的容器中也会存在,可被docker run --env命令显式覆盖替换,不建议相同变量名被多次赋值,可存在多条。

--------------------------------------------------------------------------------------------------------------------------

RUN 【运行命令】

RUN有俩种格式,RUN 命令shell终端执行命令即/bin/sh -cRUN ["exec","参数1","参数2"]则是以exec执行,可以指定用何种终端执行命令,执行多条命令类似shell,可以使用\来进行换行,可存在多条RUN命令,每一条为一镜像层,跟CMD类似,在docker build时运行。

--------------------------------------------------------------------------------------------------------------------------

COPY 【复制内容到镜像】

复制以当前Dockerfile上下相对路径中的内容到镜像中的路径下,镜像中的目录不存在则自动创建,支持正则匹配,可存在多条,类似ADD,但不会对压缩内容进行解压。

--------------------------------------------------------------------------------------------------------------------------

ENTRYPOINT 【指定镜像默认入口命令】
其实就是镜像创建的容器启动时的初始命令,有俩种格式,参考RUN,不可存在多条,若存在多条,则以最后一条为准,可被docker run --entrypoint命令显式覆盖替换。

--------------------------------------------------------------------------------------------------------------------------

EXPOSE 【声明镜像监听端口】

该命令只有声明作用,并不能自动分配端口去映射,可以在运行容器时显式指定端口docker run -p 宿主机端口:容器端口,可存在多条。

--------------------------------------------------------------------------------------------------------------------------

STOPSIGNAL 【指定镜像创建的容器退出的信号值】

指定在执行docker stop执行停止容器时,会发给容器的信号,默认情况下会发出SIGTERM,其目的是为了让容器能够优雅的退出,但是如果容器在接受相应指令后(10s)内还是没有停止,此时Docker会帮它退出,此时会发送SIGKILL信号将容器杀死。

--------------------------------------------------------------------------------------------------------------------------

CMD 【指定启动容器时默认执行的命令】

CMD有三种格式,CMD ["exec","参数1","参数2"]相当于执行exec 参数1 参数2,如图中则为nginx -g daemon off;CMD exec 参数1 参数2相当于在shell中执行,一般用于交互的应用;CMD ["参数1","参数2"]ENTRYPOINT提供默认参数,不可存在多条,若存在多条,则以最后一条为准,可被docker run命令显式覆盖替换,跟RUN类似,在docker run时运行。

--------------------------------------------------------------------------------------------------------------------------

ADD 【添加内容到镜像】

复制以当前Dockerfile上下相对路径中的内容到镜像中的路径下,复制的内容可以是urltar压缩文件,普通文件;镜像中的目录不存在则自动创建,支持正则匹配,可存在多条,类似COPY,但会对压缩内容进行解压。

--------------------------------------------------------------------------------------------------------------------------

WORKDIR 【指定镜像的工作目录】

为后续Dockerfile中的指令指定工作目录,可存在多条,不推荐使用相对路径,若使用相对路径,则会基于之前的指定路径,推荐使用绝对路径。

--------------------------------------------------------------------------------------------------------------------------

VOLUM 【给镜像创建一个挂载点】

可以在镜像创建的容器运行时从本地主机或其他容器挂载数据卷。


构建

编写Dockerfile完成后,可以在该文件目录下执行docker build,也可以通过-f来指定Dockerfile的路径,命令如下。

通过-t指定镜像标签,末尾追加构建镜像的上下文路径,构建中ADDCOPYRUN都会生成一层新的镜像,构建成功后会返回相对应的镜像ID。

当一个Dockerfile存在多个FROM时,每一个FROM都代表一个阶段,不起别名的情况下(as),从上到下依次从0递增,即假设上图的第一个FROM不指定别名builder下,第二个FROM下的COPY则是COPY --from=0 /app/dist /data;不管指不指定别名,其都是从指定阶段拷贝资源到该阶段。

当然docker build也提供了大量的附加命令,比如指定其可使用的内存量、缓存量等,还有像上文的指定镜像的标签,镜像文件的路径等等,这里就不做展开了,感兴趣的童鞋自行去了解。

构建之父镜像

一般情况下构建新的镜像都需要指定其父镜像,其是生成镜像的基本,会直接影响镜像生成后的大小等,我们可以选择俩种父镜像来构建镜像,一种是基础镜像(如FROM scratch),另一种是普通镜像(如上文中图片里的nodenginxdebian等)。

类似于git.gitignoreDocker也有自己的忽略文件. dockerignore,同理可以让Docker忽略匹配的路径或文件,这里就不过多扩展。


写在文末。

接下来的更新就是实践篇了,文章将转变为代码为基础,我会尽可能的将注释写明,方便各位童鞋理解与掌握,敬请期待吧~;附大纲。


☆ 参考文献:
《Docker技术入门与实战》 第2版
《Docker技术入门与实战》 第3版

◎ 文中所用到的资源链接:
【Debian和 Alpine作为基准Docker映像的对比】
https://blog.csdn.net/jiagoushipro/article/details/125061841
【Docker Hub】
https://hub.docker.com/
【基础镜像之scratch】
https://hub.docker.com/_/scratch

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国电投-风机叶片开裂故障预警比赛(记录)

1 前言 1-1 简介 DataFountain平台举办的比赛,赛题:风机叶片开裂故障预警。以下是比赛链接:风机叶片开裂故障预警 Competitions - DataFountain 1-2 任务背景 SCADA是风场设备管理、监测、和控制的重要系统,通过实时收集风机运行的环境参数、…

oracle direct path read等待事件处理案例

一 问题描述 收到短信告警,提示direct path read(110)。 直接路径读取不过SGA缓存,直接从磁盘上读数据,每次查询都会产生大量的物理读,导致IO比较高,影响数据库性能。 二 排查思路 生成AWR报告及ASH报告&#xff0…

springboot 整合mybatis-plus的自动生成代码包含service和controller

版本信息springboot&#xff1a;<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent>mybatis相关依赖版本如下&#xff1a…

压缩包文件上传导致覆盖rce

制作恶意压缩包 tgao.jsp文件内容&#xff1a; <html> <body><%out.println("zip slip getshell.");%> </body> </html>编写python脚本将jsp文件内容内容压缩至DocSystem.war中&#xff0c;并指定name为../../DocSystem/tgao.jsp&am…

ElasticSearch - RestClient查询文档

目录 查询文档-快速入门 查询文档-match查询 查询文档-精确查询 查询文档-布尔查询 查询文档-排序和分页 查询文档-高亮显示 查询文档-快速入门 文档的查询基本步骤包括&#xff1a; (1)准备Request对象(2)准备请求参数&#xff0c;构建查询条件(3)发起请求&#xff0c;得…

OpenSSL下载安装教程

OpenSSL下载 &#xff08;加急&#xff09;下载地址&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 首先&#xff0c;进入官网 Shining Light Productions - Home &#xff0c;可以看到如下界面&#xff1a; 这里演示用的版本是V1.1的版…

nodejs+vue考研信息查询系统vscode项目

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 2 第3章 系统分析 3 3.1 需求分析 3 3.2 系统可行性分析 4 3.2.1技术可行性&#xff1a;技术背景 4 3.2.2经…

2023蓝桥杯学习与刷题建议

前两天天给你们组了队&#xff0c;经过两天发现各位都有这样的问题&#xff1a; 不愿意交流。小组不会规划刷题计划。可能是因为没有人带头和具体刷题计划&#xff0c;所以都处于迷茫&#xff0c;不交流、不刷题。还有可能是大家都不认识&#xff0c;都比较羞涩。同时也有我个…

OSCP_VULHUB_DC: 2

文章目录前言信息收集Web账号密码爆破ssh登录绕过rbash限制git提权前言 kali攻击&#xff1a;192.168.132.139 目标主机&#xff1a;192.168.132.146 环境配置参照https://www.vulnhub.com/entry/dc-2,311/ 下载&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 信息收…

开发第四天+第五天读书笔记

首先用C语言实现内存写入: 光是成功的让画面黑屏是不够的&#xff0c;还是要往画面上画点什么。首先修改naskfunc.nas。写成这样&#xff1a; ; naskfunc ; TAB4[FORMAT "WCOFF"] ; 创建对象文件的模式 [INSTRSET "i486p"] …

Linux进程间通信(基于管道通信)

目录 一、进程间通信 1.1 通信目的 1.2 通信发展 二、管道 2.1 管道的概念和分类 2.2 匿名管道 2.2.1 匿名管道&#xff08;基于父子血缘关系) 2.2.2 匿名管道单向性 2.2.3 匿名管道是内存级别文件 2.2.4 匿名管道指令实现 2.2.5 代码实现匿名管道&#xff08;pipe()…

一文讲清楚shell 中的变量是怎么回事

目录 变量和引用 一&#xff0c; 什么是变量 二&#xff0c; 根据数据类型分类 三&#xff0c; 根据作用域分类 1、环境变量 2、普通变量 四&#xff0c; 变量的定义 1、变量定义示例&#xff1a;变量名变量值 2、位置参数和预定义变量 五&#xff0c; shell中的引用 六&…

【GPLT 二阶题目集】L2-022 重排链表

输入格式&#xff1a; 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数&#xff0c;即正整数N (≤10^5 )。结点的地址是5位非负整数&#xff0c;NULL地址用−1表示。 接下来有N行&#xff0c;每行格式为&#xff1a; Address Data Next 其中Addres…

深拷贝和浅拷贝对比

JavaScript存储引用数据&#xff08;对象&#xff09;都是存地址的&#xff0c;存放在堆内存中的对象&#xff0c;在栈内存中存的是一个指针&#xff0c;这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。 深拷贝&#xff1a;对数据进行拷贝之后&#xff0c;修改拷贝之…

Python:从协议到抽象基类

本章话题是接口&#xff1a;鸭子类型代表特征动态协议&#xff1b; 使接口更明确、能验证实现是否副了规定的抽象基类ABC(Abstact Base Class).Python语言诞生15年后&#xff0c;Python2.6中才引入了抽象基类&#xff0c;抽象基类。对于java、C#类似的语言&#xff0c;会觉得鸭…

DevSecOps敏捷安全技术金字塔V3.0正式发布

2022年12月28日&#xff0c;由悬镜安全主办&#xff0c;3S-Lab软件供应链安全实验室、Linux基金会OpenChain社区、ISC、OpenSCA社区联合协办的第二届全球DevSecOps敏捷安全大会&#xff08;DSO 2022&#xff09;已通过全球直播的形式圆满举行。本届大会以“共生敏捷进化”为主题…

HTB_Markup_xml注入读ssh私钥进程注入

文章目录信息收集xml注入ssh 私钥连接提权信息收集 使用如下参数可以探测具体版本&#xff0c;只使用-sV -v无此效果 nmap -sC -A -Pn 10.129.95.192是个登录页面 弱口令&#xff0c;只有admin-password成功登录 几个页面&#xff0c;只有order.php页面可以与后端交互并传递x…

【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

目录 一、基于 Jenkinsk8sGitDocker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的…

VMware Workstation中安装Kali 2022

VMware Workstation中安装Kali 2022 前言 开工了&#xff0c;笔记本中的相关工具该更新了&#xff0c;今天记录一下。 首先记录的是在VMware Workstation中安装kali&#xff0c;这个过程比较简单。 我只是想扩充一下自己的博客&#xff0c;另外可以给入门人员一个参考。 下载…

react的JSX语法

1.jsx基本使用 1 createElement() 的问题 繁琐不简洁。不直观&#xff0c;无法一眼看出所描述的结构。不优雅&#xff0c;用户体验不爽。 2 JSX 简介 JSX 是 JavaScript XML 的简写&#xff0c;表示在 JavaScript 代码中写 XML&#xff08;HTML&#xff09; 格式的代码。 优…