Docker容器学习总结(超全)

前言:

由于公司业务需求,所以最近才开始学之前一直想学的Dokcer容器

文章目录

什么是容器?

  1. 一种虚拟化的方案
  2. 操作系统级别的虚拟化
  3. 只能运行相同或相似内核的操作系统
  4. 依赖于Linux内核特性:Namespace和Cgroups (Control Group)

什么是Docker?

将应用程序自动部署到容器

Go语言开源引擎 Github地址: https://github.com/docker/docker

2013年初 dotCloud 基于Apache2.0开源授权协议发行

Docker的目标

  • 提供简单轻量的建模方式
  • 职责的逻辑分离
  • 快速高效的开发声明周期
  • 鼓励使用面向服务的架构

Docker的使用场景

  • 使用Docker容器开发,测试,部署服务。
  • 创建隔离的运行环境
  • 搭建测试环境
  • 构建多用户的平台即服务(PaaS)基础设施
  • 提供软件即服务(SaaS)应用程序
  • 高性能,超大规模的宿主机部署

Docker的基本组成

Docker客户端/守护进程

C/S架构

本地 / 远程

Docker Image 镜像:容器的基石,层叠的只读文件系统 , 联合加载(union Mount)

Docker Container容器:通过镜像启动,写时复制(copy on write)

Docker Registry仓库 : 公有: Docker Hub(有丰富的镜像),私有。


Docker容器相关技术简介

Docker依赖的Linux内核特性

Namespaces 命名空间:
  • PID(Process ID) 进程隔离

  • NET(Network) 管理网络接口

  • IPC(InterProcess Communication) 管理跨进程通信的访问

  • MNT(Mount) 管理挂载点

  • UTS(Unix Timesharing System) 隔离内核和版本标识

Control groups (cgroups) 控制组:
  • 资源限制
  • 优先级设定
  • 资料计量
  • 资源控制

Docker容器的能力

  • 文件系统的隔离:每个容器都有自己的Root文件系统
  • 进程隔离:每个容器都运行在自己的进程环境中
  • 网络隔离:容器间的虚拟网络接口和Ip地址都是分开的
  • 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器

Docker的安装与部署

Centos7上安装docker

Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。

社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。

一、安装docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

 $ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

img

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

img

7、安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

img

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

img

二、问题

1、因为之前已经安装过旧版本的docker,在安装的时候报错如下:

Transaction check error:file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

2、卸载旧版本的包

$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

img

3、再次安装docker

$ sudo yum install docker-ce

Docker容器的基本操作

docker run IMAGE [COMMAND 命令] [ARG… 参数]

run 在新容器中执行命令

启动交互式容器:
$ docker run -i -t IMAGE /bin/bash-i -interactive = true | false 默认是false  :守护进程是否打开标准输入-t -tty = true | false 默认是false   : 是否为容器打开-tty终端
查看容器:
$docker ps [-a] [-l] : -a是指列出所有的容器 ; -l是指列出最新创建的容器$docker inspect : inspect代表的是容器的名字,既可以是容器的名字也可以是容器的id
自定义容器名:

$docker run --name=自定义名 -i -t IMAGE /bin/bash

重新启动停止的容器:

$docker start [-i] 容器名 :-i是指它可以以交互的方式来重新启动已经停止的容器

删除停止的容器:

$docker rm 容器名


Docker–守护式容器

什么是守护式容器:
  • 能够长期运行
  • 没有交互式会话
  • 适合运行应用程序和服务
以守护形式运行容器:
$docker run - i -t IMAGE /bin/bashCtrl+P   Ctrl+Q :以ctrl+p 加上Ctrl+q的组合键来退出交互式容器的bash,这样容器就会在后台运行$docker run -d 镜像名 [COMMAND] [ARG...]  :  -d是指以后台的形式运行命令,但是在命令结束后,容器依旧会停止
附加到运行中的容器:

$docker attach 容器名

启动守护式容器:
$docker run -d 镜像名 [COMMAND] [ARG...]  :  -d是指以后台的形式运行命令,但是在命令结束后,容器依旧会停止
查看容器日志:
$docker logs [-f] [-t] [-tail] 容器名-f --follows = true | false 默认为false   :-f是告诉logs 一直跟踪日志的变化,并返回结果-t --timestamps=true | false 默认为false  : -t是在返回的结果上加上时间戳--tail = “all”           : --tail 是选择返回结尾处多少数量的日志,那么如果不指定,logs返回所有的日志
查看容器内运行中进程:

docker top 容器名 :来查看运行中容器的进程

在运行中的容器内启动新进程:
$docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...] 
exec用来在已经运行的容器中启动新进程
如何停止守护式容器:
$docker stop 容器名   stop 发送一个信号给容器,等待容器的停止
$docker kill 容器名   kill 会直接停止容器

在容器中部署静态网站

设置容器的端口映射
run [-p] [-P]

-p, -publish=[]

  1. containerPort

    docker run -p 80 -i -t centos /bin/bash

  2. hostPort:containerPort

    docker run - p 8080:80 -i -t centos /bin/bash

  3. ip::containerPort

    docker run -p 0.0.0.0:80 -i -t centos /bin/bash

  4. ip:hostPort:containerPort

Nginx部署流程
  1. 创建映射80端口的交互式容器

  2. 安装Nginx

  3. 安装文本编译器vim

  4. 创建静态页面

  5. 修改Nginx配置文件

  6. 运行nginx

  7. 验证网站访问


Docker–查看和删除镜像

Docker Image 镜像
  • 容器的基石
  • 层叠的只读文件系统
  • 联合加载(union mount)

存储位置: /var/lib/docker

查看和删除镜像 -列出镜像
$docker images [OPTSIONS] [REPOSITORY]
-a --all=false      显示所有镜像,默认不显示中间层的镜像
-f --filter=[]      显示时的过滤条件,
--no-trunc =false  是指定不使用截断的形式来显示数据,默认情况下我们用images命令查到的列表是会截断镜像的唯一id的。-q, --quiet=false   只显示镜像的唯一id。
查看和删除镜像-镜像的仓库
REPOSITORY 仓库
REGISTYRY  仓库?
查看和删除镜像-镜像标签
TAG : ubuntu:14.04
ubuntu:latest
查看和删除镜像-查看镜像
$docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
-f,--format=""  
查看和删除镜像-删除镜像
$docker rmi [OPTIONS] IMAGE [IMAGE...]
-f--force=false  Force removal of the image :强制移除图像
-no-prune=false   Do not Delete untagged parents :保留被删除镜像中被打标签的父镜像

Docker-获取和推送镜像

获取和推送镜像-查找镜像
几种查找镜像的方式
1.Docker Hub
https://registry.hub.docker.com2.$docker search [OPTIONS] TERM
--automated=false Only show automated builds :只显示自动构建
--no-trunc=false Dont truncate output  :不截断输出
-s--stars=0 Only displays with at least x stars  :
最多返回25个结果
获取和推送镜像-拉取镜像
¥docker pull [OPTIONS] NAME[:TAG]
-a,--all-tags=false  Download all tagged images in the repository :下载存储库中所有标记的图像使用 --registry-mirror选项
1.修改: /etc/default/docker
2.添加: DOCKER_OPTS=“ --registry-mirror=http://MIRROR-ADDR”
https://www.daocloud.io
获取和推送镜像-推送镜像
$docker push NAME[:TAG]

Docker–构建镜像

docker-构建镜像的好处:
  • 保存对容器的修改,并再次使用
  • 自定义镜像的能力
  • 以软件的形式打包并分发服务及其运行环境
docker构建镜像的方式:
$docker commit 通过容器构建
$docker build 通过Dockerfile文件构建
docker-使用commit构建镜像
$docker commit [options] container [repository] [:tag]
-a--author=""  Author   e.g.,"chj@qq.com"-m--message=""  Commit message    : 记录镜像构建的信息-p --pause=true  Pause container during commit   :指示commit命令可以不暂停正在执行的命令
docker-使用Dockerfile构建镜像
1.创建Dockerfile
2.使用 $ docker build 命令创建第一个Dockerfile#First DockerfileFROM centos:7MAINTEINER dormancypress "chj@qq.com"RUN yum updateRUN yum install -y nginxEXPOSE 80$docker build [OPTIONS] PATH | URL | ---force-rm=false--no-cache=false--pull=false-q,--quiet=false-rm=true-t,--tag=""  : 为了指定构建处镜像的名字

Docker客户端与守护进程

Docker的C/S模式

server-client

docker的C/S模式结构可以如下图:

这里写图片描述

docker 的守护进程即server端运行在宿主机上,守护进程在启动后一直在后端运行,而用户不会直接和守护进程交互,而是和docker的客户端即docker命令行接口交互,从用户接受命令传递给守护进程。守护进程接受到命令后执行并返回运行结果。


server-RemoteAPI

除了使用docker命令行接口与server端进行通信外,还可以使用Remote API进行通信。它是一种RESTful风格的API,即可自行编写程序与docker进行集成。这样的C/S架构的模式如下图:

这里写图片描述

C/S模式的连接方式

docker客户端和守护进程间通过socket进行连接,docker提供了三种连接模式:

unix:///var/run/docker.sock
tcp://host:port
fd://socketfd

其中,unix:///var/run/docker.sock是默认的连接方式们可以通过配置修改为其他的连接方式。

这里写图片描述

这样意味着docker的client和server可以在一台服务器上或不同服务器上

实验:

通过执行ps -ef | grep docker来查看docker是否运行,如果docker在运行,name执行docker version查看docker的版本

这里写图片描述

这里执行的docker version命令就是利用docker的client端来和server端进行交互的

想要通过RemoteAPI来和docker进行交互,则通过nc -U /var/run/docker.sock来连接docker的socket,然后通过输入GET请求来获取server端信息:

这里写图片描述

docker的远程访问
环境准备

两台虚拟机,安装docker,确保docker的client和version的版本一致。

修改服务端启动文件

在centos7下docker的启动文件为/etc/sysconfig/docker,打开这个文件,加入如下的一行:

OPTIONS=’–label name=docker_server_1 -H tcp://0.0.0.0:2375’
1
-H 在启动中指定docker的socket连接方式,远程连接指定tcp连接。

修改完后重启服务端docker服务:

service docker restart

然后查看本机的ip地址,这里我的是:192.168.177.138,在客户端使用curl命令进行远程连接:

curl http://192.168.177.138:2375/info

这里写图片描述

可以看到成功显示出了info接口的信息,且label的名字是在server端设置的label名,说明客户端成功远程连接了server端。

上边的通过curl的方式连接其实是RESTfulAPI的连接,也可以通过docker的client命令行连接,同样通过-H指定连接方式,命令如下:

docker -H tcp://192.168.177.138:2375/ info
同样输出了第一台服务器docker的info信息

简化连接命令

上述的连接命令都要使用-H来制定连接的服务端ip,docker提供了默认的环境变量DOCKER_HOST,通过设置它的值为需要连接的服务端ip来在命令中省去-H参数,设置如下:

export DOCKER_HOST=“tcp://192.168.177.138:2375/”

这样,现在使用命令docker info连接的就是服务端的docker的info信息了。

当使用完毕,可以将这个环境变量置空:export DOCKER_HOST="",这样再连接就是本地docker了。

设置docker远程连接的主机可以连接本机
在设置了远程连接的服务器上运行docker info会发现:

这里写图片描述

这时可以这样设置,修改启动配置文件中刚增加的OPTIONS为:

OPTIONS=’–label name=docker_server_1 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock’

可以看出-H指定的连接方式可以是多个

然后重启docker服务就可以本地连接了。


Docker守护进程的配置和操作

查看守护进程
$ ps -ef | grep docker
$ sudo status docker
使用service命令管理
$ sudo service docker start
$ sudo service docker stop
$ sudo service docker restart
Docker的启动选项
docker -d [options]  : -d代表以守护进程来运行docker的程序运行相关:
-D,--debug=false   :debug模式的开启
-e,--exec-driver="native"  
-g,--graph="/var/lib/docker"  
-icc=true      :
-l,-log-level="info"     
--label=[]   :
-p,--pidfile="/var/run/docker.pid"   Docker服务器连接相关:
-G --group="docker"  :用户组
-H --host=[]         :对连接socket的配置
--tls=false          :安全性相关的一系列选项
--tlscacert="/home/sven/.docker/ca.pem"
--tlscert="/home/sven/.docker/cert.pem"
--tlskey="/home/sven/.docker/key.pem"
--tlsverify=falseRemoteAPI相关:
-api-enable-cors=false    :包含了RemoteAPI相关的选项存储相关:
-s,--storage-driver=""      :存储驱动选项
--selinux-enabled=false     :
--storage-opt=[]            :Registry相关:
--insecure-registry=[]   :Registry仓库设置相关的选项
--registry-mirror=[]     :网络设置相关:
-b,--bridge=""
--bip=""
--fixed-cidr=""
--fixed-cidr-v6=""
--dns=[]
--dns-search=[]--ip=0.0.0.0
--ip-forword=true
--ip-masq=true
--iptables=true
--ipv6=false
--mtu=0
启动配置文件
ubuntu的配置文件路径: /etc/default/docker
centos7的配置文件路径: /etc/docker/daemon.json
Docker的远程访问
环境准备

1.第二台安装Docker的服务器

2.修改Docker守护进程启动选项,区别服务器

3.保证Client API 与Server API版本一致

修改服务器端配置
修改Docker守护进程启动选项
-H     unix:///var/run/docker.socktcp://host:portfd://socketfd守护进程默认配置:-H unix:///var/run/docker.sock

Dockerfile指令 -指令格式

FROM

功能为指定基础镜像,并且必须是第一条指令。

如果不以任何镜像为基础,那么写法为:FROM scratch。

同时意味着接下来所写的指令将作为镜像的第一层开始

语法:

FROM <image>
FROM <image>:<tag>
FROM <image>:<digest> 

三种写法,其中和 是可选项,如果没有选择,那么默认值为latest

RUN

功能为运行指定的命令

RUN命令有两种格式

1. RUN <command>  (shell模式)
2. RUN ["executable", "param1", "param2"]  (exec模式)

第一种后边直接跟shell命令

  • 在linux操作系统上默认 /bin/sh -c
  • 在windows操作系统上默认 cmd /S /C

第二种是类似于函数调用。

可将executable理解成为可执行文件,后面就是两个参数。

两种写法比对:

  • RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME
    
  • RUN ["/bin/bash", "-c", "echo hello"]
    

注意:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.

多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。

RUN书写时的换行符是\

CMD

功能为容器启动时要运行的命令

语法有三种写法

1. CMD ["executable","param1","param2"]
2. CMD ["param1","param2"]
3. CMD command param1 param2

第三种比较好理解了,就时shell这种执行方式和写法

第一种和第二种其实都是可执行文件加上参数的形式

举例说明两种写法:

  • CMD [ "sh", "-c", "echo $HOME" 
    
  • CMD [ "echo", "$HOME" ]
    

补充细节:这里边包括参数的一定要用双引号,就是",不能是单引号。千万不能写成单引号。

原因是参数传递后,docker解析的是一个JSON array

RUN & CMD

不要把RUN和CMD搞混了。

RUN是构件容器时就运行的命令以及提交运行结果

CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子

LABEL

功能是为镜像指定标签

语法:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

一个Dockerfile种可以有多个LABEL,如下:

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号

如下:

LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"

说明:LABEL会继承基础镜像种的LABEL,如遇到key相同,则值覆盖

MAINTAINER

指定作者

语法:

MAINTAINER <name>

EXPOSE

功能为暴露容器运行时的监听端口给外部

但是EXPOSE并不会使容器访问主机的端口

如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上 -P参数

ENV

功能为设置环境变量

语法有两种

1. ENV <key> <value>
2. ENV <key>=<value> ...

两者的区别就是第一种是一次设置一个,第二种是一次设置多个

ADD

ADD包含类似tar的解压功能

一个复制命令,把文件复制到镜像中。

如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而ADD不用。

语法如下:

1. ADD <src>... <dest>
2. ADD ["<src>",... "<dest>"]

路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径

可以是一个本地文件或者是一个本地压缩文件,还可以是一个url

如果把写成一个url,那么ADD就类似于wget命令

如以下写法都是可以的:

  • ADD test relativeDir/ 
    
  • ADD test /relativeDir
    
  • ADD http://example.com/foobar /
    

尽量不要把写成一个文件夹,如果是一个文件夹了,复制整个目录的内容,包括文件系统元数据

COPY

看这个名字就知道,又是一个复制命令

语法如下:

1. COPY <src>... <dest>
2. COPY ["<src>",... "<dest>"]

与ADD的区别

COPY的只能是本地文件,其他用法一致

ENTRYPOINT

功能是启动时的默认命令

语法如下:

1. ENTRYPOINT ["executable", "param1", "param2"]
2. ENTRYPOINT command param1 param2

如果从上到下看到这里的话,那么你应该对这两种语法很熟悉啦。

第二种就是写shell

第一种就是可执行文件加参数

与CMD比较说明(这俩命令太像了,而且还可以配合使用):

\1. 相同点:

  • 只能写一条,如果写了多条,那么只有最后一条生效
  • 容器启动时才运行,运行时机相同

\2. 不同点:

  • ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
  • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数

如下:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
  • 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它们两个会互相覆盖,谁在最后谁生效

如下:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ls -al

那么将执行ls -al ,top -b不会执行。

Docker官方使用一张表格来展示了ENTRYPOINT 和CMD不同组合的执行情况

(下方表格来自docker官网)

img

VOLUME

可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器中

语法为:

VOLUME ["/data"]

说明:

["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的

VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db

一般的使用场景为需要持久化存储数据时

容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。

所以当数据需要持久化时用这个命令。

USER

设置启动容器的用户,可以是用户名或UID,所以,只有下面的两种写法是正确的

  • USER daemo
    
  • USER UID
    

注意:如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行

USER user

USER user:group

USER user:gid

USER uid

USER uid:gid

USER uid:group

如果不使用user指令指定用户,会默认用使用root用户

WORKDIR

语法:

WORKDIR /path/to/workdir

设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。

如:

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

pwd执行的结果是/a/b/c

WORKDIR也可以解析环境变量

如:

ENV DIRPATH /path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd

pwd的执行结果是/path/$DIRNAME

ARG

语法:

ARG <name>[=<default value>]

设置变量命令,ARG命令定义了一个变量,在docker build创建镜像的时候,使用 --build-arg =来指定参数

如果用户在build镜像时指定了一个参数没有定义在Dockerfile中,那么将有一个Warning

提示如下:

[Warning] One or more build-args [foo] were not consumed.

我们可以定义一个或多个参数,如下:

FROM busybox
ARG user1
ARG buildno
...

也可以给参数一个默认值:

FROM busybox
ARG user1=someuser
ARG buildno=1
...

如果我们给了ARG定义的参数默认值,那么当build镜像时没有指定参数值,将会使用这个默认值

ONBUILD

语法:

ONBUILD [INSTRUCTION]

这个命令只对当前镜像的子镜像生效。

比如当前镜像为A,在Dockerfile种添加:

ONBUILD RUN ls -al

这个 ls -al 命令不会在A镜像构建或启动的时候执行

此时有一个镜像B是基于A镜像构建的,那么这个ls -al 命令会在B镜像构建的时候被执行。

STOPSIGNAL

语法:

STOPSIGNAL signal

STOPSIGNAL命令是的作用是当容器推出时给系统发送什么样的指令

HEALTHCHECK

容器健康状况检查命令

语法有两种:

1. HEALTHCHECK [OPTIONS] CMD command
2. HEALTHCHECK NONE

第一个的功能是在容器内部运行一个命令来检查容器的健康状况

第二个的功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三中选项:

–interval=DURATION 两次检查默认的时间间隔为30秒

–timeout=DURATION 健康检查命令运行超时时长,默认30秒

–retries=N 当连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3

注意:

HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效。

CMD后边的命令的返回值决定了本次健康检查是否成功,具体的返回值如下:

0: success - 表示容器是健康的

1: unhealthy - 表示容器已经不能工作了

2: reserved - 保留值

例子:

HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1

健康检查命令是:curl -f http://localhost/ || exit 1

两次检查的间隔时间是5秒

命令超时时间为3秒


DockerFile构建过程

  1. 从基础镜像运行一个容器
  2. 执行一条指令,对容器做出修改
  3. 执行类似docker commit的操作, 提交一个新的镜像层
  4. 再基于刚提交的镜像运行一个新容器
  5. 执行Dockerfile中的下一条指令,知道所有指令执行完毕

Docker容器的网络基础

Docker容器的网络基础-docker0

Linux虚拟网桥:OSI七层模型中的网桥:数据链路层

Linux虚拟网桥的特点

  • 可以设置ip地址
  • 相当于拥有一个隐藏的虚拟网卡

Docker的地址划分:

  • IP:172.17.42.1
  • 子网掩码:255.255.0.0
  • MAC:02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
  • 总共提供了65534个地址
docker容器的网络基础-自定义docker0

修改docker0地址:

$ sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0

Docker容器的网络基础-自定义虚拟网桥
添加虚拟网桥
$ sudo brctl addbr br0
$ sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
更改centos7中docker守护进程的启动配置:
/etc/docker/daemon.json 中添加DOCKER——OPS的值 
-b=bro
MAC是什么?

MAC地址英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 [1] 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 。

通俗解释:

身份证就是用来证明一个人的身份。平日身份证的作用并不是很大,但是到了有的关键时刻,必须有身份证来说明一个人的一切。那么,IP地址与MAC地址绑定,就如同在日常生活中一个人与身份证的关系。因为,IP地址可以随意的,但MAC地址是唯一说明IP地址身份的。例如,为防止IP地址被盗用,通常交换机的端口绑定(端口的MAC表使用静态表项),可以在每个交换机端口只连接一台主机的情况下防止修改MAC地址的盗用,如果是三层设备还可以提供交换机端口、IP地址和MAC地址三者的绑定

MAC与IP地址区别:

IP地址和MAC地址相同点是它们都唯一,不同的特点主要有:

  1. 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址是基于网络拓扑设计出的,同一台设备或计算机上,改动IP地址是很容易的(但必须唯一),而MAC则是生产厂商烧录好的,一般不能改动。我们可以根据需要给一台主机指定任意的IP地址,如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,也可以将它改成192.168.0.200。而任一网络设备(如网卡,路由器)一旦生产出来以后,其MAC地址不可由本地连接内的配置进行修改。如果一个计算机的网卡坏了,在更换网卡之后,该计算机的MAC地址就变了 [5] 。

  2. 长度不同。IP地址为32位,MAC地址为48位 [5] 。

  3. 分配依据不同。IP地址的分配是基于网络拓扑,MAC地址的分配是基于制造商 [8] 。

  4. 寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过MAC地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,找到中间节点的MAC地址,通过中间节点传送,从而最终到达目的网络)

​ ------百度百科


Docker容器的互联

Docker容器的互联-环境准备
用于测试的Docker镜像Dockerfile:
FROM centos:7
RUN yum install -y ping
RUN yum update
RUN yum install -y nginx
RUN yum install -y curl
EXPOSE 80
CMD /bin/bash
Docker容器的互联 -允许所有容器间互联
Docker守护进程的启动选项
--link
$ docker run --link=[CONTAINER_NAME]:[ALIAS]  [IMAGE] [COMMOND]
Docker容器的互联-拒绝所有容器间互联
Docker守护进程的启动选项-icc=false
Docker容器互联-允许特定容器间互联
Docker守护进程的启动选项
--icc=false 
--iptables=true
--link

Docker容器与外部网络的 连接

Docker容器与外部网络的 连接-ip_forward
--ip=forward=true
$ sysctl net.ipv4.conf.all.forwarding
Docker容器与外部网络的 连接-ip_tables

什么是iptables
iptables是与Linux内核集成的包过滤防火墙系统,几乎所有的Linux发行版本都会包含iptables的功能。

Iptables

表(table)
链(chain)
规则(rule)
ACCEPT、REJECT、DROP

每一个大的方块中,就是iptables中的一个链(chain),每一个链实际上就是数据处理中的一个环节,而在每个环节中又包含了不同的操作。

  • 允许端口映射访问

  • 限制IP访问容器

实质都是通过iptables的规则来控制的。


Docker容器的数据管理

Docker-Docker容器的数据卷-什么是数据卷

什么是数据卷(Data Volume)

  1. 数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问。

  2. 其设计目的在于数据的永久化,数据卷是存在于宿主机中的文件或者目录,因此它与Docker容器的生命周期是完全分离的,Docker不会在容器删除时删除其挂载的数据卷,也不会存在类似的垃圾收集机制,对容器引用的数据卷进行处理。

数据卷的架构:

img

数据卷的特点:

  1. 数据卷在容器启动时初始化,如果容器使用的镜像再挂载点包含了数据,这些数据会拷贝到新初始化的数据卷中。
  2. 数据卷可以在容器之间共享和重用
  3. 可以对数据卷里的内容直接进行修改
  4. 数据卷的变化,不会影响镜像的更新
  5. 卷会一直存在,即使挂载数据卷的容器已经被删除
Docker-Docker容器的数据卷-数据卷的使用
在容器启动时,为容器添加数据卷需要用到 docker run 命令的 -v 选项:
docker run -v <宿主机文件或目录>:<对应的容器目录>[:ro ] [image]
$docker run -v ~/container_data:/data -it centos:7 /bin/bash为数据卷添加访问权限
$ docker run -v ~/datavolume:/data:ro -it centos:7 /bin/bash  : ro只读权限使用Dockerfile构建包含数据卷的镜像
Dockerfile指令:
VOLUME["/data"]
Docker的是数据卷容器-数据卷容器

什么是数据卷容器:

命名的容器挂载数据卷,其它容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。

使用数据卷容器共享数据的架构:

img

挂载数据卷容器的方法:

$docker run --volumes from [CONTAINER NAME]
Docker数据卷的备份和还原-数据备份
数据卷的备份和还原本质上就是系统文件的备份和还原。
数据备份方法
docker run --volumes-from [container name] -v $(pwd):/backup centos:7 tar cvf /backup/backup.tar [container data volume]数据备份实例:[root@localhost dockerfiles]# docker run --volumes-from volume1 -v ~/backup:/backup --privileged=true centos tar cvf backup/volume.tar usr/local/volume数据还原方法
docker run --volumes-from [container name] -v $(pwd):/backup centos:7 tar xvf /backup/backup.tar [container data volume] 数据还原实例:
[root@localhost dockerfiles]# docker run --volumes-from volume1 -v ~/backup:/backup --privileged=true centos tar xvf backup/volume.tar usr/local/volume

Docker-Docker容器的跨主机连接

Docker-Docker容器的跨主机连接 - 使用网桥实现跨主机容器连接

​ 在同一宿主机下的Docker的容器之间是默认互相联通的。在容器内通过ifconfig可以查看到ip地址。在不同的容器中来执行ping是可以ping通的。

但我们通过观察发现,每一个启动容器的ip地址不是固定的,所以如果我们通过ip地址来实现互连明显是不靠谱的。但我们发现这些ip又处于同一网段中而且默认是172.17.0.X,这就是Docker容器默认跨主机之间的链接方法的第一种:网桥实现

在docker宿主机上运行ifconfig命令可以看的存在一个docker0的网桥。Docker容器通过docker0 网桥实现同一主机间中,容器的ip地址分配和访问,所以,如果希望Docker跨主机访问,最简单的方式就是将不同主机的docker0 设置为同一网段。

整个网络的拓扑结构图:
这里写图片描述

使用网桥实现跨主机容器连接 - 环境准备
  • 2台ubuntu虚拟机,
  • 在2个虚拟机中分别安装网桥管理工具(apt-get install bridge-utils),
  • 2台机器的ip地址分别是10.211.55.3,10.211.55.5
使用网桥实现跨主机容器连接 - 网络设置

在虚拟机中配置网桥的连接:修改网络配置文件/etc/network/interfaces来实现网桥的配置和添加。这些命令指定了要建立网桥的名称,ip分配的方式,子网掩码,默认的网关,以及指明了将本地的物理网卡连接到新建的网桥上:

auto br0iface br0 inet staticaddress 10.211.55.3netmask 255.255.255.0gateway 10.211.55.1bridge_ports eth0
使用网桥实现跨主机容器连接 - Docker设置
在docker端需要为docker的守护进程指定2个启动配置选项:修改/etc/default/docker文件(这是docker守护进程启动配置文件)-b指定自定义网桥的名字:-b=br0--fixed-cidr指定的是自定义网桥为容器分配ip地址时使用的ip段,为了避免在2台主机中的容器的ip地址产生冲突,HOST1 : 10.211.54.64/26地址范围:10.211.55.65  ~ 10.211.55.126HOST2 : 10.211.55.128/26地址范围:10.211.55.129 ~ 10.211.55.190
两台主机的具体配置如下:

第一台主机:

$sudo apt-get install bridge-utils$sudo vim /etc/network/interfacesauto br0iface br0 inet staticaddress 10.211.55.3netmask 255.255.255.0gateway 10.211.55.1bridge_ports enp0s25(本机网卡名)$sudo vim /etc/default/dockerDOCKER_OPTS=”-b=br0  --fixed-cidr=10.211.54.64/26”$sudo reboot  :  重启系统

第二台主机:

$sudo apt-get install bridge-utils$sudo vim /etc/network/interfacesauto br0iface br0 inet staticaddress 10.211.55.5netmask 255.255.255.0gateway 10.211.55.1bridge_ports eth0$sudo vim /etc/default/dockerDOCKER_OPTS=“-b=br0  --fixed-cidr=10.211.55.128/26”$sudo reboot  :  重启系统

验证:

1.分别在两个Host上启动一个容器

$ docker run -it ubuntu /bin/bash

2.在容器中运行ping命令查看连接情况

使用网桥实现跨主机容器连接 - 总结

**优点:**配置简单,不依赖第三方软件

**缺点:**与主机在同网段,需要小心划分IP地址,需要有网段控制权,在生产环境中不易实现,不容易管理,兼容性不佳。


Docker-Docker容器的跨主机连接 - 使用Open vSwitch实现跨主机容器连接

Open vSwitch是什么?

Open vSwitch是一个开源的虚拟的交换机软件,实际上Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的c代码。他的目的是让大规模网络自动化可以通过变成扩展,同时仍然支持标准的管理接口和协议(例如:NetFlow,sFlow,SPAN,RSPAN,CLI.802.1ag)

使用Open vSwitch实现跨主机容器连接 - 原理

img

GRE隧道

GRE:通用路由协议封装

隧道技术:是一种通过使用互联网的基础设施在网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。

环境装备:

a.安装Open vSwitch

sudo apt-get install openvswitch-switch

b.安装网桥

sudo apt-get install bridge-utils

c.IP地址

Host1:192.168.59.103
Host2:192.168.59.104

操作:

1、查看ovs的状态

$sudo ovs-vsctl show

2、建立ovs网桥

$sudo ovs-vsctl add-br obr0(网桥名称)

3、添加GRE接口

$sudo ovs-vsctl add-port obr0 gre0(gre名字)

4、设置GRE接口

$sudo ovs-vsctl set interface gre0(gre名字) type=gre option:remote_ip=192.168.59.104(指定我们需要连接的远程服务器的地址,也就是我们索要连接的另一台虚拟机的地址)

5、查看ovs设置的状态

$sudo ovs-vsctl show

6、建立本机docker容器需要使用的虚拟网桥

$sudo brctl addbr br0(网桥名称)

7、为br0设置网络地址

$sudo ifconfig br0 192.168.1.1 netmask 255.255.255.0

8、为br0网桥添加ovs网桥的连接

$sudo brctl addif br0 obr0

9、查看ovs设置的状态

$sudo ovs-vsctl show

10、配置docker用我们新建的网桥来配置dcoker0

DOCKER_OPTS=" -b=br0"

11、重启docker服务

$sudo service docker restart

12、创建一个容器

$ping另一台主机可以ping通,却ping不通另一个主机的里的容器

这是因为对于不通网段来说,我们需要通过路由表来确定不通网段网络的地址
13、查看当前的路由表

$route

14、添加容器使用网段路由信息

$sudo ip route add 192.168.2.0/24(网段的名) via 192.168.59.104(告诉路由器查找网段的地址) dev eth0(指定查找设备,通过本机的eth0网卡)

总结:比网桥连接复杂些,但是能够有效的跨越网络中的障碍来实现网络中容器之间的连接。虽然复杂,但是可以将操作写成脚本将操作自动化。

Docker-Docker容器的跨主机连接 - 使用weave实现跨主机容器连接

weave简介

语义:编织

weave:开源的。建立一个虚拟的网络,用于将运行在不同主机的docker容器连接起来。

img

环境准备

IP地址
Host1:192.168.59.103
Host2:192.168.59.104

操作:

1、下载weave

$sudo wget -O /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave

通过github网址下载weave并且保存在本地/usr/bin/weave文件夹下
2、更改weave文件夹的模式,让他可以执行

$sudo chmod a+x /usr/bin/weave

这样weave就可以使用了
3、启动weave

$weave launch

在启动weave时,实际上会在docker上运行一个weave的容器。
4、配dockerhost2
5、dockerHost2中运行

$weave launch 192.168.59.103

这时和第一个不一样,要将dockerHost1的IP地址传入,这是为了使两个dickerhost能够正确的连接在一起。
6、在dockerHost2使用veavw创建一个容器

$c2=$(weave launch 192.168.1.2/24(这个IP地址就是在将要启动的容器中分配的IP地址,这个IP就是weave来维护的) -it ubuntu /bin/bash)

7、在dockerHost1使用veavw创建一个容器

weave launch 192.168.1.10/24 -it --name wec1 ubuntu /bin/bash

8、这时ping另一个容器就很容易ping通了

其他特性

  • 应用隔离:不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通(使用-icc=false关闭容器互通);不同物理机之间的容器默认也是隔离的

  • 安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信

  • 查看weave路由状态:weave ps

总结:使用weave工具非常容易的为docker容器指定一个我们任意希望分配的IP地址,并且非常方便来划分IP地址段,从而将不同主机的容器划分在不通的网段中。
不但可以实现跨主机的容器连接,而且非常方便的来限定跨主机的方式运用什么样的方式来连接。

后记:

文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!

点赞是一种积极的生活态度,赞一个吧!

show


10、配置docker用我们新建的网桥来配置dcoker0```bash
DOCKER_OPTS=" -b=br0"

11、重启docker服务

$sudo service docker restart

12、创建一个容器

$ping另一台主机可以ping通,却ping不通另一个主机的里的容器

这是因为对于不通网段来说,我们需要通过路由表来确定不通网段网络的地址
13、查看当前的路由表

$route

14、添加容器使用网段路由信息

$sudo ip route add 192.168.2.0/24(网段的名) via 192.168.59.104(告诉路由器查找网段的地址) dev eth0(指定查找设备,通过本机的eth0网卡)

总结:比网桥连接复杂些,但是能够有效的跨越网络中的障碍来实现网络中容器之间的连接。虽然复杂,但是可以将操作写成脚本将操作自动化。

Docker-Docker容器的跨主机连接 - 使用weave实现跨主机容器连接

weave简介

语义:编织

weave:开源的。建立一个虚拟的网络,用于将运行在不同主机的docker容器连接起来。

[外链图片转存中…(img-7mwRjck6-1591107709122)]

环境准备

IP地址
Host1:192.168.59.103
Host2:192.168.59.104

操作:

1、下载weave

$sudo wget -O /usr/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave

通过github网址下载weave并且保存在本地/usr/bin/weave文件夹下
2、更改weave文件夹的模式,让他可以执行

$sudo chmod a+x /usr/bin/weave

这样weave就可以使用了
3、启动weave

$weave launch

在启动weave时,实际上会在docker上运行一个weave的容器。
4、配dockerhost2
5、dockerHost2中运行

$weave launch 192.168.59.103

这时和第一个不一样,要将dockerHost1的IP地址传入,这是为了使两个dickerhost能够正确的连接在一起。
6、在dockerHost2使用veavw创建一个容器

$c2=$(weave launch 192.168.1.2/24(这个IP地址就是在将要启动的容器中分配的IP地址,这个IP就是weave来维护的) -it ubuntu /bin/bash)

7、在dockerHost1使用veavw创建一个容器

weave launch 192.168.1.10/24 -it --name wec1 ubuntu /bin/bash

8、这时ping另一个容器就很容易ping通了

其他特性

  • 应用隔离:不同子网容器之间默认隔离的,即便它们位于同一台物理机上也相互不通(使用-icc=false关闭容器互通);不同物理机之间的容器默认也是隔离的

  • 安全性:可以通过weave launch -password wEaVe设置一个密码用于weave peers之间加密通信

  • 查看weave路由状态:weave ps

总结:使用weave工具非常容易的为docker容器指定一个我们任意希望分配的IP地址,并且非常方便来划分IP地址段,从而将不同主机的容器划分在不通的网段中。
不但可以实现跨主机的容器连接,而且非常方便的来限定跨主机的方式运用什么样的方式来连接。

后记:

文章持续更新,如果喜欢,请拿起你们可爱的小手,给我点个赞吧!

点赞是一种积极的生活态度,赞一个吧!

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

相关文章

  1. 洞悉MySQL底层架构:游走在缓冲与磁盘之间

    提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系。为此我撰写了这篇文章,试图让这些底层架构相关知识更加直观易懂:尽量以图文的…...

    2024/4/16 8:03:49
  2. Qlearning、sarsa以及sarsa_lambda

    Qlearning算法import numpy as np import gym import random if __name__ == __main__: env = gym.make("FrozenLake-v0") env.render() action_size = env.action_space.n print("Action size ", action_size) state_size = env.observation_spac…...

    2024/5/1 22:41:04
  3. SIFT算法详解

    尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Funzdd zddmail@gmail.com or (zddhub@gmail.com)对于初学者,从David G.Lowe的论文到实现,有许多鸿沟,本文帮你跨越。如果你学习SIFI得目的是为了做检索,也许 OpenSSE 更适合你,欢迎使用。…...

    2024/4/18 0:30:20
  4. ICE协议下NAT穿越的实现(STUN&TURN)

    对下文的内容添加举例说明:四种NAT类型:RFC3489 中将 NAT 的实现分为四大类:Full Cone NAT (完全锥形 NAT)Restricted Cone NAT (限制锥形 NAT ,可以理解为 IP 限制,Port不限制)Port Restricted Cone NAT (端口限制锥形 NAT,IP+Port 限制)Symmetric NAT (对称 NAT)…...

    2024/5/1 23:12:25
  5. 工作室成员2020春招总结

    写在开头 本人是双非本科生,目前大三,大学期间主要学习java,了解一点python,主要是做java服务端开发。大学期间参加了学校的一些技术工作室。2020年2月我正式开始了自己的春招之旅,先后获得了cvte、腾讯、美团、阿里等公司的实习offer,也正是在这个过程中,我学到了很多东…...

    2024/4/16 8:04:50
  6. HTTP 协议与原理分析之一

    一、网络协议分层网络协议分层,经典的五层模型,分为客户端和服务端。客户端是分为应用层到传输层,再到网络层,到数据链路层,最后到物理层。服务端是物理层到数据链路层,再到网络层,到传输层,最后到应用层。应用层最常见的是 HTTP、FTP等等,传输层最常见的是TCP、UDP等…...

    2024/4/19 15:11:07
  7. 25FPS实时图像去雨算法RSEN | Residual Squeeze-and-Excitation Network for Fast Image Deraining

    首先,从论文创新方面来说,可以说是毫无创新。但是,其25FPS的速度对于图像去雨来说还是一个很好很实用的模型,而且性能还能够SOTA! 论文地址:https://arxiv.org/pdf/2006.00757.pdfAbstract:图像去雨是一项重要的图像处理任务,因为雨水条纹不仅会严重降低图像的视觉质量…...

    2024/5/2 0:12:38
  8. 基于svd矩阵分解的推荐算法推荐网课平台(根据网速,功能以及用户的喜好推荐)包括ui界面

    背景 由于新型冠状肺炎疫情所致,为了保证学生学业进度,国家教育部提出“停课不停学”的要求。于是,各地教育部门详细地制定了关于线上教学的方案,线上教学成为广大学生与老师最受欢迎与信赖的上课方式。然而,线上教学也面临诸多问题,如上课方式的选择,有的线上教学软件只…...

    2024/4/28 11:07:57
  9. 还觉得linux命令难吗,看这篇2w多字的linux命令详解,通俗易懂

    序言本篇文章主要讲解了一些linux常用命令,主要讲解模式是,命令介绍、命令参数格式、命令参数、命令常用参数示例。由于linux命令较多,我还特意选了一些日常使用较为频繁的命令进行讲解,但还是免不了文章很长,建议大家收藏起来,用到的时候不会了再来阅读。当然学习linux命…...

    2024/5/1 23:53:08
  10. 2020春招总结

    写在开头 本人是双非本科生,目前大三,大学期间主要学习java,了解一点python,主要是做java服务端开发。大学期间参加了学校的一些技术工作室。2020年2月我正式开始了自己的春招之旅,先后获得了cvte、腾讯、美团、阿里等公司的实习offer,也正是在这个过程中,我学到了很多东…...

    2024/4/23 14:59:59
  11. 嵌入式linux应用开发A :课程作业3

    课程作业3 【3.1 安装NFS服务】 1、NFS允许计算机的客户-服务器模型,服务器实施共享文件系统,以及客户端所连接的存储。 A.对 B.错 答:对 2、nfs(network file system)是一种基于___的文件系统 答:网络文件系统 【3.2NFS服务配置实例】 1、NFS服务配置的一般步骤: A.设置共…...

    2024/4/24 10:12:16
  12. Shell脚本学习之expect命令

    一、概述 我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。expect是一个免费的编程工具语言,用来实现自动…...

    2024/4/24 10:12:15
  13. 数据分析与挖掘学习|python001

    python介绍 什么是python python是一种解释型、面向对象的语言。 python特点 1.可读性强 2.简洁 由c语言开发,不再有c语言中指针等复杂数据类型,简洁性让开发难度和代码幅度降低,开发任务大大简化。 3.面向对象 4.免费开源 5.可移植性和跨平台 python会被编译成与操作系统相…...

    2024/4/24 10:12:21
  14. day02

    颜色分类问题 leetcode 75这道题我开始当成排序题做了,因为要求是进行原地排序,所以我使用的是插入排序 public static void sortColors(int[] nums) { // 使用插入排序if (nums.length<2||nums==null) return;for (int i = 1; i <nums.length ; i++) {for (int…...

    2024/4/24 10:12:13
  15. Deep-Learning Processor(2014-2017)

    本文汇总了近年来关于Deep-Learning Processor领域的相关论文。 2014 ASPLOS Chen, Tianshi, et al. “DianNao: a small-footprint high-throughput accelerator for ubiquitous machine-learning.” architectural support for programming languages and operating systems …...

    2024/4/24 10:12:13
  16. Qlearnin、sarsa以及sarsa_lambda

    Qlearning算法import numpy as np import gym import random if __name__ == __main__: env = gym.make("FrozenLake-v0") env.render() action_size = env.action_space.n print("Action size ", action_size) state_size = env.observation_spac…...

    2024/4/24 10:12:12
  17. 街景字符识别比赛心得

    阿里天池-零基础入门CV赛事(街景字符识别编码)-Task 5 模型集成1 模型集成1.1 学习目标1.2 集成学习方法1.3 深度学习中的集成学习1.3.1 dropout1.3.2 TTA1.3.3 Snapshot 1 模型集成 本章讲解的知识点包括:集成学习方法、深度学习中的集成学习和结果后处理思路。 1.1 学习目…...

    2024/4/24 10:12:11
  18. 无意中发现的方法:一招让你的 IntelliJ Idea 飞起来

    一、引言 最近工作中使用到了 IntelliJ Idea,说实在的,不太熟悉这个 IDE。 不知道为什么,对比 Eclipse 和 IntelliJ Idea,在我的电脑上,竟然是 IntelliJ Idea 比 Eclipse 运行的更卡一些。尤其是 IntelliJ Idea 的内存占用,简直惊人,在我的办公电脑上,竟然达到了 恐怖的…...

    2024/4/24 10:12:09
  19. 机器学习2 模型评估选择

    真实情况 预测情况 正例 反例 正例 TP(预测为正例,正确) FN(预测为反例,错误) 反例 FP(预测为正例,错误) TN(预测为反例,正确)真正例率等于在真实情况为正例的时候,预测为正例/总的正例数 真反例率等于在真实情况为反例的时候,预测为反例/总的反例数 查准率等于预…...

    2024/4/24 10:12:08
  20. 《Python编程:从入门到实践》第六章笔记

    6.1 一个简单的字典 >>> alien_0 = {color:green,point:5} >>> alien_0 {color: green, point: 5}6.2 使用字典 在Python中,字典是一系列键-值对,可将任何Python对象用作字典中的值。 6.2.1 访问字典中的值 >>> alien_0[color] green6.2.2 添加键…...

    2024/4/24 10:12:10

最新文章

  1. python笔记:gensim进行LDA

    理论部分&#xff1a;NLP 笔记&#xff1a;Latent Dirichlet Allocation &#xff08;介绍篇&#xff09;-CSDN博客 参考内容&#xff1a;DengYangyong/LDA_gensim: 用gensim训练LDA模型&#xff0c;进行新闻文本主题分析 (github.com) 1 导入库 import jieba,os,re from ge…...

    2024/5/2 0:34:44
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Weblogic任意文件上传漏洞(CVE-2018-2894)漏洞复现(基于vulhub)

    &#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…...

    2024/5/2 0:30:25
  4. java的gradle,maven工程中使用selenium

    一、下载selenium库 &#xff08;1&#xff09;gradle工程 工程中会有一个build.gradle.kts的文件&#xff0c;这个文件可以定制 Gradle 的行为 在文件中添加下面代码&#xff0c;然后sync // implementation ("org.seleniumhq.selenium:selenium-java:4.19.1") …...

    2024/4/29 19:33:34
  5. OpenHarmony开发-连接开发板调试应用

    在 OpenHarmony 开发过程中&#xff0c;连接开发板进行应用调试是一个关键步骤&#xff0c;只有在真实的硬件环境下&#xff0c;我们才能测试出应用更多的潜在问题&#xff0c;以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先&#xf…...

    2024/5/1 13:12:16
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57