docker入门和docker应用场景,镜像制作,服务编排,docker私服

news2025/2/28 0:28:39

一、简介

  • docker解决了什么问题
  • docker和虚拟机的区别
  • 在CentOS7里安装docker

 

1. docker简介

我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出现软件跨环境迁移的问题(也就是“水土”不服

针对这种问题如何解决?我们可以将工程及此工程依赖的所有软件打包到一个容器中统一部署  

1 什么是docker

docker是什么?主要的应用场景是什么?解决了哪些问题?和虚拟机有什么区别?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

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

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

 

2 docker和虚拟机对比

本质的区别

docker和虚拟机在某些应用场景比较像,但是docker不是虚拟机

docker是一种虚拟化容器技术,他和虚拟机最根本的区别是:

docker容器和宿主机共用linux操作系统内核不会在宿主机上再次安装操作系统

docker容器运行状态下的本质是宿主机上的进程,通过namespace资源隔离cgroups资源限制,使它看上去像是一个独立的虚拟机.

 容器

容器是应用层一个抽象,它将代码和依赖关系打包在一起。

多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为独立的进程用户空间运行。

容器比虚拟机占用的空间更小(容器镜像的大小一般为几十MB),可以处理更多的应用,对虚拟机和操作系统的要求也更低。

虚拟机

虚拟机(VM)物理硬件的抽象,将台服务器变成多台服务器

管理程序允许多个虚拟机在一台机器上运行。每个虚拟机都包括一个操作系统、应用程序、必要的二进制文件和库的完整副本--占用几十GB的空间。

虚拟机的启动速度也会很慢

使用的区别

 

2. 安装docker

1 docker相关概念

镜像image

Docker 镜像(Image),就相当于是一个文件系统,是用于创建 Docker 容器的模板。也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新

容器container

容器是独立运行一个或一组应用,是镜像运行时的实体。

                                        (相当于是精简版的虚拟机,其中安装好了软件

注册中心(仓库)registry

Docker 仓库用来保存镜像,有点类似于Maven的远程仓库。Registry 分为公共和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号分享并保存自己的镜像(说明:在 Docker Hub 下载镜像巨慢,可以自己构建私有的 Registry)。

 

2 安装docker

Docker 官方建议在 Ubuntu 中安装,因为 Docker 是基于 Ubuntu 发布的。

由于我们学习的环境都使用的是 CentOS,因此这里我们将 Docker 安装到 CentOS 上。

注意:这里建议安装在 CentOS7.x 以上的版本,在 CentOS6.x 的版本中,安装前需要安装其他很多的环境而且 Docker 很多补丁不支持更新。

1)安装docker

在安装docker之前,可以先做如下准备工作:

#1. 关闭防火墙,并禁止防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld

#2. 关闭MySQL,并禁止MySQL开机自启(你的CentOS里之前安装过MySql,为防止端口冲突,需要做这一步)
systemctl stop mysqld
systemctl disable mysqld

启动CentOS7后,使用SecureCRT连接上CentOS7,然后依次执行命令(要联网):

# 更新系统,如果需要确认,全部选 y (yes)。根据网络状况,此操作可能要花几分钟或者十几分钟时间
yum update

# 安装yum-utils工具和两个驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置使用阿里云的yum源,稍后会从阿里云下载docker软件
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker
yum install docker-ce

# 查看docker版本
docker -v

2 )设置注册中心(仓库)

如果不设置注册中心,将从默认的docker hub里下载镜像速度非常慢

USTC(中科大的镜像服务)老牌的Linux镜像服务提供者注册中心Registry),从Ubuntu5.04版本就在使用。USTC的docker镜像速度加载很快,它的优势之一是不需要注册,是真正的公共服务

设置步骤:

  1. 创建文件夹mkdir /etc/docker

  2. 编辑文件daemon.jsonvi /etc/docker/daemon.json

                   vim /etc/docker/daemon.json

        按字母i进入编辑模式,复制以下内容,在finalShell里右键,粘贴到文件里

{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
  1. 保存并退出vi:按ESC,输:wq 回车

    然后查看配置的是否正确:cat /etc/docker/daemon.json

  2. 重新加载daemon文件,然后重启docker服务:

systemctl daemon-reload
systemctl restart docker

     3.查看docker信息:docker info,如果能看到以下信息,就说明配置成功了                 

3. 小结****

 

docker是什么?解决了哪些问题?主要的应用场景是什么?和虚拟机有什么区别?

Docker是一个开源的容器引擎,它轻巧,且易移植

“build once, configure once and run anywhere”。使用go语言开发,并遵从apache2.0协议。

传统软件行业中存在的问题

  • 开发、生产、测试环境不一致,开发环境下可用的服务挪到生产上不可用。
  • 不同环境之间迁移成本太高,没有统一的软件部署封装标准及封装环境。
  • 对于分布式软件持续集成(测试、打包、发布、部署、管理)周期很长,难以自动化、工程化。
  • 面临瞬时用户流量增大的场景,很难实现分布式应用服务实例的快速部署。

docker应用场景

  • docker镜像一旦构建,就已经一次性完成了应用自动打包、集成。docker镜像可以进行版本管理、复制、分享、修改,就像管理代码一样。
  • 通过统一的docker环境封装(比如镜像中封装同一版本的JDK同样的环境变量等等),保证应用服务运行环境的一致性。避免出现在测试环境上好用,挪到生产环境下运行失败的问题
  • docker可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 因为镜像可下载、可复用,docker容器可快速启动等特性,结合容器编排服务(k8s)可以实现大型分布式部署弹性伸缩,快速扩展

 

本质的区别

docker和虚拟机在某些应用场景比较像,但是docker不是虚拟机

docker是一种虚拟化容器技术,他和虚拟机最根本的区别是:

docker容器和宿主机共用linux操作系统内核不会在宿主机上再次安装操作系统

docker容器运行状态下的本质是宿主机上的进程,通过namespace资源隔离cgroups资源限制,使它看上去像是一个独立的虚拟机.

 容器

容器是应用层一个抽象,它将代码和依赖关系打包在一起。

多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为独立的进程用户空间运行。

容器比虚拟机占用的空间更小(容器镜像的大小一般为几十MB),可以处理更多的应用,对虚拟机和操作系统的要求也更低。

虚拟机

虚拟机(VM)物理硬件的抽象,将台服务器变成多台服务器

管理程序允许多个虚拟机在一台机器上运行。每个虚拟机都包括一个操作系统、应用程序、必要的二进制文件和库的完整副本--占用几十GB的空间。

虚拟机的启动速度也会很慢

二、常用命令【重点】

  • 能够启动和关闭docker
  • 能够管理docker镜像
  • 能够管理docker容器

 

1. 服务管理

# 启动docker服务
systemctl start docker

# 查看docker运行状态
systemctl status docker

# 重启docker服务
systemctl restart docker

# 关闭docker服务
systemctl stop docker

# 设置docker开机自启动
systemctl enable docker

2. 镜像管理

2.1 语法说明

  • 拉取镜像:docker pull 镜像名称:tag, 从docker hub拉取镜像包

    从注册中心docker hub把镜像拉取到本地。拉取下来的镜像,在/var/lib/docker目录下存储

    tag:标签名称,相当于版本号。如果不知道版本号,可以从Docker里查询

  • 查看镜像:docker images,查看服务器里的所有镜像

  • 删除镜像:docker rmi 镜像ID 或者 docker rmi 镜像名称:tag

2.2 使用练习

  1. 拉取CentOS7镜像,查看镜像列表(从Docker里搜索CentOS镜像,找到CentOS7)

  2. 拉取nginx镜像,查看镜像列表(从Docker里搜索nginx镜像,找到nginx1.14.2)

3. 容器管理

3.1 容器介绍

容器是独立运行的一个或一组应用,是镜像运行时的实体。(相当于是精简版的虚拟机,其中安装好了软件)

容器的状态有:

  • 运行状态:容器正在运行,可以直接使用。

  • 暂停状态:容器进程暂停,CPU不再处理容器,但并不释放容器的内存

  • 停止状态:容器进程终止,CPU不再处理容器,并释放容器占用的内存

其中操作容器相关的命令有:

  • docker run:创建并运行容器

  • docker pause:暂停容器

  • docker unpause:让容器从暂存中恢复运行

  • docker stop:关闭停止容器

  • docker start:启动容器

  • docker rm:删除容器

3.2 语法说明

  • 创建容器:docker run -di --name=容器名称 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 镜像名称:标签

    命令介绍:根据镜像创建容器并启动运行容器

    参数介绍:

    • d:创建出来的容器在后台运行

    • i:开启STDIN交互(让容器处理活动状态)

    • name:用于设置容器名称

    • p:用于设置 宿主机端口 与 容器端口的映射

    • v:用于设置 宿主机数据卷(或文件夹) 与 容器文件夹的映射

  • 查看容器:

    • docker ps -a:查看所有容器

    • docker ps:查看运行状态的容器

  • 进入容器:

    • 进入容器内部:docker exec -it

    • 退出容器(回到宿主机):exit (在容器内执行,是退出容器回到宿主机)

  • 关闭容器:docker stop 容器id或名称

  • 启动容器:docker start 容器id或名称

  • 删除容器:docker rm 容器id或名称

3.3 练习:创建CentOS容器

要求:

  • 创建CentOS7容器并启动

  • 查看所有正在运行的容器

3.4 端口映射

宿主机和容器的关系:

  • docker所在的主机,称为宿主机;docker里还有容器

为什么要做端口映射:

  • 每个容器都相当于一个独立的服务器,服务器之间是一个小型局域网,外界的客户端不能访问某一个容器

  • 所以要做一个端口映射:宿主机的一个端口号---容器里的一个端口号。两个端口建议相同

  • 这样:客户端就能通过“宿主机:端口”,访问到映射的容器端口

3.5 练习:创建Redis容器

要求:

  • 创建redis容器并启动,暴露端口6379

  • 查看所有正常运行的容器

  • 然后用RDM工具访问redis

3.6 练习:创建MySQL容器

要求:

  • 创建MySql容器并启动,暴露端口3306

  • 查看所有正在运行的容器

  • 然后使用Navicat或其它工具连接MySQL

# 拉取镜像
docker pull mysql:5.7

# 创建容器
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8

3.7 数据卷

介绍

之前我们创建的所有容器,并不涉及其中文件的修改。但是如果要创建一个nginx容器,或者tomcat容器,如何把项目传输到容器内部呢?docker提供了数据卷的功能,用于实现宿主机目录与容器目录的映射,这样我们在宿主机目录里的一切操作,都会作用到容器目录里了。

常用命令

操作数据卷的命令

创建数据卷:docker volume create 数据卷名称

列出数据卷:docker volume ls

查看数据卷:docker volumn inspect 数据卷名称

删除数据卷:docker volumn rm 数据卷名称

给容器挂载数据卷

在创建容器时,可以通过-v参数,将数据卷挂载给容器内的某个目录:

  • docker run -id --name=容器名称 -v 数据卷名称:容器内目录 -p 宿主机端口:容器端口 镜像名称:tag

使用示例

3.8 练习:创建nginx容器

 

4. 小结

四、镜像制作【了解】

1. 镜像原理

1. 镜像原理

操作系统的组成

镜像原理

制作镜像的方式

  • 使用一个已有容器,生成镜像,保存成文件:备份与恢复

  • 基于一个基础镜像,构造一个新的镜像:Dockerfile

2. 备份与恢复

2.1 把容器保存成镜像

  • 命令:docker commit 容器名称 自定义一个镜像名称

  • 示例:docker commit redis myredisimage

2.2 镜像备份

  • 命令:docker save -o 文件名称 镜像名称

  • 参数:

    • o:output,表示要输出到文件

  • 说明:

    • 文件名称,通常是xxx.tar打包文件

  • 示例:docker save -o myredisimage.tar myredisimage

2.3 镜像恢复

  • 命令:docker load -i xxx.tar

  • 参数:

    • i:input,表示要从文件读取

  • 示例:

    • 我们先将原有镜像删除掉:docker rmi myredisimage:latest

    • xxx.tar恢复镜像:docker load -i myredisimage.tar

3. Dockerfile

3.1 Dockerfile介绍

前边讲的commit方式,是从一个已有容器生成一个镜像。而Dockerfile是另外一种构建镜像的方式,它是以一种基础镜像为基础,编写一系列的docker指令,每条指令构建一层镜像,通过这些指令一层层构建出一个目标镜像出来。

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

  • 对于运维人员:在部署时,可以实现应用的无缝移

Dockerfile的基本指令有十三个,分别是:

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

从前面的内容可以看出,要构建一个容器,需要做很多的工作,设置很多的配置,如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。 这个脚本就是 Dockerfile。

3.2 Dockerfile示例

需求

定义dockerfile,发布springboot项目

分析

  1. SpringBoot项目可以独立运行,不需要Tomcat;但是需要有jdk

    所以:我们这个容器,要提供基础的jdk环境,基于jdk环境构造一个新容器

    使用:FROM java:8

  2. 要把SpringBoot项目添加到这个容器里

    使用:ADD demo.jar /demo.jar

  3. 当启动容器时,要同时启动运行这个SpringBoot项目

    所以:启动容器时,要执行Java命令,运行SpringBoot项目

实现

1. 把SpringBoot项目上传到宿主机

在宿主机里创建一个文件夹~/dockerfiles,把SpringBoot工程打包为demo.jar,然后上传到CentOS的~/dockerfiles

2. 创建Dockerfile

~/dockerfiles文件夹里创建文件Dockerfile,内容如下:

#1.定义父镜像:
FROM java:8
#2.定义作者信息:
MAINTAINER  itheima <itheima@itcast.cn>
#3.将jar包添加到容器: 
ADD demo.jar /demo.jar
#4.定义容器启动执行的命令: 当通过此镜像启动容器的时候,执行的命令
CMD java -jar /demo.jar

3. 通过Dockerfile构建镜像

# 切换到dockerfile文件所在的路径
cd ~/dockerfiles

# 构建镜像
docker build -f ./Dockerfile -t demo:1 ./

4. 启动容器

#创建启动容器
docker run -id --name=自定义名称 -p 端口  镜像名称

docker run -id --name=demo -p 81:80 demo:1

#打开浏览器,输入地址  http://宿主机ip:81/hello  ,可以访问到SpringBoot项目

五、服务编排

1. 服务编排介绍

服务编排或容器编排:按照一定的业务规则批量管理容器

Docker compose是一个用于定义和运行多个Docker容器的编排工具。可以一条命令启动多个容器。主要是解决了容器与容器之间如何管理编排的问题。

使用Docker compose 有三个步骤:

  1. 利用Dockerfile定义运行环境(如果已有镜像,可省略这一步)

  2. 使用docker-compose.yml定义组成应用的各服务

  3. 运行docker-compose up -d启动应用

2. 安装docker compose

# 下载docker compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 设置权限
chmod +x /usr/local/bin/docker-compose

# 查看版本 
docker-compose -version

如果要卸载docker-compose,可执行如下命令:

# docker compose是二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

3. 服务编排示例

要求:通过docker-compose 批量创建三个容器(nginx,tomcat,redis)

  1. 创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

编写docker-compose.yaml文件

version: "3.0"
services:
  redis:
    container_name: redis 
    image: redis:5.0
    ports:
      - 6379:6379
  nginx:
    container_name: nginx
    image: nginx
    ports:
      - 80:80
    volumes:
      - /root/volumes/nginx/html:/usr/share/nginx/html
  tomcat:
    container_name: tomcat
    image: tomcat:8.5
    ports:
      - 8080:8080
    volumes:
      - /root/volumes/tomcat/webapps:/usr/local/tomcat/webapps

启动。

# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
cd ~/docker-compose

# docker-compose up -d 以守护进程方式创建并启动容器
docker-compose up -d

 

4. 常用命令 【掌握】

# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
# !!!注意:如果还没有创建过容器时,执行这个命令可以创建并启动。如果容器已存在,就不要用这个命令了!!!
docker-compose up -d

# !!!注意:如果容器已经创建过了,就执行这个命令,直接启动即可。不要再用 up -d 的那个命令了!!!
docker-compose start # 启动容器

# 了解其它命令:
docker-compose help # 查看帮助
docker-compose stop  # 停止容器
docker-compose start # 启动容器
docker-compose restart # 重启容器
docker-compose rm # 删除已停止的容器
docker-compose down # 停止并删除容器

5. 小结

六、docker私服【拓展了解】

我们知道docker镜像可以托管到Docker Hub中,跟代码库托管到github是一个道理。但如果我们不想把docker镜像公开放到Docker Hub中,只想在部门或团队内部共享docker镜像,能不能项gitlab一样在搭建私有的仓库呢?答案是肯定的,docker也支持将镜像存到私有仓库。  

1. 搭建私服

1 拉取私服镜像

# 拉取私服镜像
docker pull registry
# 启动运行私服
docker run -id --name=registry -p 5000:5000 registry

2 设置私服容器

设置私有仓库为可信任,用vim编辑文件 /etc/docker/daemon.json

"insecure-registries":["私有仓库的ip:端口"]

  • 重启docker:systemctl restart docker

  • 打开浏览器,通过网址:http://192.168.247.140:5000/v2/_catalog来验证是否启动成功

 

 

2. 上传镜像到私服

1. 给镜像打标记成为私有仓库镜像

  • 语法:docker tag 镜像名称 私有仓库ip地址:5000/镜像名称

  • 示例:docker tag redis:5.0 192.168.247.140:5000/redis:5.0

2. 上传到私有仓库

  • 语法:docker push 私有仓库ip地址:5000/镜像名称

  • 示例:docker push 192.168.247.140:5000/redis:5.0

  • 上传后,可以浏览器上看到

 

3. 从私服拉取镜像

  • 语法:docker pull 私有仓库ip地址:5000/镜像名称

  • 示例:docker pull 192.168.247.140:5000/redis:5.0

如何使用..提供的虚拟机

 

做的事情:

  • 把虚拟机打包成一个压缩包《centos_docker.rar》

  • 和资料视频一起发给大家

大家做的事情:

  • 把压缩包《centos_docker.rar》解压到一个不含中文、空格、特殊字符的目录里

  • 使用VMWare,File->Open,选择解压目录里的 centos_docker.vmx 文件

  • 可以在VMWare里启动这个虚拟机了

    如果有弹窗,选择“我移动了此虚拟机”

  • 可以使用crt连接这个虚拟机,可以在虚拟机里操作docker了

 七、docker应用场景

  • docker镜像一旦构建,就已经一次性完成了应用自动打包、集成。docker镜像可以进行版本管理、复制、分享、修改,就像管理代码一样。
  • 通过统一的docker环境封装(比如镜像中封装同一版本的JDK同样的环境变量等等),保证应用服务运行环境的一致性。避免出现在测试环境上好用,挪到生产环境下运行失败的问题
  • docker可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
  • 因为镜像可下载、可复用,docker容器可快速启动等特性,结合容器编排服务(k8s)可以实现大型分布式部署弹性伸缩,快速扩展

docker与虚拟机的区别:

docker和虚拟机在某些应用场景下比较像,但是docker不是虚拟机。

 

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

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

相关文章

黏包和半包

黏包和半包 黏包&#xff1a; Slf4j public class HelloWorldServer {public static void main(String[] args) {NioEventLoopGroup boss new NioEventLoopGroup();NioEventLoopGroup worker new NioEventLoopGroup();try {ServerBootstrap serverBootstrap new ServerBoo…

open3d教程(二):可视化三维模型,并转换成点云(Python版本)

1、三维模型获取 可以自己用建模软件建立一个模型从free3d免费下载 2、关键函数 open3d.visualization.draw_geometries 参数&#xff1a; geometry_list(List[open3d.geometry.Geometry])&#xff1a;要可视化的几何体列表.window_name(str, optional, defaultOpen3D)&…

Linux环境下编程遇到“fatal error:stdio.h:没有那个文件或目录”错误解决办法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下linux环境下如何解决一个常见的问题&#xff0c;也就是“fatal error:stdio.h:没有那个文件或目录”错误。 不少初学者在linux环境下用gcc编译C语言时&#xff0c;经常会遇到这个问题。 比如当…

工具推荐二

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; GUI框架 我是个后端程序员&#xff0c;使用GUI框架的机会很少&#xff0c;主要用来编写个人或工作中的一些小工具上&#xff0c;经验有限&#xff0c;仅供参考。 Tk框架这个框架tcl语言自带&#xff0c;在python…

海报图片生成服务在狐友的落地实践

本文字数&#xff1a;22817字 预计阅读时间&#xff1a;58分钟 项目背景 狐友作为搜狐的一款社交产品&#xff0c;在流量传播上有着旺盛的需求点。而在流量传播所需的众多载体之中&#xff0c;海报图片以其简单的分享形式、可定制的视觉体验、自带二维码识别导流等特点&#xf…

入门与 Follow GPT 的路径分析:LLM 道阻且长,行则将至

动手点关注 干货不迷路 本文只用于技术交流&#xff0c;仅代表作者个人观点。 作为 CEO&#xff0c;Sam 将 OpenAI 的内部氛围组织的很好&#xff0c;有位 OpenAI 的前员工告诉拾象团队&#xff0c;当 2018 年 GPT-2 的论文被驳回时&#xff0c;Sam 在团队周会上将拒信的内容朗…

ONES X 高测股份|用数字化,重构新材料企业的研发管理体系

近日&#xff0c;ONES 签约高硬材料切割的领军企业——高测股份&#xff0c;助力高测股份建立有效、规范的研发测试管理体系&#xff0c;实现项目管理、测试管理、知识库管理、工时管理、组织效能管理等端到端的研发管理&#xff0c;提升测试效率和产品交付质量&#xff0c;并进…

用Python+OpenCV+Yolov5+PyTorch开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件&#xff0c;支持图片和视频识别&#xff0c;以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后&#xff0c;首先安装依赖库。项目所用到的依赖库已…

bash shell 基础命令

章节目录&#xff1a; 一、浏览文件系统1.1 Linux 文件系统1.2 遍历目录 二、列出文件和目录三、处理文件3.1 创建文件3.2 复制文件3.3 命令行补全3.4 链接文件3.5 文件重命名3.6 删除文件 四、管理目录4.1 创建目录4.2 删除目录 五、查看文件内容5.1 查看文件类型5.2 查看整个…

【Linux】Linux编辑神器vim的使用

目录 一、Vim的基本概念 二、Vim的基本操作 1、进入vim 2、正常模式切换至插入模式 3、插入模式切换至正常模式 4、正常模式切换至底行模式 5、退出Vim编辑器 三、Vim正常模式命令集 1、移动光标 2、删除文字 3、复制 4、替换 5、撤销 四、Vim底行模式命令集 1、列出行号 2、光…

【Linux】进程信号捕捉

前言 在【Linux】进程信号及信号产生中&#xff0c;我们提到&#xff0c;进程接收到信号&#xff0c;并不是立刻处理&#xff0c;而是在合适的时候才执行相应的动作&#xff0c;那合适的时候是什么时候呢&#xff0c;进程捕捉信号的过程究竟是怎么样的呢&#xff1f;本篇博客就…

Python入门(七)if语句(二)

if语句&#xff08;二&#xff09; 1.if语句1.1 简单的if语句1.2 if-else语句1.3 if-elif-else结构1.4 使用多个elif代码块1.5 使用多个elif代码块 2.使用if语句处理列表2.1 检查特殊元素2.2 确定列表不是空的2.3 使用多个列表 作者&#xff1a;xiou 1.if语句 前面我们理解了…

React Native技术探究:开发高质量的跨平台移动应用的秘诀

作为一个跨平台移动应用开发框架&#xff0c;React Native在开发过程中能够有效提高开发效率、降低开发成本、缩短上线时间&#xff0c;因此备受开发者的欢迎。然而&#xff0c;如何使用React Native开发出高质量的跨平台移动应用呢&#xff1f;本文将探究这个问题&#xff0c;…

(一)PUN 2基本介绍

一、开始 (一)基本简介 1.简介 Photon Unity Networking (PUN) 是一个用于多人游戏的 Unity 包。灵活的配对让您的玩家进入可以通过网络同步对象的房间。 RPC、自定义属性或“低级别”光子事件只是其中的一些功能。快速且&#xff08;可选&#xff09;可靠的通信是通过专用的…

选卡攻略!一分钟教你选择一款好的流量卡!

很多流量卡看似便宜&#xff0c;但用起来套路不少&#xff0c;所以&#xff0c;挑选一款流量卡并不是只看资费&#xff0c;而且要了解它的各个方面&#xff0c;比如&#xff1a;优惠期、合约期等等&#xff0c;今面&#xff0c;小编就带大家一块了解如何选择一款好的流量卡。 …

默认的HuggingFace模型

介绍 在本文中&#xff0c;我将探讨表征学习中常见的一种做法——使用预训练神经网络的冻结状态作为学习特征提取器。 具体而言&#xff0c;我感兴趣的是研究使用这些提取的神经网络特征训练的简单模型的性能与使用迁移学习初始化的微调神经网络的性能的比较。预期受众主要是数…

一款功能强大的多合一聚合支付Discuz插件,可直接替换DiscuzX 3.5自带的支付接口

源码介绍&#xff1a; Discuz论坛多合一聚合支付接口插件&#xff0c;该插件直接替换了自带的支付接口功能&#xff0c; 增强了支付的扩展性&#xff0c;自带支持支付宝、微信、QQ钱包官方支付&#xff0c; 以及彩虹易支付、我爱支付、虎皮椒等支付通道&#xff0c;并且可以…

专家共话:存力一体成“东数西算”全场景利器

从2022年2月17日正式全面启动至今&#xff0c;“东数西算”工程已经度过了一周年。一年多的实践探索证明&#xff0c;激活数据要素&#xff0c;推动算力成为核心生产力&#xff0c;离不开“存力先行”。其中&#xff0c;东西部存力一体化&#xff0c;是支撑“东数西算”全场景应…

「读书感悟系列」友者生存:与人为善的进化力量(我会解释人类善良和暴力的进化原因)...

作者 | gongyouliu 编辑 | gongyouliu ‍ 最近花了不长的时间读完了这本『友者生存&#xff1a;与人为善的进化力量』&#xff0c;由于我对进化生物学非常感兴趣&#xff0c;又有4年的生物学学习背景&#xff0c;读起来还是非常容易的&#xff0c;这本书算是人类进化学的科普读…

tcp cubic 与随机丢包

前面提到过一个 AIMD 的修正方法&#xff0c;“二次机会 MD”&#xff1a;首次丢包只 MD 收缩一个相对较小的比例&#xff0c;再次丢包时再继续收缩&#xff0c;直到 beta * Wmax。 效果如下图&#xff1a; 大意是在检测到丢包时&#xff0c;先 MD 一个相对小的缩放比例&…