云原生(二)、Docker基础

Docker

Docker 是一种开源的容器化平台,用于开发、部署和运行应用程序。它允许开发者将应用程序及其所有依赖项打包到一个可移植的容器中,这个容器可以在任何支持 Docker 的环境中运行,无论是开发人员的个人笔记本电脑、测试环境、生产服务器还是云环境。

以下是 Docker 的一些主要特性和概念:

  1. 容器化技术: Docker 使用容器化技术,通过隔离进程和资源来打包应用程序及其依赖项。每个容器都是一个独立的运行环境,与宿主系统隔离,但与其他容器共享主机内核。这使得容器能够在各种环境中以一致的方式运行。

  2. 轻量级: 容器相对于传统的虚拟机来说更为轻量级,因为它们共享主机操作系统的内核,无需启动完整的操作系统实例。这使得容器的启动速度更快,占用更少的系统资源。

  3. 可移植性: Docker 容器可以在任何支持 Docker 的环境中运行,无论是在开发者的本地开发环境、测试环境还是生产服务器,以及公有云或私有云环境。

  4. 易于部署: Docker 容器可以通过 Docker 镜像进行部署。镜像是一个只读的模板,包含了运行容器所需的所有内容,包括代码、运行时环境、库、环境变量等。开发者可以轻松地创建、共享和更新镜像,使得应用程序的部署变得简单和可重复。

  5. 可扩展性: Docker 提供了丰富的 API 和生态系统,使得开发者可以扩展和定制 Docker 功能,满足特定的需求。

总的来说,Docker 提供了一种简单而强大的方式来打包、交付和运行应用程序,使得开发者能够更快速、更可靠地构建和部署软件。

1、安装Docker

1、官网安装参考手册:https://docs.docker.com/engine/install/centos/

2、保证操作系统环境符合要求

3、卸载旧的docker

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

4、国内服务器安装需要配置仓库地址

sudo yum install -y yum-utils  
# 外网地址 卡
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo#国内镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5、安装docker

#更新yum索引
yum makecache  fast
#安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6、启动与测试

sudo systemctl start dockersudo docker run hello-world

7、卸载

systemctl stop dockersudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extrassudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

2、镜像源配置

服务器在国内的,需要配置镜像源,提升下载速度。在服务器所在的云平台中搜索"容器镜像服务"。找到其中的镜像加速器。根据提示设置加速镜像源。

以华为云为例:(每个人加速器的地址不同)

请添加图片描述

执行docker info,当Registry Mirrors字段的地址为加速器的地址时,说明加速器已经配置成功。

[root@hcss-ecs-8f46 ~]# docker info
Client: Docker Engine - CommunityVersion:    25.0.4Context:    defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version:  v0.13.0Path:     /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version:  v2.24.7Path:     /usr/libexec/docker/cli-plugins/docker-compose。。。Registry Mirrors:https://xxxxxxxxxxxxxxxxxxxx.mirror.swr.myhuaweicloud.com/Live Restore Enabled: false

3、Hello-World 干了什么

使用 “sudo docker run hello-world” 完成了什么事?

1、寻找镜像(在本地仓库寻找镜像,存在则通过镜像启动容器,不存在则去dockerhub仓库寻找并下载镜像)

2、下载镜像(存在则下载到本地,不存在则超时报错 )

Unable to find image 'asfiuhfiasufhawfasgijig:latest' locally
docker: Error response from daemon: pull access denied for asfiuhfiasufhawfasgijig, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

3、仓库-镜像-容器

4、查看本地存在的镜像

[root@hcss-ecs-8f46 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   10 months ago   13.3kB

请添加图片描述

4、Docker命令

docker version
docker info #查看docker详细信息
1、帮助命令
docker --help
Common Commands:run         Create and run a new container from an imageexec        Execute a command in a running containerps          List containersbuild       Build an image from a Dockerfilepull        Download an image from a registrypush        Upload an image to a registryimages      List imageslogin       Log in to a registrylogout      Log out from a registrysearch      Search Docker Hub for imagesversion     Show the Docker version informationinfo        Display system-wide informationManagement Commands:builder     Manage buildsbuildx*     Docker Buildx (Docker Inc., v0.13.0)compose*    Docker Compose (Docker Inc., v2.24.7)container   Manage containerscontext     Manage contextsimage       Manage imagesmanifest    Manage Docker image manifests and manifest listsnetwork     Manage networksplugin      Manage pluginssystem      Manage Dockertrust       Manage trust on Docker imagesvolume      Manage volumesSwarm Commands:swarm       Manage SwarmCommands:attach      Attach local standard input, output, and error streams to a running containercommit      Create a new image from a container's changescp          Copy files/folders between a container and the local filesystemcreate      Create a new containerdiff        Inspect changes to files or directories on a container's filesystemevents      Get real time events from the serverexport      Export a container's filesystem as a tar archivehistory     Show the history of an imageimport      Import the contents from a tarball to create a filesystem imageinspect     Return low-level information on Docker objectskill        Kill one or more running containersload        Load an image from a tar archive or STDINlogs        Fetch the logs of a containerpause       Pause all processes within one or more containersport        List port mappings or a specific mapping for the containerrename      Rename a containerrestart     Restart one or more containersrm          Remove one or more containersrmi         Remove one or more imagessave        Save one or more images to a tar archive (streamed to STDOUT by default)start       Start one or more stopped containersstats       Display a live stream of container(s) resource usage statisticsstop        Stop one or more running containerstag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGEtop         Display the running processes of a containerunpause     Unpause all processes within one or more containersupdate      Update configuration of one or more containerswait        Block until one or more containers stop, then print their exit codesGlobal Options:--config string      Location of client config files (default "/root/.docker")-c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with"docker context use")-D, --debug              Enable debug mode-H, --host list          Daemon socket to connect to-l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")--tls                Use TLS; implied by --tlsverify--tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")--tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")--tlskey string      Path to TLS key file (default "/root/.docker/key.pem")--tlsverify          Use TLS and verify the remote-v, --version            Print version information and quit
2、镜像命令

docker images 展示列表

  • docker images -a 展示所有镜像
  • docker images -q 只展示镜像的id
  • docker images -aq 展示所有镜像的id

docker search 搜索镜像

  • docker search 镜像名称
  • docker search 镜像名称 --filter=Stars=50 收藏数大于50的镜像

docker pull 拉取镜像

  • docker pull 镜像名称:版本号 不带版本号则拉取最新版本

docker rmi 删除镜像

  • docker rmi 镜像名称/id(不一定输全,唯一即可)
  • docker rmi -f 镜像名称 强制删除
  • docker rmi -f $(docker images -aq) 删除所有镜像
3、容器命令

**docker run -itd 镜像名 ** 运行并在后台执行一个镜像

  • -d 后台启动
  • -i 让容器以交互的方式启动
  • -t 给容器分配一个终端使用
  • -p 指定端口映射
  • -P 随机暴露一个端口

查看容器命令

  • docker ps 查看运行的容器
  • docker ps -a 查看所有容器
  • docker ps -q 只查看id
# 运行并进入一个centos
docker run -itd centos#进入容器内部后。exit退出容器,会停止运行该容器,使用Ctrl+P+Q,不会停止运行容器#如果容器没有前台程序,-d后台启动后,仍旧无法保持容器启动状态
docker run -d centos

启动停止删除容器命令

  • docker start 容器名称/id 启动
  • docker restart 容器名称/id 重启
  • docker stop 容器名称/id 停止
  • docker kill 容器名称/id 强制停止
  • docker rm 容器名称/id 删除
  • docker rm -f 容器名称/id 强制删除
  • docker rmi -f $(docker ps -aq) 强制删除所有容器
4、其他常用命令

日志文件

  • docker logs
  • docker logs -tf 容器名称/id t时间戳,f打印最新日志
root@hcss-ecs-8f46 ~]# docker run -d centos /bin/sh -c "while true; do echo dayinlog;sleep 1;done"
8eb953c156567ebb444c61db8549e41abc1b655c29789df7cf0bc27c1eefd1fb
[root@hcss-ecs-8f46 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
8eb953c15656   centos    "/bin/sh -c 'while t…"   3 seconds ago    Up 3 seconds              infallible_mendel
8cc23452f957   centos    "/bin/bash"              14 minutes ago   Up 14 minutes             relaxed_wilbur
[root@hcss-ecs-8f46 ~]# docker logs -tf --tail 10 8eb953c15656
2024-03-13T11:41:36.417181845Z dayinlog
2024-03-13T11:41:37.418470622Z dayinlog
2024-03-13T11:41:38.420130400Z dayinlog
2024-03-13T11:41:39.421476353Z dayinlog
2024-03-13T11:41:40.423128221Z dayinlog
2024-03-13T11:41:41.424750606Z dayinlog
2024-03-13T11:41:42.426067446Z dayinlog
2024-03-13T11:41:43.427389098Z dayinlog
2024-03-13T11:41:44.428763016Z dayinlog

进程命令

  • docker top 容器名称/id

产看容器源数据 (经常使用)

能看到容器的镜像、日志、配置等详细数据

  • docker inspect 容器名称/id

进入容器

  • docker exec -it 容器名称/id /bin/bash

  • docker attach 容器名称/id 进入容器正在执行的终端,

    如果容器在执行死循环,则退不出来(卡死),例:

docker run -d centos /bin/sh -c "while true; do echo dayinlog;sleep 1;done"

拷贝

docker cp 容器id:/容器路径 宿主机路径

  • docker cp id:/home/test.go /root
5.一个简单的应用示例

启动nginx,并通过服务器ip:端口号的形式访问nginx初始页面

docker run -d --name my-Nginx -p 3500:80 nginx

请添加图片描述

#进入容器
docker exec -it my-Nginx /bin/bash

5.docker可视化界面

开放给公网的9000端口。docker自集成的一个可视化界面

[root@hcss-ecs-8f46 ~]# docker run -p 9000:9000 -p 8000:8000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mydata/portainer/data:/data -d portainer/portainer:linux-amd64-2.0.1# 安装并运行
Unable to find image 'portainer/portainer:linux-amd64-2.0.1' locally
linux-amd64-2.0.1: Pulling from portainer/portainer
b890dbc4eb27: Pull complete 
81378af8dad0: Pull complete 
Digest: sha256:77917f339201db91aa25e9498bc130aaf46faa69d16c78088d422df85ce114b1
Status: Downloaded newer image for portainer/portainer:linux-amd64-2.0.1
ae910af73e4f3af40568812a09cbe1af316dd9db3178849c31ba0a4a42cf2745
[root@hcss-ecs-8f46 ~]# 

6.docker镜像底层分析

Docker 镜像加载涉及到一系列步骤和概念。下面是一个简要的概述:

  1. Docker 镜像是什么?
    Docker 镜像是一个只读的模板,它包含了创建 Docker 容器所需的所有文件和元数据。镜像可以包含操作系统、应用程序和相关依赖。

  2. 镜像的存储和分发
    Docker 镜像存储在 Docker Registry 中,比如 Docker Hub。当你使用 docker pull 命令时,Docker 会从 Registry 中下载镜像到本地。这个过程通常是通过 HTTP 或 HTTPS 进行的。

  3. 镜像加载
    当你使用 docker run 命令来启动一个容器时,如果指定的镜像在本地不存在,Docker 会自动从 Registry 下载该镜像。然后,Docker 将这个镜像加载到本地的文件系统中。

  4. 联合文件系统 (Union File System)
    Docker 使用联合文件系统来构建镜像。这意味着一个镜像可以由多个文件系统层组成,每个文件系统层都可以看作是一个增量改变。当你启动一个容器时,Docker 会将这些文件系统层叠加在一起,使其看起来像一个完整的文件系统。

  5. 容器启动
    一旦镜像加载到本地,Docker 就可以使用这个镜像来创建和运行容器。容器是镜像的运行实例,它可以被启动、停止、删除等操作。

docker inspect centos#能看到镜像分片下载的片段。每一个片段可以复用,当其他镜像使用该片段时,不会重复下载"RootFS": {"Type": "layers","Layers": ["sha256:9eb82f04c782ef3f5ca25911e60d75e441ce0fe82e49f0dbf02c81a3161d1300","sha256:6427e36e38734cc5f8172a32837f1a7089fb3e3ae8b5c12f6882cb6466d6b482","sha256:1a4bac3ca47c45b2341b866d4403690c45c4a87e8cb897afda5dd6be52f37eda","sha256:7c06655789f2bd431a94e2cf7d363afbe3497ba18ca4565dc772ba82ade0cb74","sha256:411bb8845b78ec534f51535976d2a0c055c892e04d7f4fa67924c3a00a291f9e","sha256:902a5f810181e3b8b2f7c5e39013d1e4acceb917f1f778ac199d495abba1e9f3","sha256:52d9c23a9a201b21e95fed351c1ba1418a54ba1bd2ba26f5238d8bd8f38fd328","sha256:9ffac285cc4fa861d7843807b42d509e216a8a107f694c4ac68f2a2d670332c7","sha256:5ba1eb4d2ba5041fcc90b141f7942ff4e59570dddc8dc1786f2fe32d7d19c41d","sha256:9ba725af2ff003dfa3fa052c2a9d8580f46b78bb603986d3428037c328811a3f","sha256:d5455ab92c3f4a8a72d62f8ae5557440a8e5d09c6580e45f0f8f2747bb79c07d","sha256:7c77abddd30092838eb397a4c64e73ee743eca8bf2412c9914e8ad2e6191bed9"]
},

7.容器数据卷

Docker 容器数据卷是用于在容器和宿主机之间共享持久化数据的机制。这个概念最初在 Docker 0.7 版本中引入。

数据卷的主要作用是允许容器之间或容器与宿主机之间共享数据,并且这些数据可以在容器被销毁后仍然保留。数据卷可以用于存储应用程序的配置、日志、数据库文件等等。使用数据卷的优势包括数据的持久化、容器之间的数据共享、以及方便地对数据进行备份和恢复。

在 Docker 中,数据卷可以通过以下几种方式创建:

  1. 使用 -v 参数:可以在 docker run 命令中使用 -v 参数来创建数据卷,并将宿主机上的目录或文件挂载到容器内部的指定路径上。例如:docker run -v /host/path:/container/path ...

  2. 使用 --mount 参数:从 Docker 1.13 版本开始,推荐使用 --mount 参数来创建数据卷。这个参数提供了更加灵活的选项,可以指定数据卷的类型、读写权限等。例如:docker run --mount type=bind,source=/host/path,target=/container/path ...

  3. Dockerfile 中声明:在 Dockerfile 中使用 VOLUME 命令来声明数据卷。这样在容器运行时,Docker 将自动创建对应的数据卷。例如:

    FROM image:tag
    VOLUME /container/path
    

无论采用哪种方式,一旦数据卷被创建,容器内的数据变动将会直接反映到宿主机上,并且即使容器被删除,数据卷中的数据也会保留下来,直到手动删除数据卷为止。

# 将本机/home/ceshi 挂在至容器内的/root下
docker run -it -v /home/ceshi:/root centos /bin/bash#在本机与容器中各自新建文件,会发现容器内外都同时生成该文件
touch test.go#docker rm -f centos 删除容器后,外部文件仍然存在
1、匿名挂载与具名挂载

在 Docker 中,有两种主要的数据卷挂载方式:匿名挂载和具名挂载。

  1. 匿名挂载

    • 匿名挂载是通过 -v--volume 参数或者 --mount 参数而不指定目标路径来创建的挂载。例如:docker run -v /host/path ...
    • 在匿名挂载中,Docker 会自动生成一个随机的目录,并将它挂载到容器内指定的路径上。这样的挂载方式对用户来说是透明的,用户无需关心实际挂载的目录是什么。
    • 匿名挂载对于临时存储数据或者不关心数据存储位置的场景非常有用。
  2. 具名挂载

    • 具名挂载是通过 -v--volume 参数或者 --mount 参数来指定宿主机上的目录与容器内部的目录进行挂载的方式。例如:docker run -v /host/path:/container/path ...
    • 具名挂载中,用户需要明确指定宿主机上的路径和容器内的路径,这样就可以将宿主机上的目录挂载到容器内部。这样的挂载方式更加灵活,可以控制数据的存储位置和访问权限。
    • 具名挂载适用于需要持久化存储数据或者对数据存储位置有特定要求的场景。
docker volume inspect 容器名称/id
2、数据卷容器

匿名挂载数据卷时,如果直接启动两个相同的容器,容器内的数据挂载是不互通的。即容器1挂载完成后。容器2挂载相同目录的数据卷。容器1中挂载的数据变化后。容器2无变化。

  • 容器卷继承 --volumes-from
#在多个相同的容器中,如果想要共享数据,使用数据卷容器,将容器作为一个父数据卷
#其他容器来挂载到父卷下,就可以实现共享来
docker run -it --name docker02 --volumes-from docker01 my/centos

8.DockerFile

dockerfile是用来构Docker镜像的构建文件,是由一系列命令和参数构建的脚本文件。

构建步骤:

  • 编写dockerfile文件
  • Docker build 构建镜像
  • docker run 运行容器
DOckerFile 指令
FROM        # 是基于哪个镜像的基础镜像,当前新镜像
MAINTAINER	# 镜像维护者的姓名混合邮箱地址
RUN					# 容器构建时需要运行的命
EXPOSE			# 当前容器对外保留出的端口
WORKDIR			# 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV					# 用来在构建镜像过程中设置环境变量
ADD					# 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY				# 类似ADD,拷贝文件和目录到镜像中!
VOLUME			# 容器数据卷,用于数据保存和持久化工作
CMD					# 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效
ENTRYPOINT	# 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD			# 当构建一个被继承的DockrFi1e时运行命令,父镜像在被子镜像继承后,父镜像ONBUILD被触发
DockerFile构建过程

基础知识:
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、# 表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

流程:
1、docker从基础镜像运行一个容器

2、执行一条指令并对容器做出修改

3、执行类似 docker commit 的操作提交一个新的镜像层

4、Docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令,直到所有指令执行完成

9.简单的实践示例,发行自己版本的centos

Docker Hub 中99% 的镜像都是通过在base镜像(Scratch)中安装和配置需要的软件构建出来的

Scratch镜像很赞,它简洁、小巧而且快速,它没有bug、安全漏洞、延缓的代码或技术债务。除了被Docker添加了metadata之外,它

基本上是空的。

我们在使用Dockerfile构建docker镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工

作量,但付出的代价是需要下载很大的镜像包。

如果我们的需求是 在构建一个符合我们实际业务需求的Docker镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?

思路是使用空镜像scratch,可以说是真正的从零干始构建属于自己的镜像

创建dockerfile文件
FROM centos
# 作者信息
MAINTAINER MYNAME<MYEMAIL@email.com>
#设置一个路径变量
ENV MYPATH /usr/local
#工作地址
WORKDIR $MYPATH#在基础的centos上,添加自己的一些工具
RUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "---------end-------"
CMD /bin/bash
构建镜像

最后一个.代表全部执行

docker build -f dockerfile-mycentos -t mycentos:1.0 .

请添加图片描述

报错centos8中镜像仓库中appstream不存在。替换仓库源,成功构建镜像

FROM centos
# 作者信息
MAINTAINER MYNAME<MYEMAIL@email.com>
#设置一个路径变量
ENV MYPATH /usr/local
#工作地址
WORKDIR $MYPATH#解决centos8的问题,替换镜像源
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y#在基础的centos上,添加自己的一些工具
RUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "---------end-------"
CMD /bin/bash

请添加图片描述

docker history 可以查看镜像的变更历史

镜像发布

公用仓库 dockerhub https://hub.docker.com/

docekr login -u 用户名  -p  密码
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded#登录成功#上传镜像需要打标签
docker tag 8732db9fe584 bukel/mycentos:1.0
docker push bukel/mycentos:1.0#结束后,向全世界共享了你的镜像

请添加图片描述

镜像本地打包与加载
docker save
docker load

总结

请添加图片描述

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

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

相关文章

ROS Kinetic通信编程:话题、服务、动作编程

文章目录 一、话题编程二、服务编程三、动作编程 接上篇&#xff0c;继续学习ROS通信编程基础 一、话题编程 步骤&#xff1a; 创建发布者 初始化ROS节点向ROS Master注册节点信息&#xff0c;包括发布的话题名和话题中的消息类型按照一定频率循环发布消息 创建订阅者 初始化…

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…

从0开始回顾MySQL---事务四大特性

事务概述 事务是一个最小的工作单元。在数据库当中&#xff0c;事务表示一件完整的事儿。一个业务的完成可能需要多条DML语句共同配合才能完成&#xff0c;例如转账业务&#xff0c;需要执行两条DML语句&#xff0c;先更新张三账户的余额&#xff0c;再更新李四账户的余额&…

实现elasticsearch和数据库的数据同步

1. 数据同步 elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;elasticsearch也必须跟着改变&#xff0c;这个就是elasticsearch与mysql之间的数据同步。 1.1. 思路分析 常见的数据同步方案有三种&#xff1a; 同步调用 异步通知…

面试题手撕篇

参考博客 开始之前&#xff0c;理解递归 手写 浅拷贝 function shallow(target){if(target instanceof Array){return [...resObj]}else{return Object.assign({},target);} }手写深拷贝 const _sampleDeepClone target > {// 补全代码return JSON.parse(JSON.stringify…

EtherCAT开源主站 IGH 介绍及主站伺服控制过程

目录 前言 IGH EtherCAT主站介绍 主要特点和功能 使用场景 SOEM 主站介绍 SOEM 的特点和功能 SOEM 的使用场景 IGH 主站 和 SOEM对比 1. 功能和复杂性 2. 资源消耗和移植性 3. 使用场景 EtherCAT 通信原理 EtherCAT主站控制伺服过程 位置规划模式 原点复归模式…

Ansible非标记语言YAML与任务剧本Playbook

前言 上篇介绍了 Ansible 单模块&#xff08;AD-Hoc&#xff09;的相关内容Ansible自动化运维Inventory与Ad-Hoc-CSDN博客&#xff0c;Ad-Hoc 命令是一次性的、即时执行的命令&#xff0c;用于在远程主机上执行特定任务&#xff0c;这些命令通常用于快速执行简单的任务。当需要…

MS08-067 漏洞利用与安全加固

文章目录 环境说明1 MS08_067 简介2 MS08_067 复现过程3 MS08_067 安全加固 环境说明 渗透机操作系统&#xff1a;2024.1漏洞复现操作系统: Windows XP Professional with Service Pack 2- VL (English)安全加固复现操作系统&#xff1a;Windows XP Professional with Service …

C语言案例2,请编程序将“China“译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母,变为Glmre,持续更新~

一.题目 /* 请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。 例如,字母“A”后面第4个字母是“E”&#xff0c;用“E”代替“A”。因此,“China”应译为“Glmre”。 请编一程序,用赋初值的方法使cl,c2&#xff0c;c3,c4,c5 这5个变量的值分…

YoloV5改进策略:下采样改进|HWD改进下采样

摘要 本文使用HWD改进下采样&#xff0c;在YoloV5的测试中实现涨点。 论文解读 在卷积神经网络&#xff08;CNNs&#xff09;中&#xff0c;极大池化或跨行卷积等下采样操作被广泛用于聚合局部特征、扩大感受野和最小化计算开销。然而&#xff0c;对于语义分割任务&#xff…

HTML_CSS练习:HTML注释

一、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML注释</title> </head> <body><marquee loop"1">马龙强<!--下面的输入框是可以滚动的&#x…

【Python】清理conda缓存的常用命令

最近发现磁盘空间不足&#xff0c;很大一部分都被anaconda占据了&#xff0c;下面是一些清除conda缓存的命令 清理所有环境的Anaconda包缓存 删除所有未使用的包以及缓存的索引和临时文件 conda clean --all清理某一特定环境的Anaconda包缓存 conda clean --all -n 环境名清…

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubVersion 构建工具&#xff1a;maven、Ant、Gradle 自动部署&#xff1a;Capistrano、CodeDeploy 持续…

字符串函数(C语言详解)

1.字符串简介 字符串是一串连续的且以\0结尾的字符 char arr[]"zhangsan";//将字符串存到数组里面 char*a"lisi";//常量字符串 char arr1[]{z,h,a,n,g};//字符数组 注意&#xff1a; 1.以第一种形式初始化字符串时&#xff0c;计算机会自动在字符串末尾加…

GraspNet-baseline复现----Linux-Ubuntu

1.基本环境 Ubuntu 20.04Cuda 11.0 、cuDNN 80.0Python 3.7.16PyTorch 1.7.0 2.环境配置 PyTorch的版本对Cuda和Python的版本都有依赖&#xff0c;所以基本步骤是 确定需要安装的PyTorch版本 —> 通过 网站 确定对应的cuda版本和python版本 —> 创建虚拟环境配置环境。…

Node.js基础+原型链污染

Node.js基础 概述&#xff1a;简单来说Node.js就是运行在服务端的JavaScript&#xff0c;Node.js是一个基于Chrome JavaScript运行时建立的一个平台 大小写变换&#xff1a; toUpperCase&#xff08;&#xff09;&#xff1a;将小写字母转为大写字母&#xff0c;如果是其他字…

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

使用FFmpeg源码配置程序configure查看所有支持的编码器/解码器/封装/解封装及网络协议

查看支持编码器: configure --list-encoders 查看支持编码器: configure --list-decoders 查看所有支持的封装: configure --list-muxers 查看所有支持的解封装: configure --list-demuxers 查看所有支持的网络通信协议: configure --list-protocols

解决jsp request.getParameter乱码问题(兼容Tomcat 6~8三个版本)

JSP页面写法&#xff1a; <% page contentType"text/html; charsetutf-8" language"java" %> <% page import"java.io.*" %> <%! int getServerVersion(HttpServletRequest request) {ServletContext application request.getS…

移远通信亮相AWE 2024,以科技力量推动智能家居产业加速发展

科技的飞速发展&#xff0c;为我们的生活带来了诸多便利&#xff0c;从传统的家电产品到智能化的家居设备&#xff0c;我们的居家生活正朝着更智能、更便捷的方向变革。 3月14日&#xff0c;中国家电及消费电子博览会&#xff08;Appliance&electronics World Expo&#xf…