【容器化】Docker

文章目录

  • 概述
    • 环境配置的难题
    • 虚拟机
    • Linux 容器
    • Docker
  • 核心概念
  • 安装
  • 命令
    • 启动与停止命令
    • 镜像相关命令
    • 容器相关命令
  • 部署
    • MySQL 部署
    • Tomcat 部署
    • Nginx 部署
    • Redis 部署
  • 迁移与备份
  • Dockerfile 制作镜像
  • Docker 私有仓库
    • 将镜像上传到私有仓库
    • 从私有仓库拉取镜像
  • 来源

概述

环境配置的难题

软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?

用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。

如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:“它在我的机器可以跑了”(It works on my machine),言下之意就是,其他机器很可能跑不了。

环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。

虚拟机

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点。

(1)资源占用多

虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。

(2)冗余步骤多

虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。

(3)启动慢

启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。

Linux 容器

由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势。

(1)启动快

容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。

(2)资源占用少

容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。

(3)体积小

容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。

总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

Docker

Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不向虚拟机一样,迁移一台虚拟机极其资源;

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

总之:Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题

核心概念

1、容器技术

Linux容器技术很早就有了,比较有名的是被集成到主流Linux内核中的LXC项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。

容器技术对比虚拟化技术,容器比虚拟化更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。但Docker容器需要与主机共享操作系统内核,不能像虚拟机那样运行独立的内核。

Docker是一个基于LXC技术构建的容器引擎,基于GO语言开发,遵循Apache2.0协议开源。Docker的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用户简单的创建和使用容器。

Docker支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念就是 Build once, Run anywhere。

Docker容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。

下面我们开始介绍Docker中的几个基本概念。

2、镜像

Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

用户可以通过编写Dockerfile创建新的镜像,也可以直接从类似github的Docker Hub上下载镜像使用。

3、容器

Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

在Docker容器中,每个容器之间的隔离使用Linux的 CGroups 和 Namespaces技术实现的。其中 CGroups 对CPU,内存,磁盘等资源的访问限制,Namespaces 提供了环境的隔离。

4、仓库

如果你使用过 git 和 github 就很容易理解Docker的仓库概念。Docker仓库相当于一个 github 上的代码库。

Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Registry)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。Docker运行中使用的默认仓库是 Docker Hub 公共仓库。

仓库支持的操作类似 git,创建了新的镜像后,我们可以 push 提交到仓库,也可以从指定仓库 pull 拉取镜像到本地。

安装

安装docker

使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

通过将用户添加到docker用户组可以将sudo去掉,命令如下

sudo groupadd docker #添加docker用户组sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中newgrp docker #更新用户组

然后我们将通过检查版本来验证安装是否成功:

docker --version

安装docker-compose

GitHub源,下载很慢

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

使用 DaoCloud源下载

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

接下来我们将设置权限:

sudo chmod +x /usr/local/bin/docker-compose

然后我们将通过检查版本来验证安装是否成功:

docker-compose --version

命令

启动与停止命令

命令解释
systemctl start docker启动 Docker
systemctl stop docker停止docker
systemctl restart docker查看docker状态
systemctl status docker开机启动
systemctl enable docker开机启动
docker info查看docker概要信息
docker --help查看docker帮助文档

镜像相关命令

命令解释
docker images查看本地存在的镜像
这些镜像都存储在 Docker 的 /var/lib/docker目录下
docker search 镜像名称从网络中查找需要的镜像
docker pull 镜像名称将远程镜像拉取到本地
docker rmi [-f] 镜像ID(强制)删除本地镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG删除多个镜像
docker rmi -f $(docker images -qa)删除所有镜像

使用:

docker images

在这里插入图片描述

docker search 镜像名字

在这里插入图片描述
在这里插入图片描述

容器相关命令

查看容器

命令解释
docker ps查看正在运行的容器
docker ps -a查看所有容器
docker ps -l查看最后一次运行的容器
docker ps -f status=exited查看停止的容器

创建与启动容器

docker run

-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
–name:为创建的容器命名。

以交互的方式创建容器

以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器是前台容器。

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

比如:docker run -it --name=mycentos centos:7 /bin/bash
docker run:表示创建容器
-it:表示运行容器并进入它的命令行
–name=mycentos:给当前的容器命名
centos:7:使用该镜像创建
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
在这里插入图片描述
创建后台容器

创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。
创建守护式容器:docker run -id --name=容器名字 centos:7
登录守护式容器:docker exec -it 容器名称 (或者容器ID) /bin/bash

在这里插入图片描述
停止与启动容器

docker stop 容器名称(或者容器ID)
docker start 容器名称(或者容器ID)

在这里插入图片描述
文件拷贝

将宿主机的文件拷贝的容器的指定目录下
宿主机向容器拷贝:docker cp 需要拷贝的文件或目录 容器名称:容器目录
容器向宿主机拷贝:docker cp 容器名称:容器目录 需要拷贝的文件或目录
例如: docker cp /opt/tomcat8080/conf/web.xml mycentos7_2:/usr/local/

在这里插入图片描述

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

创建容器并挂载:docker run -id --name=mycentos1 -v 宿主机的目录:容器的目录 centos:7

创建容器并挂载 linux 中的 /usr/local/myhtml 到,容器的 /usr/local/myhtml 目录

docker run -id --name=mycentos1 -v /usr/local/myhtml:/usr/local/myhtml centos:7

在这里插入图片描述
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数
--privileged=true 来解决挂载的目录没有权限的问题

docker run -id --privileged=true --name=mycentos1 -v /usr/local/myhtml:/usr/local/myhtml centos:7

查看容器 IP 地址

我们可以通过 docker inspect 容器名称 来查看容器运行时的各种数据

当然我们也可以通过 docker inspect --format='{{属性的键}}' 容器名称 来查看单独某个属性

例如我们单独查看 IP 地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos1

在这里插入图片描述

删除容器

docker rm 容器名称

当我们在删除一个正在运行的容器时,会报错;需要先关闭这个容器才可删除

当然我们也可以用 docker rm -f 容器名称 来强制删除一个容器

部署

MySQL 部署

在这里插入图片描述

  1. 拉取镜像

docker pull centos/mysql-57-centos7

  1. 创建容器

docker run -di --name=mysql5.7 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

选项解释
-p 宿主机端口:容器端口指定端口映射
-e …传递环境变量,这里表示 MySQL 的密码为 123456,账户默认为 root
  1. 远程链接 MySQL

在这里插入图片描述

Tomcat 部署

  1. 拉取镜像
docker pull tomcat:7-jre7
  1. 创建容器
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
  1. 找一个 web 项目,部署到宿主机的 /usr/local/webapps 目录下,然后进入 docker 容器查看项目有没有成功部署,最后在浏览器中测试看看能不能成功访问

在这里插入图片描述
输入默认的用户名之后,我们成功登录,说明项目已经部署成功了
在这里插入图片描述

Nginx 部署

  1. 拉取镜像
docker pull nginx
  1. 创建 Nginx 容器
docker run -di --name=mynginx -p 80:80 nginx

测试
在这里插入图片描述

Redis 部署

拉取镜像

docker pull redis

创建容器

docker run -di --name=myredis -p 6379:6379 redis

用 redis 客户端工具链接测试
在这里插入图片描述

迁移与备份

保存容器为镜像:docker commit 容器名称 镜像名称
例如:docker commit mynginx mynginx_i

保存镜像为 tar 文件:docker save –o tar文件名 镜像名

docker save -o mynginx.tar mynginx_i

加载 tar 文件为镜像:docker load -i tar文件名

docker load -i mynginx.tar

Dockerfile 制作镜像

前面已经知道了,想要获得一个镜像可以从 Docker 中心仓库拉取,但是如果我们想要自己制作一个镜像,这时就需要 Dockerfile 了;

Docker 实际上就是一个文本文件,我们可以在这个文本文件里输入一些命令或参数,来定制我们需要的镜像,之后 Docker 可以通过读取 Dockerfile 文件的描述来构建镜像;

  1. 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  2. 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

Dockerfile 常用的命令:

命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
RUN 后面输入 linux 命令
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录(进入容器之后默认的工作路径)

下面我们以创建一个具有 jdk1.8 的 centos7 系统为例制作一个镜像

  1. 创建目录
mkdir –p /usr/local/dockerjdk8
  1. 下载 jdk-8u144-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录
    在这里插入图片描述
  2. 创建 Dockerfile 文件(名字固定为Dockerfile)

#依赖的镜像的名称和版本
FROM centos:7
#指定镜像创建者信息
MAINTAINER ayi
#设置工作目录,进入容器之后默认的工作目录,即进入 centos7 应用容器之后默认的工作目录为 /usr
WORKDIR /usr
#RUN yum install -y glibc.i686 制作完镜像之后,用镜像安装的centos7可能会有问题,缺少 glibc.i686,所以这里我们可以安装一下,也可以稍后安装
#RUN 后面是我们在构建镜像时需要执行的命令,下面是创建一个文件夹
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar: J R E H O M E / l i b : JRE_HOME/lib: JREHOME/lib:CLASSPATH
ENV PATH J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

  1. 执行命令构建镜像
docker build -t='jdk1.8' .

注意:这里的 . 不要拉下了,“.” 的意思是指定相对目录为当前目录
-t:指定构建的镜像的名称
在这里插入图片描述
5.查看镜像是否构建成功

docker images

在这里插入图片描述
最后,运行容器进行测试
在这里插入图片描述
执行 java -version 发现报错,那么我们需要安装一下 glibc

yum install -y glibc.i686

在这里插入图片描述安装完成之后,就可以了

在这里插入图片描述

Docker 私有仓库

  1. 拉取私有仓库
docker pull registry
  1. 启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
  1. 这里我们就可以访问我们的私有仓库了
http://192.168.211.144:5000/v2/_catalog,IP 改为你们自己的宿主机 IP 即可
  1. 修改 daemon.json,
    Docker 默认我们的私有仓库是不安全的,所以我们要配置一下,就和之前配置镜像加速一样
    vi /etc/docker/daemon.json
    "insecure-registries":["192.168.211.144:5000"] IP,改为你们自己的宿主机 IP

  2. 重启docker 服务

systemctl restart docker

在这里插入图片描述

将镜像上传到私有仓库

  1. 先将镜像标记为私有仓库的镜像
docker tag 自己的镜像名称 宿主机IP:私有服务容器的端口/jdk1.8
docker tag jdk1.8 192.168.17.132:5000/jdk1.8

5000:是我们之前创建 registry 的时候映射的端口,是宿主机的端口

在这里插入图片描述

  1. 再次启动私服容器
docker start registry
  1. 上传标记的镜像
docker push 192.168.211.144:5000/jdk1.8

在这里插入图片描述

从私有仓库拉取镜像

docker pull 192.168.211.144:5000/jdk1.8

来源

我整理了16张图,彻底搞懂Docker容器!
Docker 入门教程
Docker 概念及基本用法
什么是 Docker?为什么会有 Docker?Docker 的优势?
Ubuntu下安装docker和docker-compose

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

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

相关文章

pyspark将数据多次插入表的时候报错

代码 报错信息 py4j.protocol.Py4JJavaError: An error occurred while calling o129.sql. : org.apache.spark.sql.catalyst.parser.ParseException: mismatched input INSERT expecting <EOF>(line 12, pos 0) 原因 插入语句结束后没有加&#xff1b;结尾 把两个&am…

原子化 CSS 真能减少体积么?

前言 最近看到这样一篇文章&#xff1a;《要喷也得先做做功课吧&#xff1f;驳Tailwind不好论》 个人觉得说的还是有一定道理的&#xff0c;就是该作者的语气态度可能稍微冲了点&#xff1a; 不过他说的确实有道理&#xff0c;如果这种原子化工具真的如评论区里那帮人说的那么…

asp.net core mvc之路由

一、默认路由 &#xff08;Startup.cs文件&#xff09; routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…

idea使用gradle教程 (idea gradle springboot)2024

这里白眉大叔&#xff0c;写一下我工作时候idea怎么使用gradle的实战步骤吧 ----windows 环境----------- 1-本机安装gradle 环境 &#xff08;1&#xff09;下载gradle Gradle需要JDK的支持&#xff0c;安装Gradle之前需要提前安装JDK8及以上版本 https://downloads.gra…

【遮天】叶凡首次高燃时刻,暴打姜峰逼其下跪,故事逐渐燃情

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《遮天》国漫30集剧情最新内容解析&#xff0c;前面剧情中&#xff0c;叶凡被姜峰如疯狗一般追杀&#xff0c;他像一只被狼群追逐的鹿&#xff0c;在山林中亡命逃窜。身后是姜峰那歇斯底…

el-date-picker精确到分钟

0 效果 1 代码 使用format、value-format属性格式化即可 :clearable“false” // 取消删除图标 注意&#xff1a; format&#xff1a;“yyyy-MM-dd HH:mm” 小时默认是从00:00开始 format&#xff1a;“yyyy-MM-dd hh:mm” 小时默认是从12:00开始

torch.cumprod实现累乘计算

cumprod取自“cumulative product”的缩写&#xff0c;即“累计乘法”。 数学公式为&#xff1a; y i x 1 x 2 x 3 . . . x i y_ix_1\times{x_2}\times{x_3}\times{...}\times{x_i} yi​x1​x2​x3​...xi​ 官方链接&#xff1a;torch.cumprod 用法&#xff1a; impo…

代码随想录训练营Day1:二分查找与移除元素

本专栏内容为&#xff1a;代码随想录训练营学习专栏&#xff0c;用于记录训练营的学习经验分享与总结。 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;二分查找与移除元素 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a…

基于CLIP的图像分类、语义分割和目标检测

OpenAI CLIP模型是一个创造性的突破&#xff1b; 它以与文本相同的方式处理图像。 令人惊讶的是&#xff0c;如果进行大规模训练&#xff0c;效果非常好。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D…

算法进阶指南图论 道路与航线

其实再次看这题的时候。想法就是和强连通分量有关&#xff0c;我们很容易发现&#xff0c;题目中所说的双向边&#xff0c;就构成了一个强连通分量&#xff0c;而所谓的单向边&#xff0c;则相当于把强连通分量进行缩点&#xff0c;然后整个图成为了一个DAG&#xff0c;众所周知…

go程序获取工作目录及可执行程序存放目录的方法-linux

简介 工作目录 通常就是指用户启动应用程序时&#xff0c;用户当时所在的文件夹的绝对路径。 如&#xff1a;root用户登录到linux系统后&#xff0c;一顿cd&#xff08;change directory&#xff09;后, 到了/tmp文件夹下。此时&#xff0c;用户要启动某个应用程序&#xff0…

Mybatis-Plus同时使用逻辑删除和唯一索引的问题及解决办法

1 问题背景 在开发中&#xff0c;我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时&#xff0c;如果同时使用逻辑删除和唯一索引&#xff0c;会报数据重复Duplicate entry的问题。 举例来说&#xff0c;有表user&#xff0c;建立唯一索引&#xff08;u…

Qt实现动态桌面小精灵(含源码)

目录 一、设计思路 二、部分源码演示 三、源码地址 🌈write in front🌈 🧸大家好,我是三雷科技.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由三雷科技原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:三雷科技🧸—CSDN博客 🎁欢…

了解高防服务器的工作原理

在当今互联网时代&#xff0c;网络安全问题日益突出&#xff0c;各种网络攻击层出不穷。为了保护企业的网络安全&#xff0c;高防服务器应运而生。那么&#xff0c;你是否了解高防服务器的工作原理呢?下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种网络攻击的…

万界星空科技MES系统软件体系架构及应用

MES系统是数字化车间的核心。MES通过数字化生产过程控制&#xff0c;借助自动化和智能化技术手段&#xff0c;实现车间制造控制智能化、生产过程透明化、制造装备数控化和生产信息集成化。生产管理MES系统主要包括车间管理系统、质量管理系统、资源管理系统及数据采集和分析系统…

C语言编写一个程序采集招聘信息

因为在这里无法详细解释每行代码和步骤。但是&#xff0c;我可以给大家一个使用Python和requests库编写的简单爬虫程序的例子&#xff0c;它可以从网站上获取招聘信息。你可以根据这个例子&#xff0c;将其改写为使用C语言编写的爬虫程序。 import requests# 指定爬虫IP信息 pr…

软件测试|测试方法论—边界值

边界值分析法是一种很实用的黑盒测试用例方法&#xff0c;它具有很强的发现故障的能力。边界值分析法也是作为对等价类划分法的补充&#xff0c;测试用例来自等价类的边界。 这个方法其实是在测试实践当中发现&#xff0c;Bug 往往出现在定义域或值域的边界上&#xff0c;而不…

“锡安主义”贝尔福宣言希伯来抵抗运动犹太启蒙改革运动奋锐党闪米特人雅利安人

目录 “锡安主义” 贝尔福宣言 希伯来抵抗运动 犹太启蒙改革运动 奋锐党 闪米特人 雅利安人 “锡安主义” “锡安主义”是一种政治和民族运动&#xff0c;旨在支持并促进犹太人建立自己的国家并在历史上与宗教上的祖先之地——巴勒斯坦地区建立一个独立的国家。这一运动…

nginx图片资源管理转发

目标: 服务器上面 /home/images 里面作为文件资源管理器 代码: server {listen 80;server_name hello.world.cn;#apple-app和接口的关联文件location ~.*(images/miniapp)*\.(gif|jpg|jpeg|png)$ {root /home/;try_files $uri $uri/ 404;add_header Cache-Control &q…