docker系列:dockerfile及其用法解析

docker系列
关于dockerfile的简介

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/133201059


【介绍】:本文介绍dockerfile及其用法。

上一节:《 上一节标题 | 下一节:《 下一节标题


1. 概述

2. 基础镜像

Dockerfile通常以选择一个基础镜像作为起点开始。基础镜像包含了操作系统和一些常见的软件包,可以用作构建容器的起点。

2.1 基础镜像是Docker容器构建过程的起点

基础镜像是Docker容器构建过程的起点,它定义了容器镜像的基础操作系统和一些常见软件包的内容。选择合适的基础镜像对于构建容器镜像至关重要,因为它决定了容器中可用的操作系统环境和可用的软件包。以下是有关基础镜像的详细信息:

  1. 基础操作系统:基础镜像通常包含一个操作系统,例如Ubuntu、Alpine Linux、CentOS、Debian等。可以根据你的需求选择适合的操作系统。不同的操作系统基础镜像提供不同的工具和软件包,因此要根据项目的要求做出明智的选择。

  2. 轻量化基础镜像:一些基础镜像被设计成轻量化,如Alpine Linux。这些镜像通常较小,因为它们仅包含了最基本的文件和软件包,这有助于减小容器的大小。轻量化基础镜像对于需要快速启动和资源占用较低的应用程序非常有用。

  3. 官方基础镜像:Docker Hub上有许多官方维护的基础镜像,例如官方的Ubuntu、Debian、CentOS等。这些官方镜像由操作系统的维护者提供,并受到广泛的支持和更新。通常,使用官方基础镜像是一个好主意,因为它们经过了广泛的测试和维护。

  4. 自定义基础镜像:有时候,可能需要创建自定义的基础镜像,以满足特定的需求。可以通过在Dockerfile中使用FROM指令来构建自定义基础镜像,然后在其中安装和配置所需的软件包和工具。

  5. 多阶段构建:对于一些应用程序,可以使用多阶段构建来减小最终容器镜像的大小。多阶段构建允许使用一个基础镜像来构建应用程序,然后在另一个基础镜像中复制应用程序的编译结果,这样可以减少镜像中不必要的依赖项。

2.2 选择基础镜像

选择适合应用程序需求的基础镜像是Docker容器构建的重要一步。可以在构建Dockerfile时使用 FROM 指令来指定所需的基础镜像,并根据项目需求进行自定义和配置。基础镜像应该满足应用程序的运行时需求。例如,如果应用程序需要特定版本的Python或其他运行时环境,需要选择包含这些要求的基础镜像。基础镜像的安全性非常重要。它应该是经过安全审查和更新的官方或受信任的镜像。使用已知的、受信任的基础镜像可以降低容器的潜在漏洞。另外,较小的基础镜像通常更适合轻量化容器,因为它们减小了容器镜像的大小,从而降低了网络传输和存储成本。

以下是一些具体的例子

  1. Python Web应用程序

    如果您正在构建一个Python Web应用程序,通常会选择官方的Python基础镜像。可以根据应用程序需要的Python版本选择合适的官方镜像,例如:

    • 如果需要Python 3.11,可以选择 python:3.11 镜像作为基础镜像。
    FROM python:3.11
    
  2. Node.js应用程序

    对于Node.js应用程序,可以选择包含Node.js运行时环境的官方Node.js基础镜像。例如,如果应用程序需要Node.js 18版本,可以选择以下镜像:

    FROM node:18
    
  3. Java应用程序

    对于Java应用程序,可以选择官方的OpenJDK基础镜像,根据需要选择Java版本。例如,如果应用程序需要Java 11,可以选择以下镜像:

    FROM openjdk:11
    
  4. 轻量化Web应用程序

    如果你正在构建一个轻量化的Web应用程序,并希望容器镜像尽可能小,可以选择Alpine Linux作为基础镜像,因为它非常轻量化:

    FROM alpine:latest
    
  5. 多阶段构建

    对于复杂的应用程序,你可能需要使用多阶段构建来减小最终容器镜像的大小。例如,如果应用程序使用Java进行编译,但最终容器只需要Java运行时环境,可以使用多阶段构建。首先使用包含Java编译器的基础镜像来构建应用程序,然后从不同的基础镜像中复制可执行文件:

    # 阶段1:构建应用程序
    FROM maven:3.6 AS build
    COPY . /app
    WORKDIR /app
    RUN mvn clean install# 阶段2:构建最终镜像
    FROM openjdk:11
    COPY --from=build /app/target/myapp.jar /myapp.jar
    CMD ["java", "-jar", "/myapp.jar"]
    

在选择基础镜像时,确保考虑应用程序的特定需求和运行时环境,以便选择合适的基础镜像,并在Dockerfile中指定它以构建容器镜像。不同的应用程序可能需要不同的基础镜像,这取决于所使用的技术栈和依赖项。

3. 维护者信息

3.1 MAINTAINER 指令

在Dockerfile中,MAINTAINER 指令用于指定容器镜像的维护者信息。尽管这个指令在Docker中仍然有效,但它在Docker官方文档中已经被标记为不推荐使用,因为更推荐使用 LABEL 指令来提供镜像的元数据信息,包括维护者信息。下面是有关 MAINTAINER 指令的详细介绍以及如何使用 LABEL 来替代它的信息:

使用 MAINTAINER 指令:

在Dockerfile中使用 MAINTAINER 指令,可以指定容器镜像的维护者信息,通常包括维护者的姓名和电子邮件地址。这是一个示例:

MAINTAINER John Doe <johndoe@example.com>

3.2 MAINTAINER 指令

尽管MAINTAINER仍然有效,但从Docker 1.13版本开始,官方文档不再推荐使用 MAINTAINER 指令,而是建议使用 LABEL 指令来提供镜像的元数据信息。

使用 LABEL 指令替代 MAINTAINER:

LABEL 指令允许以键值对的形式为镜像添加元数据信息。可以使用 maintainer 标签来指定维护者的信息。以下是如何使用 LABEL 来提供维护者信息的示例:

LABEL maintainer="John Doe <johndoe@example.com>"

使用 LABEL 指令的好处是它可以提供更多的元数据信息,并且更具灵活性,可以轻松添加其他自定义标签,以描述镜像的其他方面。例如,可以添加版本号、描述、构建日期等元数据。

LABEL maintainer="John Doe <johndoe@example.com>"
LABEL version="1.0"
LABEL description="My custom Docker image"
LABEL build_date="2023-09-23"

为了更好的可读性和灵活性,建议在Dockerfile中使用 LABEL 指令来提供镜像的元数据信息,包括维护者信息和其他相关信息。这种做法使得容器镜像的描述更丰富,更容易管理和维护。

4. 基础镜像设置

Dockerfile中的指令是用于配置Docker容器的关键部分,它们描述了如何构建和配置容器镜像。

4.1 FROM 指令

  • 介绍FROM 指令用于选择一个基础镜像作为起点开始构建容器镜像。基础镜像包含了操作系统和一些常见软件包,用于构建应用程序的环境。

  • :以下是一个使用 FROM 指令的示例,选择官方的Python 3.8镜像作为基础镜像:

    FROM python:3.8
    

5. 文件系统操作

COPYADD 指令用于将文件或目录从主机复制到容器内。它们的工作方式略有不同,COPY 用于简单的复制操作,而 ADD 具有一些额外的功能,如解压缩压缩文件。

5.1 COPY 指令

COPY 指令:从本地文件系统复制文件到容器中

COPY 指令用于将本地文件系统中的文件或目录复制到正在构建的 Docker 镜像中。它的语法如下:

COPY <源路径> <目标路径>
  • <源路径> 是主机上的文件或目录的路径。
  • <目标路径> 是容器内部的目标路径,指定了文件或目录将复制到容器中的哪个位置。

例:

假设你有一个名为 app 的目录,其中包含一个文件 index.html,你想将该文件复制到容器的 /usr/share/nginx/html 目录下,以供 Nginx 服务器使用。

FROM nginx:latestCOPY app/index.html /usr/share/nginx/html/

在这个示例中,我们首先基于 nginx:latest 镜像构建一个新的镜像。然后,使用 COPY 指令将本地主机上的 app/index.html 文件复制到容器内的 /usr/share/nginx/html/ 目录中。当容器运行时,Nginx 将能够提供此文件。

5.2 ADD 指令

ADD 指令:类似于 COPY,但还支持远程 URL 和自动解压缩等功能

ADD 指令与 COPY 类似,它也用于将文件从主机复制到容器中,但它具有一些额外的功能,包括支持远程 URL 和自动解压缩。其基本语法如下:

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

COPY 相同,<源路径> 是主机上的文件或目录的路径,<目标路径> 是容器内部的目标路径。

例 1:使用 ADD 复制本地文件

FROM ubuntu:latestADD myfile.txt /app/

这将复制主机上的 myfile.txt 文件到容器内的 /app/ 目录。

例 2:使用 ADD 复制远程文件(URL)

FROM ubuntu:latestADD https://example.com/myfile.txt /app/

这将从远程 URL 下载 myfile.txt 文件并将其复制到容器内的 /app/ 目录。

示例 3:使用 ADD 进行自动解压缩

FROM ubuntu:latestADD myarchive.tar.gz /app/

如果 myarchive.tar.gz 是一个压缩文件,ADD 指令会自动解压缩它并将其内容复制到容器内的 /app/ 目录。这在需要解压缩文件时非常有用。

需要注意的是,虽然 ADD 具有这些额外的功能,但在某些情况下,使用 COPY 可能更明智,因为它更加简单且可预测,不会引入额外的复杂性。选择使用哪个指令取决于你的需求和项目的具体情况。

6. 环境变量设置

ENV 指令

  • 介绍ENV 指令用于设置环境变量,这些环境变量可以在容器内使用。它们对于配置应用程序的行为和依赖项非常有用。

  • 示例:以下是一个使用 ENV 指令设置环境变量的示例:

    ENV MY_ENV_VAR=value
    

7. 容器工作目录

WORKDIR 指令

  • 介绍WORKDIR 指令用于设置工作目录,即在容器内执行命令时的当前目录。可以多次使用 WORKDIR 来更改工作目录。

  • 示例:以下是一个使用 WORKDIR 指令设置工作目录的示例:

    WORKDIR /app
    

8. 镜像构建过程

8.1RUN 指令

  • 介绍RUN 指令用于在容器中执行一条命令,通常用于安装软件包、配置环境、运行脚本等操作。每个 RUN 指令都会创建一个新的镜像层。

  • 示例:以下示例演示如何使用 RUN 指令安装Python依赖项:

    RUN pip install numpy pandas
    

8.2EXPOSE 指令

  • 介绍EXPOSE 指令用于指定容器将要监听的端口号。它不会实际打开端口,但在容器的元数据中标记端口可以用于与外部通信。

  • 示例:以下是一个使用 EXPOSE 指令标记容器内部监听的端口号的示例:

    EXPOSE 80
    

9. 容器启动配置

CMDENTRYPOINT 指令用于指定容器启动后要执行的命令或应用程序。它们之间的主要区别在于,CMD 的参数可以被命令行参数覆盖,而 ENTRYPOINT 的参数不会被覆盖。

9.1 CMD 指令

CMD 指令:指定容器启动后默认执行的命令

CMD 指令用于指定容器在启动时要执行的默认命令。它定义了容器的主要执行命令,可以包括可执行文件、脚本或应用程序的启动命令。如果 Dockerfile 中有多个 CMD 指令,只有最后一个会生效。以下是 CMD 指令的基本语法:

CMD ["可执行文件", "参数1", "参数2", ...]
  • "可执行文件" 是容器启动时要运行的可执行文件的路径或名称。
  • "参数1", "参数2", ... 是可执行文件的参数,它们会传递给可执行文件以启动应用程序。

例 :使用 CMD 启动应用程序

假设你有一个简单的 Python 应用程序,你可以使用 CMD 指令指定容器启动时要运行的 Python 脚本:

FROM python:3.9WORKDIR /app
COPY myapp.py /app/CMD ["python", "myapp.py"]

在这个示例中,我们首先基于 python:3.9 镜像构建一个新的镜像。然后,我们将 myapp.py 文件复制到容器的工作目录 /app/ 中,并使用 CMD 指令定义了容器的启动命令。当容器启动时,它将执行 python myapp.py 命令来运行 Python 应用程序。

9.2 ENTRYPOINT 指令

ENTRYPOINT 指令 与 CMD 指令类似,但参数不会被覆盖

ENTRYPOINT 指令与 CMD 类似,也用于指定容器启动时要执行的命令。然而,与 CMD 不同的是,ENTRYPOINT 指令的参数不会被覆盖,而是作为 CMD 的参数。以下是 ENTRYPOINT 指令的基本语法:

ENTRYPOINT ["可执行文件", "参数1", "参数2", ...]
  • "可执行文件" 是容器启动时要运行的可执行文件的路径或名称。
  • "参数1", "参数2", ... 是可执行文件的参数,它们会传递给可执行文件。

示例 2:使用 ENTRYPOINT 启动应用程序

继续前面的 Python 应用程序示例,我们可以使用 ENTRYPOINT 指令来指定容器启动时要运行的命令,并且参数将作为该命令的一部分:

FROM python:3.9WORKDIR /app
COPY myapp.py /app/ENTRYPOINT ["python", "myapp.py"]

在这个示例中,与之前的示例不同,我们使用了 ENTRYPOINT 指令。当容器启动时,它将执行 python myapp.py 命令,并且任何附加的参数将被传递给 myapp.py 脚本。例如,如果你运行容器时指定了额外的参数,如 docker run my-container arg1 arg2,那么这些参数将被传递给 myapp.py 脚本,成为它的参数。

总结来说,CMD 用于指定容器的默认命令,而 ENTRYPOINT 也可以用于定义容器的默认命令,但它的参数不会被覆盖,而是被附加到默认命令的末尾,从而允许更灵活的容器启动配置。

5. 构建容器镜像

构建Docker容器镜像是将Dockerfile中的指令转换为实际容器镜像的过程。使用docker build命令可以根据Dockerfile构建镜像,同时可以指定镜像的名称和标签。

以下是对构建Docker容器镜像的详细步骤:

  1. 准备Dockerfile
    在构建容器镜像之前,确保已经创建了一个包含所需配置的Dockerfile。这个Dockerfile定义了容器的配置、依赖关系和行为。

  2. 打开终端
    打开命令行终端或终端窗口,确保已经登录到Docker守护进程所在的主机上。可以使用docker version命令来验证Docker是否已经启动。

  3. 定位到Dockerfile目录
    使用cd命令在终端中进入包含Dockerfile的目录。这是因为docker build命令默认在当前目录中查找Dockerfile。

  4. 运行docker build命令
    使用以下命令来构建Docker容器镜像,其中-t选项用于指定镜像名称和标签(格式为name:tag),. 表示Dockerfile所在的当前目录。

    docker build -t my-image:1.0 .
    
    • my-image:是镜像的名称。
    • 1.0:是镜像的标签,通常表示版本号或标识符。
    • .:表示Dockerfile所在的目录。这是Docker build命令的最后一个参数。

    可以根据自己的需求为镜像指定不同的名称和标签。

  5. 等待镜像构建完成
    Docker将会执行Dockerfile中的每个指令,并创建镜像的各个层。构建时间的长短取决于Dockerfile中的操作以及基础镜像的大小。

  6. 查看构建日志
    构建过程中,Docker会在终端中显示每个步骤的构建日志。可以查看这些日志以了解构建的进度和任何错误信息。如果一切顺利,将在终端中看到成功的构建消息。

  7. 验证构建的镜像
    完成构建后,可以使用docker images命令来列出所有已构建的镜像,以验证新创建的镜像是否存在。

  8. 使用构建的镜像
    构建完成后,可以使用docker run命令来创建和运行新容器,使用构建的镜像。例如:

    docker run -d my-image:1.0
    

    这将创建一个新容器,基于刚刚构建的镜像运行。

通过这些步骤,可以成功构建Docker容器镜像,并在需要时使用它来创建容器。构建的镜像可以在多个环境中部署和共享,从而实现容器化应用程序的便携性和可重复性。

6. 实战:基于dockerfile部署上线Django Web项目

在Docker容器内部使用Nginx和uWSGI部署Django项目并将容器内部的端口8000映射到外部端口80,需要以下步骤:

  1. 创建Django项目并准备Django应用程序。

  2. 创建Dockerfile来定义Django应用程序的Docker容器。在项目根目录下创建一个名为 Dockerfile 的文件,并添加以下内容:

# 使用Python官方镜像作为基础镜像
FROM python:3.8# 设置环境变量,禁用缓冲以便查看日志
ENV PYTHONUNBUFFERED 1# 创建并切换到工作目录
WORKDIR /app# 复制项目文件到容器
COPY . /app/# 安装项目依赖项
RUN pip install -r requirements.txt# 启动uWSGI服务器
CMD ["uwsgi", "--http", "0.0.0.0:8000", "--module", "your_project_name.wsgi:application"]

确保将 your_project_name 替换为你的Django项目名称。

  1. 创建一个名为 requirements.txt 的文件,其中包含项目的依赖项列表。可以使用以下命令生成此文件:
pip freeze > requirements.txt
  1. 创建一个名为 docker-compose.yml 的文件,以便轻松管理Django容器和Nginx容器。以下是一个示例 docker-compose.yml 文件:
version: '3'services:web:build:context: .dockerfile: Dockerfileports:- "8000:8000"volumes:- .:/appdepends_on:- dbdb:image: postgres:13environment:POSTGRES_DB: your_database_namePOSTGRES_USER: your_database_userPOSTGRES_PASSWORD: your_database_passwordnginx:image: nginx:latestports:- "80:80"volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- web

确保将 your_database_nameyour_database_useryour_database_password 替换为你的数据库信息。

  1. 在项目根目录中创建一个名为 nginx 的文件夹,并在其中创建一个名为 nginx.conf 的Nginx配置文件。以下是一个示例 nginx.conf 文件:
worker_processes 1;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {proxy_pass http://web:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
  1. nginx 文件夹中创建一个名为 conf.d 的子文件夹,并在其中创建一个名为 default.conf 的文件,用于配置Nginx的默认站点。以下是一个示例 default.conf 文件:
server {listen 80 default_server;server_name _;location / {proxy_pass http://web:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
  1. 确保Django项目设置了允许特定IP地址或主机的访问。可以在Django项目的设置中进行配置。

  2. 使用以下命令构建和启动Django容器和Nginx容器:

docker-compose up --build

这将会构建和启动你的Django容器、数据库容器和Nginx容器。一旦容器启动成功,能够通过浏览器访问你的Django项目,网址为 http://localhost

这就完成了将Django项目与Nginx和uWSGI一起部署并将容器内部的端口8000映射到外部端口80的过程。根据具体需求,你可能需要进一步调整Nginx和Django的配置以满足。

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

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

相关文章

Portainer -- docker轻型可视化工具

安装和使用 Portainer 非常简单。下面是一些基本步骤&#xff1a; 安装 Docker&#xff1a;Portainer 是一个基于 Docker 的官方容器管理工具&#xff0c;因此首先要确保你的系统上已经安装了 Docker。你可以根据你的操作系统选择合适的方式安装 Docker。 安装 Portainer 容器…

指针笔试题详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…

记一次逆向某医院挂号软件的经历

背景 最近家里娃需要挂专家号的儿保&#xff0c;奈何专家号实在过于抢手&#xff0c;身为程序员的我也没有其他的社会资源渠道可以去弄个号&#xff0c;只能发挥自己的技术力量来解决这个问题了。 出师不利 首先把应用安装到我已经 Root 过的 Pixel 3 上面&#xff0c;点击应…

【重新定义matlab强大系列十五】非线性数据拟合和线性拟合-附实现过程

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

WinApp自动化测试之工具的选择

WinApp&#xff08;Windows APP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。 例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinA…

MySQL高可用

目录 MySQL高可用方案 1、MHA架构&#xff08;单主&#xff09; MHA的工作原理 MHA 架构的优点 MHA 架构的缺点 2、MHA架构的部署 1&#xff09;关闭防火墙和selinux 2&#xff09;分别修改master和slave1&#xff0c;slave2的主机名 3&#xff09;修改master主库服务…

leetcode86 分割链表

题目 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&#xff1…

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件&#xff0c;必备的插件&#xff0c;是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外&#xff0c;还需要在本地下载安装GNU Global工具。多看下插件…

AI智能文案写作工具,迅速生成高质量的文案

大家好&#xff0c;欢迎来到这篇文章。在信息时代&#xff0c;文字的力量愈发重要&#xff0c;无论是用于广告、文章还是社交媒体&#xff0c;优质的文案都能够吸引更多的注意力。但是&#xff0c;对于许多人来说&#xff0c;创作文案可能是一项繁琐且耗时的任务。 147GPT批量文…

【计算机毕业设计】基于SpringBoot+Vue大学生心理健康管理系统的开发与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

融云受邀参加 Web3.0 顶级峰会「Meta Era Summit 2023」

本周四 19:00-20:00&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击上方小程序报名~ 9 月 12 日&#xff0c;由中国香港 Web3.0 媒体 Meta Era 主办的“Meta Era Summit 2023”在新加坡收官&#xff0c;融云作为战略合作…

php网上评教系统cd73-计算机毕业设计源码+数据库+lw文档+系统+部署

php网上评教系统cd73-(毕业设计毕设项目源代码课程设计程序设计指导xz2023) php网上评教系统cd73-计算机毕业设计源码数据库lw文档系统部署

Mybatis学习笔记10 高级映射及延迟加载

Mybatis学习笔记9 动态SQL_biubiubiu0706的博客-CSDN博客 无论简单映射(前面所学的单表和对象之间的映射关系)还是高级映射 说到底都是java对象和数据库表记录之间的映射关系 准备数据库表:一个班级对应多个学生.班级表:t_class 学生表:s_stu(自增) 新建模块 项目整体结构 …

Jmeter接口测试

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 1.介绍什么是…

ElementUI基本介绍及登录注册案例演示

目录 前言 一.简介 二.优缺点 三.Element完成登录注册 1. 环境配置及前端演示 1.1 安装Element-UI模块 1.2 安装axios和qs(发送get请求和post请求) 1.3 导入依赖 2 页面布局 2.1组件与界面 3.方法实现功能数据交互 3.1 通过方法进行页面跳转 3.2 axios发送get请求 …

Spring面试题10:Spring的XMLBeanFactory怎么使用

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring的XMLBeanFactory怎么使用 XmlBeanFactory是Spring框架中的一个实现类,它是BeanFactory接口的一个具体实现。XmlBeanFactory的主要作用是通…

4.2 Serializable Concept(3)

Compile Time Warnings and Errors 一些序列化特性可能与其他特性发生冲突。有时&#xff0c;这些冲突会导致错误的行为&#xff08;例如&#xff0c;创建无法读取的归档&#xff09;&#xff0c;而其他时候它们代表了库用户可能存在的概念错误&#xff0c;可能导致意外行为。…

使用cv2将图片改为素描图

1 使用cv2&#xff0c;将图片改为素描图&#xff0c;效果如图&#xff1a; 2 代码实现&#xff1a; python 3.8 import cv2img cv2.imread("2.jpg") # 灰度 grey cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) invert cv2.bitwise_not(grey) # 高斯滤波 blur_img cv2…

【JAVA】关于抽象类的概念

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 在Java中&#xff0c;抽象类是一种特殊的类&#xff0c;它无法被实例化。它只能被用作其他类的基类&#xff0c;以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。…

Java Spring Boot: 极简配置与快速开发的利器

引言&#xff1a; Java Spring Boot是一款开源的Java框架&#xff0c;它以极简配置和快速开发为特点&#xff0c;帮助开发者轻松构建基于Spring框架的应用程序。本文将介绍Spring Boot的核心特性&#xff0c;并结合案例和代码&#xff0c;展示其在简化配置、内嵌服务器、自动化…