【玩转Docker小鲸鱼叭】理解DockerFile如此简单

news2024/11/25 18:25:32

DockerFile构建过程

DockerFile 是Docker的一个配置文件,本质上来说它只是一个文本文件,它是用来构建Docker镜像的。DockerFile配置文件中包含了一系列的指令和配置信息,用于描述如何构建镜像以及如何运行容器。通过编写 Dockerfile,我们可以将构建 Docker 镜像的过程自动化,实现应用程序的快速部署和迭代。

在这里插入图片描述

⭐️ 一个简单的DockerFile文件示例:
 

这个DockerFile文件的释义为:该镜像会在 centos7.2-python3.6.8:latest 基础镜像上安装 nginx,并设置语言环境为 zh_CN.UTF-8。在容器启动后,会自动执行 sh /home/export/App/bin/start.sh 命令启动应用,并通过 sleep 9999999d 命令使容器保持运行状态。

此外,该镜像还声明需要监听的端口为 80 和 8080,供外部访问使用。

# 1.需要使用的基础镜像
FROM centos7.2-python3.6.8:latest

# 2.设置语言
ENV LANG zh_CN.UTF-8

# 4.安装nginx镜像
RUN yum -y install nginx

# 5.应用镜像开放端口,本应用使用了nginx做反向代理,所以只需要开放80端口即可
EXPOSE 80

# 6.应用镜像部署完成后会执行如下命令启动应用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d

⭐️ 构建镜像

DockerFile文件准备完毕后,就可以通过 docker build 命令来构建镜像了。

docker build -f Dockerfile .

在这里插入图片描述

这里有几点注意事项:

  1. docker build 默认会在当前目录下寻找名为 Dockerfile的文件,我们也可以通过 .f 参数来指定Dockerfile的文件路径和名称。

    docker build -f <Dockerfile path/name> <build context>
    
  2. docker build 命令最后有一个 . 表示的镜像构建上下文 Context 的路径(文件路径),Context的概念不难理解,在Docker的基本架构一文中我们知道Docker 是典型的C/S架构模式,那docker build命令就是把上下文所在路径下的内容打包,并传递给Docker 引擎,Docker 引擎拿到上下文包后,就能够获得构建镜像所需要的文件。

  3. 排除不必要的文件,加快构建速度。在上下文目录里再建立 .dockerignore 文件,排除那些不需要的文件。

DockerFile 的常用指令

在这里插入图片描述

⭐️ FROM

FROM 指令用于指定一个基础镜像,它就像“地基” 一样,是DockerFile文件的基础,所有的DockerFile文件都由FROM指令开始,那Dockerfile其实就是在基础镜像的基础上进行定制的。

在实际使用中 FROM 指令通常是指定centos、python/java等基础环境镜像。

# 需要使用的基础镜像
FROM centos7.2-python3.6.8:latest

⭐️ ENV

ENV 指令用于设置环境变量,它可以在构建过程中设置容器中的环境变量,这些环境变量可以在容器启动时使用。

语法格式为:

ENV <key> <value>
ENV <key>=<value> 

<key> 表示环境变量的名称,<value> 表示环境变量的值。多个 ENV 指令可以连续使用,也可以在同一条指令中使用空格或等号分隔多个环境变量。

在 Dockerfile 中使用 ENV 指令可以帮助我们在构建过程中设置一些常用的环境变量,例如 PATH、LANG 等。同时,在容器启动时,我们可以通过 $<key> 的方式来获取环境变量的值。

# 设置语言
ENV LANG zh_CN.UTF-8

⭐️ RUN

RUN 指令用于在容器中执行Shell命令或脚本,比如更新系统、安装应用、下载文件等等。

语法格式有如下2种

RUN <command>
RUN ["executable", "param1", "param2"]

<command> 表示要执行的命令或脚本,它可以是 shell 命令或任何可执行文件;["executable", "param1", "param2"] 表示一个数组,数组的第一个元素为要执行的可执行文件,后面的元素为参数。

例如:

RUN yum -y install nginx
RUN ["/bin/bash", "-c", "echo 'Hello, Docker!'"]

第一条命令将在容器中安装 nginx 软件包;第二条命令将在容器中执行 /bin/bash -c “echo ‘Hello, Docker!’” 命令,输出 “Hello, Docker!”。

RUN 指令的一些注意事项

  1. 容器中的命令执行顺序是从上到下,建议将常用的命令放在前面,以减少构建时间。

  2. 如果需要在容器中执行多个命令或脚本,可以使用 \ 符号将它们连接在一起,以便于阅读和维护。命令之间用 && 来连接。

    FROM centos7.2-python3.6.8:latest
    
    RUN apt-get update \
        && apt-get install -y \
           git \
           curl \
           wget
    
  3. 每一条 RUN 指令都会在新的一层镜像中执行,因此我们应该尽可能将多个命令合并为一条 RUN 指令,以减少镜像的层数。

    例如,将上面的两条命令合并为一条:

    RUN yum -y install nginx && /bin/bash -c "echo 'Hello, Docker!'"
    

⭐️ EXPOSE

EXPOSE 指令用于声明容器需要监听的网络端口。在 Dockerfile 中使用 EXPOSE 指令可以帮助我们记录容器需要监听的端口信息,并提供给其他开发人员或运维人员使用。同时,它也可以帮助我们规范化容器的端口定义,以便于管理和维护。

语法格式为:

EXPOSE <port> [<port>/<protocol>...]

<port> 表示需要监听的端口号,<protocol> 表示使用的协议,可以是 tcp 或 udp。

例如:

# 应用镜像开放端口,本应用使用了nginx做反向代理,所以只需要开放80端口即可
EXPOSE 80/tcp

这个命令将声明容器需要监听的端口分别为 80 ,使用的协议为 tcp 。

但是,EXPOSE 指令并不会实际将容器的端口暴露给主机或外部网络,如果需要将容器的端口映射到主机上,需要在运行容器时使用 -p 参数

⭐️ ENTRYPOINT

ENTRYPOINT 指令用于配置容器的入口点,即容器启动后需要执行的命令或脚本。我们通常会应用其来启动WEB应用。

语法格式为:

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

例如:通过 ENTRYPOINT 指定应用镜像部署完成后会执行命令启动应用。

# 应用镜像部署完成后会执行如下命令启动应用
ENTRYPOINT sh /home/export/App/bin/start.sh && sleep 9999999d

🎉 如果喜欢这篇文章,点赞👍 收藏关注 ✅ 哦,创作不易,感谢!😀

请添加图片描述

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

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

相关文章

RISC-V处理器的设计与实现(二)—— CPU框架设计

前面我们选好了要实现的指令集&#xff0c;并且了解了每个指令的功能&#xff08;传送门&#xff1a;RISC-V处理器的设计与实现&#xff08;一&#xff09;—— 基本指令集_Patarw_Li的博客-CSDN博客&#xff09;&#xff0c;接下来我们就可以开始设计cpu了。当然我们不可能一上…

ChatGPT更新的使用指南,与其他类似的人工智能的软件和服务-更新版(2023-6-25)

文章目录 一、什么是ChatGPT二、如何使用三、如何使用ChatGPT帮助我们的工作和生活四、高阶用法1、角色扮演2、英语口语老师3、在搜索引擎中集成ChatGPT 五、常见问题五、其他类似的软件和服务 如果你还不知道如何注册和使用&#xff0c;可看末尾&#xff0c;手把手教你。 一、…

Linux线程同步

同步的几种方式&#xff1a;信号量&#xff0c;互斥锁&#xff0c;条件变量&#xff0c;读写锁 同步&#xff1a;对程序的执行过程进行控制&#xff0c;保证对临界资源的访问同一时刻只能有一个进程或线程访问。 2.1信号量 存在P操作&#xff1a;获取资源&#xff0c;信号量…

58.最后一个单词的长度

LeetCode-58.最后一个单词的长度 1、题目描述2、解题思路3、代码实现4、解题记录 1、题目描述 题目描述&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任…

通讯录获取APP程序分析

前言 APP非法获取用户通讯录等隐私信息 我用技术分析APP是如何获取信息的 如果你不幸中招了&#xff0c;可以参考下方链接(有偿) 我的方法是替换掉通讯录数据&#xff0c;替换不成功包退&#xff01; 每日16:00-06:00在线&#xff0c;5分钟受理&#xff0c;2~3小时完成 点下面…

下载安装mysql与设置密码详细步骤(压缩包版本)

目录 一、前言 二、操作步骤 &#xff08;一&#xff09;下载与解压缩 &#xff08;二&#xff09;配置环境变量 &#xff08;三&#xff09;安装MySQL服务 &#xff08;四&#xff09;设置ini文件和data文件 &#xff08;五&#xff09;启动MySQL服务和设置密码 三、…

【C++ 程序设计】第 5 章:类的继承与派生

目录 一、类的继承与类的派生 &#xff08;1&#xff09;继承的概念 &#xff08;2&#xff09;派生类的定义与大小 ① 派生类的定义 ② 派生类的大小 &#xff08;3&#xff09;继承关系的特殊性 &#xff08;4&#xff09;有继承关系的类之间的访问 &#xff08;5&am…

多线程单例模式

1、单例模式 顾名思义&#xff0c;单例模式能保证某个类在程序中只存在唯一一份示例&#xff0c;而不会创建出多个实例。就像java的JDBC编程只需要创建一个单例类DataSourece从这个DataSorce中获取数据库连接。没必要创建多个对象。 单例模式具体实现方式分为“饿汉”和“懒汉…

java编译与反编译

参考&#xff1a; Idea 使用技巧记录_source code recreated from a .class file by intell_hresh的博客-CSDN博客 深入理解Java Class文件格式&#xff08;一&#xff09;_昨夜星辰_zhangjg的博客-CSDN博客 实践详解javap命令&#xff08;反编译字节码&#xff09;_天然玩家…

【运筹优化】元启发式算法详解:迭代局部搜索算法(Iterated Local Search,ILS)+ 案例讲解代码实现

文章目录 一、介绍二、迭代局部搜索2.1 总体框架2.2 随机重启2.3 在 S* 中搜索2.4 ILS 三、获得高性能3.1 初始解决方案3.2 Perturbation3.2.1 扰动强度3.2.2 自适应扰动3.2.3 更复杂的扰动方案3.2.4 Speed 3.3 接受准则3.4 Local Search3.5 ILS 的全局优化 四、ILS 的精选应用…

Windows PE怎么修复系统?使用轻松备份解决!

​什么是Windows PE? Windows预先安装环境&#xff08;英语&#xff1a;Microsoft Windows Preinstallation Environment&#xff09;&#xff0c;简称Windows PE或WinPE&#xff0c;是Microsoft Windows的轻量版本&#xff0c;主要提供个人电脑开发商&#xff08;主要为OEM厂…

electron+vue3全家桶+vite项目搭建【20】窗口事件广播,通用事件封装

引入 electron中的渲染进程与主进程之间的数据交互需要利用ipc通信&#xff0c;互相订阅/通知来实现&#xff0c;我们不妨封装一个通用事件广播&#xff0c;利用自定义的事件名称来让主进程遍历窗口挨个推送对应内容&#xff0c;来实现事件的广播。 demo项目地址 实现思路 …

【计算机视觉】MaskFormer:将语义分割和实例分割作为同一任务进行训练

文章目录 一、导读二、逐像素分类和掩码分类的区别2.1 逐像素分类2.2 掩码分类2.3 区别 三、DETR四、MaskFormer五、MaskFormer用于语义和实例分割六、总结 一、导读 目标检测和实例分割是计算机视觉的基本任务&#xff0c;在从自动驾驶到医学成像的无数应用中发挥着关键作用。…

模拟电路系列分享-运放的关键参数5

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 例如&#xff1a; 实际运放与理想运放具有很多差别。理想运放就像一个十全十美的人&#xff0c;他学习100 分&#xff0c;寿命无限长&#xff0c;长得没挑剔&#xff0c;而实…

【c++11】移动构造的性质 和 与拷贝构造的比较(详解)

文章目录 定义性质移动构造的定义实例代码分析移动构造 与 拷贝构造的比较移动赋值 和 拷贝赋值 应用场景 定义 移动构造&#xff08;Move Constructor&#xff09;是一种特殊的构造函数&#xff0c;它通过接收一个右值引用参数来创建新对象&#xff0c;并从传入的对象中“移动…

操作系统——Windows 线程的互斥与同步

一、实验题目 Windows 线程的互斥与同步 二、实验目的 (1) 回顾操作系统进程、线程的有关概念&#xff0c;加深对 Windows 线程的理解。 (2) 了解互斥体对象&#xff0c;利用互斥与同步操作编写生产者-消费者问题的并发程序&#xff0c;加深对 P (即 semWait)、V(即 semSig…

[Spec] WiFi P2P Discovery

学习资料&#xff1a;Android Miracast 投屏 目录 学习资料&#xff1a;Android Miracast 投屏 P2P discovery Introduction Device Discovery procedures Listen State Search State Scan Phase Find Phase 总结 P2P discovery Introduction P2P发现使P2P设备能够快速…

WiSA Technologies开始接受WiSA E多声道音频开发套件的预订

美国俄勒冈州比弗顿市 — 2023年6月13日 — 为智能设备和下一代家庭娱乐系统提供沉浸式无线声效技术的领先供应商WiSA Technologies股份有限公司&#xff08;NASDAQ股票代码&#xff1a;WISA&#xff09;宣布&#xff1a;该公司现在正在接受其WiSA E开发套件的预订。WiSA E使用…

论文不详细解读(一)——MoCo系列

1. MoCo v1 论文名称&#xff1a; Momentum Contrast for Unsupervised Visual Representation Learning 开源地址&#xff1a;https://github.com/facebookresearch/moco 大佬详细解读&#xff1a;https://zhuanlan.zhihu.com/p/382763210 motivation 原始的端到端自监督方…

听说软件测试岗位基本都是女孩子在做?

“听我一朋友说&#xff0c;测试岗位基本都是女孩子做。” 不知道是不是以前“软件测试岗”给人印象是“不需要太多技术含量”的错觉&#xff0c;从而大部分外行认为从业软件测试的人员中女生应占了大多数。比如有人就觉得&#xff1a;软件测试主要是细心活&#xff0c;所以女生…