centos7-docker安装与使用

文章目录

  • 一、docker简介
    • 1.1docker应用场景
    • 1.2docker的优点
      • 1.2.1快速,一致地交付应用程序
      • 1.2.2响应式部署和扩展
      • 1.2.3在同一硬件上运行更多工作负载
    • 1.2docker的架构
  • 二、docker的安装
    • 2.1新系统的环境搭建
      • 2.1.1更换yum源
    • 2.2安装docker与卸载
      • 2.2.1yum安装docker
      • 2.2.2docker卸载
  • 三、docker的使用
    • 3.1docker hello world
    • 3.2交互式运行的容器
    • 3.3后台模式运行容器
    • 3.4docker容器的使用
      • 3.4.1获取centos7镜像
      • 3.4.2后台运行容器
      • 3.4.3进入到容器中
      • 3.4.4导出容器快照
      • 3.4.5导入容器快照
      • 3.4.6删除容器
    • 3.5镜像使用
      • 3.5.1列出镜像列表
      • 3.5.2删除镜像列表
      • 3.5.3构建一个新的镜像
    • 3.6容器连接
      • 3.6.1网络端口映射
    • 3.7docker仓库


一、docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

1.1docker应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

1.2docker的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。

Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。

通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1.2.1快速,一致地交付应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

1.2.2响应式部署和扩展

  • Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
  • Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

1.2.3在同一硬件上运行更多工作负载

  • Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

1.2docker的架构

docker包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
概念说明
Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container)容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

二、docker的安装

2.1新系统的环境搭建

2.1.1更换yum源

  • 备份原有的yum源
[root@localhost ~]# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

在这里插入图片描述

  • 安装wget工具
    我这里用的是虚拟机,直接桥接模式连接的,所以我直接下载阿里云的yum源,所以就需要wget工具。

    (Wget是一个在Linux环境下用于从万维网下载文件的工具,由Hrvoje Niksic开发并后来被移植到包括Windows在内的各个平台。它支持HTTP和FTP协议,以及代理服务器功能,能够自动断点续传并恢复下载。此外,wget还具有用户设置文件".wgetrc",可以读取很多设置,例如代理服务器的设置。基本的语法是:wget [参数列表] URL。)

[root@localhost /]# yum install -y wget

在这里插入图片描述

  • 下载阿里云yum源
[root@localhost /]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

在这里插入图片描述

  • 清除原有的缓存并生成新的缓存
    (清除缓存)
[root@localhost /]# yum clean all

在这里插入图片描述

(生成新的缓存)

[root@localhost /]# yum makecache

在这里插入图片描述

  • 验证阿里云yum源是否生效
[root@localhost /]# yum update -y

在这里插入图片描述

2.2安装docker与卸载

2.2.1yum安装docker

  • 安装依赖软件包
[root@localhost /]# yum install -y yum-utils device-mapper-persistent-data lvm2

在这里插入图片描述

  • 添加docker仓库
[root@localhost /]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

  • 安装docker引擎
[root@localhost /]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

在这里插入图片描述

  • 启动docker并设置开机自启
[root@localhost /]# systemctl start docker
[root@localhost /]# systemctl enable docker

在这里插入图片描述

  • 查看docker版本
[root@localhost /]# docker --version

在这里插入图片描述

  • 查看docker运行状态
[root@localhost /]# systemctl status docker

在这里插入图片描述
(到此,docker就彻底安装完成,并且成功运行。)

2.2.2docker卸载

  • 卸载Docker软件包。
[root@localhost /]# yum remove docker-ce docker-ce-cli containerd.io

在这里插入图片描述

  • 删除docker所以数据。
[root@localhost /]# rm -rf /var/lib/docker/

在这里插入图片描述

  • 删除Docker配置文件和日志文件。
[root@localhost /]# rm -rf /etc/docker /var/log/docker

在这里插入图片描述

三、docker的使用

3.1docker hello world

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world:

[root@localhost ~]# docker run ubuntu:15.10 /bin/echo "hello,world"
  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
在这里插入图片描述

3.2交互式运行的容器

通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

[root@localhost ~]# docker run -i -t ubuntu:15.10 /bin/bash
root@e42a7d9e1da0:/#
  • -t: 在新容器内指定一个伪终端或终端。
  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。

注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器。

我们尝试在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表。

root@e42a7d9e1da0:/# cat /proc/version
root@e42a7d9e1da0:/# ls

在这里插入图片描述
通过exit来退出容器

root@e42a7d9e1da0:/# exit

在这里插入图片描述

3.3后台模式运行容器

使用以下命令创建一个以进程方式运行的容器

[root@localhost ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true;do echo hello world;sleep 1; done"

在这里插入图片描述
在输出中,我们没有看到期望的 “hello world”,而是一串长字符

0e32c3d03684084e7a3c8ccea63e75bd75d0921d6cc707c4563d25317abb3654

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:

[root@localhost ~]# docker ps

在这里插入图片描述

  • CONTAINER ID: 容器 ID。

  • IMAGE: 使用的镜像。

  • COMMAND: 启动容器时运行的命令。

  • CREATED: 容器的创建时间。

  • STATUS: 容器状态。
    状态有7种:

      - created(已创建)- restarting(重启中)- running 或 Up(运行中)- removing(迁移中)- paused(暂停)- exited(停止)- dead(死亡)
    
  • PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

  • NAMES: 自动分配的容器名称。

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

[root@localhost ~]# docker logs 0e32c3d03684

在这里插入图片描述
停止容器的运行:

[root@localhost ~]# docker stop 0e32c3d03684

在这里插入图片描述

3.4docker容器的使用

3.4.1获取centos7镜像

如果我们本地没有 centos7 镜像,我们可以使用 docker pull 命令来载入 centos7 镜像:

首先查看镜像列表:

[root@localhost ~]# docker search centos7

在这里插入图片描述
拉取centos7的镜像:

[root@localhost ~]# docker pull centos:7

运行以下命令以启动一个新的CentOS 7容器:

[root@localhost ~]# docker run -it --name my_centos7_container centos:7 /bin/bash

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

3.4.2后台运行容器

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

这里,我们让centos7在后台运行:

[root@localhost ~]# docker run -d centos:7 /bin/bash

在这里插入图片描述
命令详解:

  • run:启动的意思,Docker命令的一个子命令,用于创建并启动一个新的容器
  • -d:后台运行,加了 -d 参数默认不会进入容器
  • centos:7:image(镜像),要使用的Docker镜像的名称和标签
  • /bin/bash:解释器,使用/bin/bash来启动一个交互式的Bash shell

3.4.3进入到容器中

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
[root@localhost ~]# docker attach 57aaaa97b26e

在这里插入图片描述

  • docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
[root@localhost ~]# docker exec -it e42a7d9e1da0 /bin/bash

在这里插入图片描述
命令详解:

  • exec:Docker命令的一个子命令,用于在现有容器中执行命令或启动一个新的进程
  • -it:选项,表示以交互模式运行容器,并分配一个伪终端
  • /bin/bash: 这是要在容器内执行的命令,这里使用的是Bash shell

3.4.4导出容器快照

如果要导出本地某个容器,可以使用 docker export 命令。

[root@localhost ~]# docker export e42a7d9e1da0 > ubuntu.tar

在这里插入图片描述
命令详解:

  • docker export e42a7d9e1da0这部分代码的作用是将容器的镜像导出为一个tar文件
  • (重定向)> ubuntu.tar这部分代码将导出的镜像保存到名为ubuntu.tar的文件中

3.4.5导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1

[root@localhost ~]# cat ubuntu.tar | docker import - test/ubunt:v1

在这里插入图片描述

3.4.6删除容器

删除某一个容器

[root@localhost ~]# docker rm d04050d53e91

在这里插入图片描述
清理掉所有没有在运行状态的容器

[root@localhost ~]# docker container prune

在这里插入图片描述

3.5镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

3.5.1列出镜像列表

可以使用 docker images 来列出本地主机上的镜像。

[root@localhost ~]# docker images

在这里插入图片描述
解释说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

(同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。)

如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

[root@localhost ~]# docker run -t -i ubuntu:15.10 /bin/bash

在这里插入图片描述
解释说明:

  • -i:交互式操作。
  • -t::终端。
  • ubuntu:15.10:这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

(如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。)

3.5.2删除镜像列表

镜像删除使用 docker rmi 命令,比如我们删除 test/ubunt 镜像:

[root@localhost ~]# docker rmi efee557f2563

在这里插入图片描述

3.5.3构建一个新的镜像

我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

[root@localhost ~]# cat Dockerfile
FROM centos:7
MAINTAINER yourname <youremail@example.com>
RUN yum -y update && yum clean all
RUN yum install -y httpd
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

(注:如果docker中找不到名为"centos:7"的镜像,可以使用一下方法进行下载镜像

docker pull centos:7
docker save -o centos_7.tar centos:7
docker load -i centos_7.tar
1)在目录下运行以下命令构建镜像:
docker build -t myimage .

其中myimage是新镜像的名称,最后的"."表示使用当前目录下的Dockerfile。

2)构建完成后,可以使用以下命令查看新镜像:
docker images
2)运行新镜像:
docker run -d -p 80:80 myimage

(因为这里也是测试,所以就不作图了,不过这些命令完全行的通)

3.6容器连接

3.6.1网络端口映射

首先创建的一个python的容器

[root@localhost /]# docker run -d -P training/webapp python app.py

在这里插入图片描述
使用 -p 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

-P :是容器内部端口随机映射到主机的端口。
-p : 是容器内部端口绑定到指定的主机端口。
[root@localhost /]# docker run -d -p 5000:5000 training/webapp python app.py

在这里插入图片描述

在这里插入图片描述
另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

[root@localhost /]# docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

在这里插入图片描述
这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

[root@localhost /]# docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

在这里插入图片描述
docker port 命令可以让我们快捷地查看端口的绑定情况。

[root@localhost /]# docker port musing_gould 5000

3.7docker仓库

仓库(Repository)是集中存放镜像的地方。以下介绍一下 Docker Hub。当然不止 docker hub,只是远程的服务商不一样,操作都是一样的。

Docker Hub
目前 Docker 官方维护了一个公共仓库 Docker Hub。
大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

注册
在 https://hub.docker.com 免费注册一个 Docker 账号。

登录和退出
登录需要输入用户名和密码,登录成功后,我们就可以从 docker hub 上拉取自己账号下的全部镜像。
在这里插入图片描述

# 登录
[root@bogon ~]# docker login
# 退出
[root@bogon ~]# docker logout

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

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

相关文章

看懂YOLOv7混淆矩阵的含义,正确计算召回率、精确率、误检率、漏检率

文章目录 1、准确率、精确率、召回率、误报率、漏报率概念及公式1.1 准确率 Accuracy1.2 精确率 Precision1.3 召回率 Recall1.4 F1-Score1.5 误检率 false rate1.6 漏检率 miss rate 2、YOLOv7混淆矩阵分析 1、准确率、精确率、召回率、误报率、漏报率概念及公式 重点参考博文…

.net7.0中把exe和dll分开打包

之前写过 C#把dll分别放在指定的文件夹_wpf core dll 放文件夹-CSDN博客 C#把dll打包到exe_c# 打包exe_故里2130的博客-CSDN博客 这都是老技术了&#xff0c;可以进行参考。 现在的.netcore系列有单独支持把exe和dll分开打包的功能了&#xff0c;当然也支持.net7.0和.net8.…

Phpstudy v8.0/8.1小皮升级Apache至最新,同时升级openssl版本httpd-2.4.58 apache 2.4.58

1.apache官网下载最新版本的apache 2.4.58 2.phpstudy下apache停止运行&#xff0c;把原来的Apache文件夹备份一份 复制图中的文件替换apache目录下文件 3.phpstudy中开启apache

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

uniapp微信小程序中阻止事件冒泡

开发场景&#xff1a;列表中展示地块的数据信息&#xff0c;用户可以点击列表进入地块的详情界面&#xff0c;也可以点击列表中的星星按钮进行收藏 遇到的问题&#xff1a;每次点击星星的时候&#xff0c;都会触发父级的点击事件&#xff0c;从而进入到详情界面 原本的代码&am…

docker镜像管理命令

镜像管理命令 docker build : 命令用于使用 Dockerfile 创建镜像 docker build [OPTIONS] PATH | URL | - OPTIONS说明&#xff1a; --add-host :向hosts文件中添加自定义 host:ip 映射 --build-arg[] :设置镜像创建时的变量&#xff1b; --cache-from :指定镜像用作当前构建…

STK Components 二次开发- 卫星地面站

前期卫星地面站创建已经说过&#xff0c;本次说一下卫星和地面站可见性时卫星名称和轨迹线变色问题。 1.创建卫星 // Get the current TLE for the given satellite identifier. var tleList TwoLineElementSetHelper.GetTles(m_satelliteIdentifier, JulianDate.Now);// Us…

MFC容器中使用标准库容器,内存违规

问题描述 CArray中元素不管是直接或间接使用标准库容器&#xff0c;会引发内存违规。与CArray内部实现有关。测试代码如下&#xff1a; struct tagData {std::vector<int> m_Values; }; CArray<tagData, tagData> mIntVecArray; {tagData mData;mData.m_Values.p…

类和对象——(2)类

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 只虽然夜晚很长&#xff0c;但天…

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好&#xff0c;因为parquet

“PredictingChildrenHeight“ app Tech Support(URL)

Using our app, we can predict a childs height through formulas. Because there are many factors that affect a childs height, it is for reference only. ​​​​​​​ If you have any questions, you can either leave a message or send the questions to our em…

msng病毒分析

这是一个非常古老的文件夹病毒&#xff0c;使用XP系统的文件夹图标&#xff0c;采用VB语言开发&#xff0c;使用了一种自定义的壳来保护&#xff0c;会打开网址http://www.OpenClose.ir,通过软盘、U盘和共享目录进行传播&#xff0c;会在U盘所有的目录下生成自身的副本&#xf…

Linux常用命令----shutdown命令

文章目录 命令概述参数解释使用示例及解释 命令概述 shutdown 命令用于安全地关闭或重启 Linux 系统。它允许管理员指定一个时间点执行操作&#xff0c;并可发送警告信息给所有登录的用户。 参数解释 时间参数 ([时间]): now: 立即执行关闭或重启操作。m: 在 m 分钟后执行操作…

Android控件全解手册 - 任意View缩放平移工具-实现思路和讲解

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

数字阅读用户规模持续增长 5.3亿人享受数字化阅读便利

近日,鲁迅长孙周令飞在接受采访时表示,自己“现在90%的时间刷视频,10%的时间看书”,引发网友热议。不少网友表示,鲁迅的孙子都花90%的时间刷视频,难怪现在没人看书了,其实这并不奇怪,也并不表明没人看书,而是读屏与读书并重的时代,纸质阅读与数字阅读共同构成了日常的阅读模式。…

webpack具体实现--未完

1、前端模块打包工具webpack webpack 是 Webpack 的核心模块&#xff0c;webpack-cli 是 Webpack 的 CLI 程序&#xff0c;用来在命令行中调用 Webpack。webpack-cli 所提供的 CLI 程序就会出现在 node_modules/.bin 目录当中&#xff0c;我们可以通过 npx 快速找到 CLI 并运行…

web:NewsCenter

题目 打开页面显示如下 页面有个输入框&#xff0c;猜测是sql注入&#xff0c;即search为注入参数点&#xff0c;先尝试一下 返回空白显示错误 正常显示如下 是因为单引号与服务端代码中的’形成闭合&#xff0c;输入的字符串hello包裹&#xff0c;服务端代码后面多出来一个‘导…

Linux僵死进程及文件操作

1.僵死进程(僵尸进程)&#xff1a; 1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进…

哈希和unordered系列封装(C++)

哈希和unordered系列封装 一、哈希1. 概念2. 哈希函数&#xff0c;哈希碰撞哈希函数&#xff08;常用的两个&#xff09;哈希冲突&#xff08;碰撞&#xff09;小结 3. 解决哈希碰撞闭散列线性探测二次探测代码实现载荷因子&#xff08;扩容&#xff09; 开散列哈希桶代码实现扩…

深入理解字符串函数和字符函数(二)

目录 strstr 的使用和模拟实现​ 简单的使用&#xff1a; 复杂情况下的使用 模拟实现strstr函数 用暴力求解的方式&#xff1a; strtok的使用 strerror 函数的使用​ strstr 的使用和模拟实现​ 作用:返回字符串在另外一个字符串中第一次出现的位置&#xff0c;即查找子…