【云原生丶Docker】DockerFile完全指南

news2024/12/23 11:16:00

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/689073.html

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

相关文章

【c++11】新的类功能和可变参数包

c11 新增默认成员函数类成员变量初始化关键字defaultdelete 委托构造 可变参数包递归展开参数包逗号表达式展开参数包 结语 新增默认成员函数 原来c类中&#xff0c;有6个默认成员函数&#xff1a; 构造函数析构函数拷贝构造函数拷贝赋值重载取地址函数const 取地址重载 默认…

将mp4视频推流rtsp,并转为http直播流,在前端显示

最近有个需求&#xff0c;在vue页面的video组件播放直播流&#xff0c;本来想用flv.js&#xff0c;但是必须要flv格式才行&#xff0c;所以还是用原生video播放http直播流。 1. 将本地mp4推流rtsp 下载并解压EasyDarwin&#xff0c;双击EasyDarwin.exe运行&#xff0c;在控制…

【python】web应用开发DRF框架

DRF 【python】web应用开发DRF框架 Django rest_framework, 简称 drf, 可以更方便的使用django写出符合 RESTful 规范的接口, (缩减编写api接口的代码) Django REST framework是一个建立在Django基础之上的Web应用开发框架(Django的一个app)&#xff0c;可以快速的开发REST A…

【IMX6ULL驱动开发学习】12.Linux驱动之设备树

承接上一篇博客 【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09; 代码获取&#xff1a;https://gitee.com/chenshao777/imx6-ull_-drivers 我后面将三个层合并了&#xff08;实际上只有前两层&#xff09;&#xff0c;合并…

【Java入门】注释、关键字、常量、变量、数据类型

注释&#xff1a; 作用 : 可以记录代码所实现的功能&#xff0c;方便程序员或代码编写者阅读代码以及方便他人更好理解代码 注释分类&#xff1a; 单行注释 格式&#xff1a; //注释信息多行注释 格式&#xff1a; /注释信息/文档煮熟 格式&#xff1a;/** 注释信息*/ /***…

TCP的socket API

1、核心类 ServerSocket &#xff1a;服务器使用的socket Socket : 服务器和客户端都会使用的socket accept进行的工作是拉客 对应操作系统来说&#xff0c;建立TCP连接是内核的工作 accept要干的就是等连接建立好了&#xff0c;把这个连接给拿到应用程序中。 如果当前连接…

chatgpt赋能python:Python获取文件后缀名

Python获取文件后缀名 在Python编程中&#xff0c;经常需要获取文件的后缀名&#xff0c;例如在处理文件上传、下载、压缩等操作时&#xff0c;需要对文件后缀名进行判断和处理。本文将介绍Python获取文件后缀名的两种常用方法。 方法一&#xff1a;使用split()函数 Python的…

【C语言初阶(2)】循环语句:while 循环

文章目录 1. while 语句介绍1.1 语法结构1.2 while 语句执行的流程 2. while 语句中的 break 和 continue2.1 break 介绍2.2 continue 介绍 我们已经掌握了 if 语句&#xff0c;当条件满足的情况下&#xff0c;if 语句的后的语句执行&#xff0c;反之不执行&#xff1b; 但是 i…

ChatGPT最新版多功能批量写作工具激发创作的无限可能

随着科技的不断发展&#xff0c;人工智能逐渐渗透到各个领域&#xff0c;其中包括写作领域。近年来&#xff0c;OpenAI推出的ChatGPT最新版多功能批量写作工具&#xff0c;为写作者们带来了全新的创作体验。这一工具不仅能够帮助写作者提高工作效率&#xff0c;还能够激发创作的…

chatgpt赋能python:Python获取定位的SEO指南

Python获取定位的SEO指南 什么是SEO SEO&#xff0c;即搜索引擎优化&#xff0c;是通过对网站进行优化&#xff0c;提高排名&#xff0c;从而增加搜索引擎来的流量&#xff0c;并达到提高转化率的目的。在这个数字时代&#xff0c;对于大多数网站来说&#xff0c;SEO已经成为…

idea maven 中模块显示灰色,依赖不加载

idea maven 中模块显示灰色&#xff0c;依赖刷新了几次都无法加载引入 后面发现是被MAVEN设置忽略了 去掉忽略文件然后reimport &#xff0c;就正常了

通过cifar-10数据集理解numpy数组的高(H)、宽(W)、通道数(C)

文章目录 1、CIFAR-10数据集介绍1.1 CIFAR-10数据集的构成1.2 batches.meta1.3 data_batch_n.py & test_batch.py 2、获取一张图片的data数据2.1 反序列化获得numpy数据2.2 清楚numpy中的H、W、C的含义2.3 清楚RGB图片在numpy中的表示 3、处理图片数据的代码 1、CIFAR-10数…

IDEA启动报错:Process finished with exit code 0

问题 SpringBoot项目启动后自动关闭 方案一 在pom中添加spring-boot-starter-web依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId> </dependency>方案二 在pom中…

CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!) A-D

1842A - Tenzing and Tsondu 题意 丁真和珍珠宝可梦对决, 每个宝可梦都有x战力, 假设有两个宝可梦, 其战力分别为a和b(a>b), 战力为a的宝可梦获胜后战力-b, 而战败的宝可梦会消失 最后还有宝可梦的人获胜 问你丁真和珍珠谁赢了 题解 显而易见, 赢下来的宝可梦可以继续打…

GcWord 6.1.4 Crack -GrapeCity Documents for Word

用于 Microsoft Word 文档的 .NET 6 API 通过代码完全控制您的 Word 文档&#xff0c;而不依赖于 Microsoft Word。 生成、加载、编辑和保存 Word 文档 基于 Microsoft Office API 的功能丰富的对象模型 从头开始或使用生成报告 报告模板 兼容多种平台&#xff0c;例如 Window…

vue-cli2 碎碎念念

vue create 和 vue init webpack 的区别&#xff1a; https://blog.csdn.net/qq_45955152/article/details/123506724 https://blog.csdn.net/qq_22182989/article/details/103611934 区别1&#xff1a; 区别2&#xff1a; 实践&#xff1a;

CadLib 4.0.2023.31601 net for Windows Crack

CadLib 4.0 for Windows&#xff1a;在 C# VB .NET 中读取、写入和显示 AutoCAD DWG 和 DXF 文件 CadLib 4.0 for Windows仅在Windows上运行&#xff0c;并且基于.NET 4.x。 CadLib 4.0读取、写入和显示 C#、VB.NET 或任何其他 .NET 语言的 AutoCAD™ DWG 和 DXF 文件。下载试…

Selenium教程__浏览器窗口大小(6)

本文将介绍如何使用Selenium来获取和设置浏览器窗口的大小&#xff0c;以及一些实际应用场景。 学习本文内容将能够轻松地控制浏览器窗口的大小&#xff0c;从而更好地适应不同的屏幕分辨率和设备&#xff0c;并确保网页在各种窗口大小下都能够良好地展示。 import time fro…

机器学习(二)逻辑回归

Logistic Regression 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;并常用于二分类。 Logistic 回归的本质是&#xff1a;假设数据服从这个分布&#xff0c;然后使用极大似然估计做参数的估计。 逻辑回归API介绍 sklearn.linear_model.LogisticRegression(sol…

配置apache只允许通过域名通过ssl访问

配置好IP&#xff0c;配置好bind解析 Yum安装相关软件包 进入证书目录 先用date –s 设置正确的系统时间。 创建私钥 创建证书 把私钥转换成不需要密码的 把私钥移动到私钥目录 编辑/etc/httpd/conf.d/ssl.conf 设置根目录&#xff0c;主机名。 限制80端口访问。在最后插入 设…