Docker常见命令使用

Docker命令是使用Docker的基础。这里记录下Docker日常运维过程中经常使用到的一些命令,更全面的命令还请参考Docker官网。

docker用法概述

Docker命令可以通过CLI工具实现与服务器的交互。Docker命令的语法如下:

docker [DOCKER-COMMAND] [OPTIONS] [IMAGE-NAME|CONTAINER-NAME] [COMMAND] [ARG...]

其中,DOCKER-COMMAND、OPTIONS、IMAGE-NAME、CONTAINER-NAME等表示的含义如下:
(1) DOCKER-COMMAND:表示Docker支持的子命令,如container表示容器管理,image表示镜像管理,login/logout表示登入/登出镜像注册中心,等等。
(2) OPTIONS:表示命令执行时需要的参数,不同子命令,根据其功能差异,OPTIONS的参数各有不同。
(3) IMAGE-NAME|CONTAINER-NAME:指定需要操作的镜像名或容器名。对于某些子命令支持同时操作多个对象。
(4) COMMAND:需要执行的指令,主要用于容器场景,表示在容器内执行的命令。
(5) ARG:指令参数,配合COMMAND使用。

docker容器操作命令

Docker使用过程中,最经常接触的、使用频率最高的就是Docker容器操作相关的命令。如

容器生命周期管理

Docker容器的生命周期包括以下关键阶段:
请添加图片描述

docker create

可以使用docker create命令或docker container create命令来新建一个容器。docker create是docker container create的简写形式。其语法表示如下:

docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

使用docker create命令创建的容器处于Created状态,还未运行起来,可以使用docker start命令来启动它。使用示例如下:

$ docker create -it ubuntu:latest

上述示例中新建了一个容器,对应的镜像名称是ubuntu,对应的镜像版本选用最新版本。
docker create命令支持的选项十分复杂,需要读者在实践中不断体会。具体来说,主要包括如下几大类:与容器运行模式相关、与容器环境配置相关、与容器资源限制和安全保护相关等。更多docker create命令介绍可以参考官网docker container create一文。

docker run

除了使用docker create命令创建容器后通过docker start命令来启动,也可以使用docker run命令直接新建并启动容器。docker run是docker container run的简写形式。其语法表示如下:

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

使用示例如下:

$ docker run -it ubuntu:latest /bin/bash

上述示例中,启动并运行一个容器,对应的镜像名称是ubuntu,对应的镜像版本选用最新版本。容器启动后,启用bin/bash这个shell。其中,-t选项让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。用户使用exit命令退出bash后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要。

更多docker run命令介绍可以参考官网docker container run一文。

docker start

使用 docker [container] start 命令来启动一个已经创建的容器。例如,启动刚创建的 ubuntu容器:

$ docker start ubuntu

通过 docker ps命令,可以查看到一个运行中的容器:

$ docker ps
CONTAINER    ID            IMAGE         COMMAND     CREATED       STATUS  PORTS  NAMES
ubuntu       af8f4f922daf  ubuntu:latest "/bin/bash" 2 minutes ago Up             silly_euler
docker stop

可以使用 docker [container] stop 来终止一个运行中的容器。该命令的格式如下:

docker [container] stop [-t | --time [=10]] [CONTA工NER...]  

该命令会首先向容器发送 SIGTERM 信号,等待一段超时时间后(默认为 10 秒),再发送 SIGK工LL 信号来终止容器。示例如下:

$ docker stop docker-name-or-docker-id

此时再执行 docker container prune 命令,会自动清除掉所有处于停止状态的容器。
此外,还可以通过 docker [container] kill 直接发送 SIGKILL 信号来强行终止容器。
当 Docker 容器中指定的应用终结时,容器也会自动终止。 例如,对于只启动了一个bash终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器也会立刻终止,处于停止状态。
处于终止状态的容器,可以通过 docker [container] start 命令来重新启动。
而 docker [container] restart 命令会将一个运行态的容器先终止,然后再重新启动。

docker pause

可以使用 docker [container] pause CONTAINER [CONTAINER … ]命令来暂停一个运行中的容器。示例如下:

docker pause docker-name-or-docker-id

处于 paused 状态的容器,可以使用 docker [container] unpause CONTAINER [CONTAINER …] 命令来恢复到运行状态。

docker rm

可以使用 docker [container] rm命令来删除处于终止或退出状态的容器,命令格式如下:

docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]  

主要支持的选项包括:
(1) -f,–force=false:是否强行终止并删除一个运行中的容器
(2) -l,–link=false:删除容器的连接,但保留容器
(3) -v,–volumes=false:删除容器挂载的数据卷。

默认情况下, docker rm 命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。
如果要直接删除一个运行中的容器,可以添加 -f 参数。 在强制删除时,Docker会先发送 SIGKILL信号给容器,终止其中的应用,之后强行删除。

容器操作

docker logs

要获取容器的输出信息,可以通过 docker 该命令支持的选项包括:
(1) -details: 打印详细信息
(2) -f, -follow:持续保持输出
(3) -since string:输出从某个时间开始的日志
(4) -tail string:输出最近的若干日志
(5) -t, -timestamps:显示时间戳信息
(6) -until string: 输出某个时间之前的日志。
如需持续保持容器输出,可以使用如下命令:

$ docker logs -f ce554267d7a4  
hello world

进入容器

在使用-d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。这个时候如果需要进入容器进行操作,推荐使用官方的 attach 命令(不推荐使用) 或 exec 命令(推荐使用)。

1、attach命令

attach是 Docker 自带的命令,命令格式如下:

docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] 
CONTAINER

这个命令支持三个主要选项:
(1) --detach-keys [=[]]: 指定退出 attach 模式的快捷键序列,默认是 CTRL + p,CTRL + q
(2) --no-stdin=true|false: 是否关闭标准输入,默认是保持打开
(3) --sig-proxy=true|false: 是否代理收到的系统信号给应用进程,默认为 true

然而使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

2、exec命令

从 Docker 的 1.3.0 版本起, Docker 提供了一个更加方便的工具 exec 命令,可以在运行中容器内直接执行任意命令。该命令的基本格式为:

docker [container] exec [-d|--detach] [ detach-keys[=[]]] [-i|--interactive] [--piivileged] [-t|--tty] [u|--user[=USER]] CONTAINER COMMAND [ARG...]

比较重要的参数有:
(1) -d, --detach: 在容器中后台执行命令
(2) -e, --env=[]:指定环境变量列表
(3) -i, --interactive=true | false:打开标准输入接受用户输入命令, 默认值为false
(4) -t, --tty=true|false: 分配伪终端,默认值为 false
(5) -u, --user=“”:执行命令的用户名或 ID

示例如下:

$ docker exec -it 243c32535da7 /bin/bash 
root@243c32535da7:/#

上述命令可以进入到容器中,并启动一个 bash。这样,就可在不影响容器内其他应用的前提下,用户与容器进行交互。

导入和导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用 Docker 的导人和导出功能。

1、导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。可以使用 docker [container] export命令,该命令格式如下:

docker [container] export [-o|--output [=""]] CONTAINER

其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现。
之后,可将导出的 tar 文件传输到其他机器上,然后再通过导入命令导入到系统中,实现容器的迁移。

2、导入容器

导出的文件又可以使用 docker [container] import命令导入变成镜像,该命令格式如下:

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY [:TAG]]

用户可以通过 -c,–change=[]选项在导入的同时执行对容器进行修改的 Dockerfile 指令。
除了使用 docker [container] import导入容器快照文件到本地镜像库,还可以通过 docker load 命令来导入一个镜像文件到本地镜像库。这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。 此外,从容器快照文件导入时可以重新指定标签等元数据信息。

查看容器

1、查看容器详情

查看容器详情可以使用 docker container inspect,命令格式如下:

docker container inspect [OPTIONS] CONTAINER [CONTAINER ...]
2、查看容器内进程

查看容器内进程可以使用 docker [container] top,命令格式如下:

docker [container] top [OPTIONS] CONTAINER [CONTAINER...]

这个命令类似于 Linux 系统中的 top 命令,会打印出容器内的进程信息,包括 PID、 用户、时间、命令等 。

3、查看统计信息

查看统计信息可以使用 docker [container] stats 显示 CPU、内存、存储、网络等使用情况的统计信息,命令格式如下:

docker [container] stats [OPTIONS] [CONTAINER ...]

支持选项包括:
(1) -a, -all:输出所有容器统计信息,默认仅在运行中
(2) -format string:格式化输出信息
(3) -no-stream:不持续输出,默认会自动更新持续实时结果
(4) -no-trunc:不截断输出信息

其他容器命令

1、复制文件

Docker支持在容器和主机之间复制文件,对应的命令是 docker container cp命令,该命令的格式如下:

docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-  

如将本地的路径 data 复制到 test 容器的/tmp 路径下的命令是:

docker [container] cp data test:/tmp/

反之,将 test 容器的/tmp 路径复制到本地的路径 /data的命令是:

docker [container] cp test:/tmp/ /data  
3、查看端口映射

Docker支持查看端口映射,对应的命令是 docker container port 命令。该命令格式如下:

docker container port CONTAINER [PRIVATE_PORT[/PROTO]]  

如需要查看 test 容器的端口映射情况,可以使用如下的命令:

$ docker container port test  
9000/tcp - > 0.0.0.0:9000
4、更新配置

Docker支持更新容器的一些运行时配置,对应的命令是 docker container update 命令。该命令格式如下:

docker [container] update [OPTIONS] CONTAINER [CONTAINER ...]

由于支持的命令比较多,这里仅列举几个常用的参数:
(1) -c, -cpu-shares int: 限制CPU使用份额
(2) -cpus decimal:限制CPU个数
(3) -cpuset-cpus string:允许使用的 CPU核,如 0-3,0,1
(4) -cpuset-mems string:允许使用的内存块,如 0-3,0,1
(5) -kernel-memory bytes:限制使用的内核内存
(6) -m,-memory bytes:限制使用的内存
(7) -memory-reservation bytes:内存软限制

docker镜像操作命令

Docker通过一种打包和分发的软件,完成传统容器的封装。这个用来充当容器分发角色的组件被称为镜像。Docker镜像是一个容器中运行程序的所有文件的捆绑快照。当使用Docker分发软件,其实就是分发这些镜像,并在接收的机器上创建容器。镜像在Docker生态系统中是可交付的基本单位。
Docker提供了一组简化分发镜像的基础设置组件。这些组件包括注册服务器和索引服务器。Docker运行容器前,需要本地存在对应的镜像,如果镜像不存在,Docker会尝试先从默认镜像仓库下载,用户也可以通过配置,使用自定义的镜像仓库。

获取镜像

镜像是运行容器的前提。可以使用docker pull命令从镜像仓库下载或者使用docker load加载本地镜像。接下来将分别介绍这两种方式。
方式一:将镜像推送到镜像仓库,然后在需要的时候,从镜像仓库拉取镜像到本地,然后启动接口。从镜像仓库拉取镜像的示例代码如下:

$ docker pull [REGISTRYHOST/][USERNAME/]NAME][:TAG]

其中,NAME是镜像仓库名称(用来区分镜像),TAG是镜像的标签(用来表示版本信息)。通常情况下,描述一个镜像需要包括"名称+标签"信息。如果不显式指定TAG,则默认会选择lastest标签,这会下载仓库中最新版本的镜像。示例如下:

$ docker pull ubuntu:18.04

严格地讲,镜像的仓库名称中还应该添加仓库地址(即registry,镜像仓库注册服务器)作为前缀,只是默认使用的是官方DockerHub服务 ,该前缀可以忽略。
如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu:18.04镜像,可以使用如下命令,此时下载的镜像名称 为hub.c.163.com/public/ubuntu:18.04:

$ docker pull hub.c.163.com/public/ubuntu:18.04

方式二:镜像文件已经存在本地,直接将镜像由文件加载到Docker。示例代码如下:

$ docker load -i xxx.filetype

查看镜像信息

这里介绍images、inspect、history等命令查看镜像信息。

1、使用images命令列出镜像

使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基本信息。

$ docker images
REPOSITORY TAG     IMAGE ID      CREATED      SIZE  
ubuntu     18.04   452a96d8lc30  2 weeks ago  79.6MB  
ubuntu     latest  452a96d8lc30  2 weeks ago  79.6MB  

需要说明的是,镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用的存储空间会小于各镜像逻辑体积之和。

2、使用inspect命令查看详细信息

使用docker [image] inspect命令可以获取该镜像的详细信息,包括制作者、 适应架构、各层的数字摘要等。查询示例如下:

$ docker [image) inspect ubuntu:18.04  
[
    {
        "Id": "sha256:452a96d81c30ale426bc250428263ac9ca3f47c9bf086f876dllcb39cf57aeec", 
        "RepoTags": [
            "ubuntu: 18.04",
            "ubuntu:latest"
        ]"RepoDigests": [ "ubuntu@sha256:c8c275751219dadad8fa56b3ac41ca6cb22219ff117ca98fe82b42f24elba64e"],
        "Parent": "",
        "Comment": "",
        "Created" : "2018-04- 2 7T23 : 28:3 6. 3 19694807Z",
        ...
    }
]
3、使用history命令查看镜像历史

既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history命令,该命令将列出各层的创建信息。如查看 ubuntu: 18. 04 镜像的创建过程,可以使用如下命令:

$ docker history ubuntu:18.04
IMAGE          CREATED       CREATED BY                            SIZE     COMMENT 
452a96d8lc30   5 weeks ago   /bin/sh -c #(nop) CMD ["/bin/bash"]   OB       xxx

注意,过长的命令被自动截断了,可以使用–no-trunc选项来输出完整命令。

查找镜像

使用 docker search 命令可以搜索 Docker Hub 官方仓库中的镜像。 语法为:

docker search [option] keyword

删除和清理镜像

1、使用标签删除镜像

使用 docker rmi 或 docker image rm 命令可以删除镜像,命令格式如下:

docker rmi IMAGE [IMAGE ... ]

其中 IMAGE 可以为标签或 ID。
当同一个镜像拥有多个标签的时候,docker rmi 命令只是删除了该镜像多个标签中的指定标签而巳,并不影响镜像文件。相当于只是删除了镜像的一个标签副本而已。但当镜像只剩下一个标签时,再使用 docker rm命令会彻底删除镜像。

2、使用镜像ID来删除镜像

当使用 docker rmi 命令, 并且后面跟上镜像的 ID (也可以是能进行区分的部分 ID 串前缀)时, 会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,Docker会提示有容器正在运行,无法删除。如果要想强行删除镜像,可以使用-f参数。注意,通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。

3、清理镜像

使用Docker一段时间后, 系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。命令如下:

docker image prune -f

创建镜像

构建Docker镜像主要有以下三方法:(1) 使用docker commit创建新镜像;(2)使用docker import 导入本地模板;(3) 使用docker build 命令和Dockerfile文件。

1、使用docker commit创建新镜像

可以使用docker commit命令从被修改的容器上创建新镜像。docker commit的本质是向版本控制系统里提交变更。命令格式如下:

docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

当使用docker commit 命令时,就向镜像提交了一个新的文件层。但这并不是只有文件系统快照被提交。每一层都包含描述执行上下文的元数据。其中包括一些容器启动时设置的参数,下面罗列的内容会被记录进新镜像:
(1) 所有的环境变量;
(2) 工作目录;
(3) 开放端口集合;
(4) 所有的卷定义;
(5) 容器入口点;
(6) 命令和参数;
如果这些值没有被明确地指定,那么这些值会从原始镜像继承。
可以使用docker inspect命令来查看新创建的镜像的详细信息。

2、使用docker import 导入本地模板

也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import命令。 命令格式如下:

docker [image] import [OPTIONS] file|URL|-[REPOSITORY[:TAG]]
3、使用docker build 命令和Dockerfile文件

并不推荐使用docker commit的方法来构建镜像,相反,推荐使用被称为Dockerfile的定义文件和docker build命令来构建镜像。Dockerfile使用基本的基于DSL语法的指令来构建一个Docker镜像,之后使用docker build命令基于该Dockerfile中指令构建一个新的镜像。
将保存Dockerfile文件的目录称为"构建环境"。Docker会在构建镜像中将构建上下文和该上下文中的文件和目录上传到Docker守护进程。这样,Docker守护进程就能直接访问想在镜像中存储的任何代码、文件或者其他数据。

存出和载入镜像

用户可以使用 docker [image] save和docker [image] load命令来存出和载人镜像。

1、存出镜像

如果要导出镜像到本地文件,可以使用 docker [image] save命令。 该命令支持 -o -output string等参数,导出镜像到指定的文件中。示例如下:

$ docker save -o ubuntu_18.04.tar ubuntu:18.04
2、载入镜像

可以使用 docker [image] load将导出的镜像压缩文件再导人到本地镜像库。支持 -i、-input string 参数,从指定文件中读人镜像内容。示例如下:

$ docker load -i ubuntu_18.04.tar

上传镜像

可以使用 docker [image] push命令上传镜像到仓库,默认上传到 DockerHub 官方仓库(需要登录)。命令格式如下:

$ docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]  

参考

https://blog.csdn.net/chenmozhe22/article/details/113850238 Docker/Podman使用入门—基础命令篇
https://www.runoob.com/docker/docker-command-manual.html Docker 命令大全
https://haicoder.net/docker/docker-command.html Docker命令
https://www.lvbibir.cn/posts/tech/docker-commands/ docker | 常见命令
https://docs.docker.com/engine/reference/commandline/cli/ Use the Docker command line
https://github.com/wsargent/docker-cheat-sheet docker-cheat-sheet
https://docs.docker.com/reference/cli/docker/ docker (base command)
https://juejin.cn/post/7338717224435531826 docker init
https://zhuanlan.zhihu.com/p/644429693 一文带你了解 Docker 容器生命周期
https://www.devopsschool.com/blog/lifecycle-of-docker-containers/ Lifecycle of Docker Containers
https://blog.csdn.net/succing/article/details/122393565 Docker容器生命周期

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于openKylin与RISC-V的MindSpore AI项目实践

项目目标: 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型,并在RISC-V平台上进行训练和推理。根据RISC-V的特性,对MindSpore框架进行必要的优化。 目录 项目目标: 训练模型 编写训练代码,设…

Mysql之存储过程与函数

Mysql之存储过程与函数 存储过程概述分类创建存储过程一般的语法格式完整的语法格式案例一案例二 调用存储过程调用语法格式 创建存储函数存储过程与函数的查看,修改和删除 存储过程概述 官网解释是:存储过程的英文是 Stored Procedure 。它的思想很简单…

微信小程序开发:循环定时删除阿里云oss上传的文件

上文有说到我们开发了定时删除阿里云oss的功能,但是一次只能删除10条。 本文我们做到一次删除全部过期的文件。 实现:使用while循环,在循环里获取是否还有已过期的,没有就break掉,有就走删除逻辑。 开始代码部分&am…

鸿蒙系统适配的流程

鸿蒙系统适配的流程通常涉及以下关键步骤,以下是鸿蒙系统适配的一般流程,具体流程可能会根据项目的具体需求和开发团队的情况进行调整和优化。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 准备工作&#…

常见限流算法及其实现

一、背景 在分布式系统中,随着业务量的增长,如何保护核心资源、防止系统过载、保证系统的稳定性成为了一个重要的问题。限流算法作为一种有效的流量控制手段,被广泛应用于各类系统中。本文将详细介绍四种常见的限流算法、两种常用的限流器工…

贝叶斯优化双向门控循环单元BO-BIGRU时序预测的matlab实现【源代码】

贝叶斯优化双向门控循环单元简介: 贝叶斯优化双向门控循环单元(BO-BIGRU)是一种结合了贝叶斯优化和双向门控循环单元(BIGRU)的神经网络模型。BIGRU是一种改进的循环神经网络(RNN),它…

ArcGIS学习(十三)多源数据下的城市街道功能评估

ArcGIS学习(十三)多源数据下的城市街道功能评估 本任务带来的内容是多元数据下的城市街道功能评估。本任务包括两个关卡: 城市街道空间中观解读 城市街道功能详细评价 首先,我们来看看本任务的分析思路。 1.城市街道空间中观解读 下面我们正式进入第一关的内容一- 城市…

学习Python类型和对象,看这篇文章足矣!

类型与对象 一点基础理论: 对象代表现实世界中像轿车、狗、自行车这些事物。对象具有数据和行为两个主要特征。 在面向对象编程中,我们把数据当作属性,把行为当作方法。即: 数据 → 属性 和 行为 → 方法 类型是创造单个对象实例的蓝本。…

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程 文章目录 Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程5 生命周期5.1 Vue生命周期钩子5.2 在creat…

面向对象高级编程上

面向对象高级编程 一、面向对象高级编程上(1)C代码基本形式(2)Header中的防卫式声明(3)不带指针类的实现过程1. 防卫式声明2. 访问级别3.构造函数4.重载4.1 成员函数(有this)4.2 非成…

Igraph入门指南 1

Igraph入门指南 一、图的结构 图是顶点和边的集合,而边是通过顶点来描述。顶点和边,要用集合的理念去操作。 1、igraph中与图结构相关的函数 .igraph(), add_edges(), add_vertices(), complementer(),compose(), connect(), contract(), delete_ed…

自我对比: 通过不一致的解决视角更好地进行反思

一、写作动机: LLM 在自我评价时往往过于自信或随意性较大,提供的反馈固执或不一致,从而导致反思效果不佳。为了解决这个问题,作者提倡 "自我对比": 它可以根据要求探索不同的解决角度,对比差异…

并发编程并发安全性之Lock锁及原理分析

ReentrantLock 用途:锁是用来解决线程安全问题的 重入锁-> 互斥锁 满足线程的互斥性意味着同一个时刻,只允许一个线程进入到加锁的代码中。多线程环境下,满足线程的顺序访问 锁的设计猜想 一定会涉及到锁的抢占,需要有一个标记来实现互…

论文学习—Model-based Adversarial Meta-Reinforcement Learning

Model-based Adversarial Meta-Reinforcement Learning Abstract1. Introduction2. Related work3 Preliminaries基于模型的强化学习(MBRL):区别和联系: 4 Model-based Adversarial Meta-Reinforcement Learning4.1 Formulation 4.2 Computin…

java实现文件上传到本地

很多时候我们都需要进行文件上传和下载的操作,具体怎么实现网上的代码其实也是挺多的,刚好我的项目中也遇到了文件上传和下载的需求,本篇博文具体讲解上传操作,下篇博文讲解下载操作。 我们具体来想一想要将一个从前端传来的文件…

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

在模块化原理图时,PCB也需要做一个模块.mdd文件。这时需要先画好图纸然后再制作模块化文件。 修改文件时会发现模块化器件报错,无法编辑模块内部器件和走线,器件和走线都被LOCKED,如下所示报错内容: Symbol "U1" Selected Cannot edit Symbol "U1". M…

磁性机器人在医学领域取得进展

磁性医疗机器人利用磁场梯度来控制设备的运动,并最终以高精度进入体内的目标组织。这些磁性机器人可以采用导管和微型或纳米机器人的形式,并由磁导航系统操纵。磁性机器人最近取得了一些进展,为临床诊断和治疗用途开辟了新的可能性。在本期的…

数据结构与算法:堆排序和TOP-K问题

朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsor…

2024.3.5

作业1、使用select实现tcp服务器端&#xff0c;poll实现tcp客户端 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.131" //服务端IP #define SER_PORT 8888 //服务端端口号int main(int argc, const char *argv[])…

星瑞格数据库管理系统

一. 产品介绍 随着信息化的到来&#xff0c;数据安全成为保障信息化建设的一个关键问题&#xff1b;数据库作为信息化系统的基础软件其自身安全以及对数据的保障是至关重要。现阶段国内重要部门的信息系统存放着大量敏感数据&#xff0c;为了保障其数据的安全性&#xff0c;使用…