Docker 使用下 (二)

文章目录

  • Docker 使用下 (二)
    • 前言
    • 一、初识Docker
      • 1.1 、Docker概述
      • 1.2 、Docker的历史
      • 1.3 、Docker解决了什么问题
      • 1.4 、Docker 的优点
      • 1.5 、Docker的架构图
    • 二、镜像
    • 三、容器
    • 四、数据卷
      • 4.1、数据卷的概念
      • 4.2 、数据卷的作用
      • 4.3 、配置容器数据卷
    • 五、搭建服务
      • 5.1、创建容器步骤
    • 六、DockerFile
      • 6.1 、Docker镜像原理
      • 6.2 、Docker镜像如何制作
        • 6.2.1、容器转为镜像
        • 6.2.2、压缩文件转变为镜像
      • 6.3 Dockerfile概念
      • 6.4 制作dockerfile文件
        • 6.4.1 制作项目jar文件
        • 6.4.2 下载idk8镜像
        • 6.4.3 创建dockerfile文件
        • 6.4.4 编写dockerfile文件
        • 6.4.5 执行生成镜像
        • 6.4.6 把镜像生成为容器
        • 6.4.7 测试
    • 七、Docker服务编排
      • 7.1 服务编排概念
      • 7.2 Docker Compose 概述
      • 7.3 Docker Compose安装和使用
      • 7.4 Docker compose卸载
      • 7.5 使用Docker compose编排项目
        • 7.5.1 创建文件夹
        • 7.5.2 创建docker-compose.yml
        • 7.5.3 编写docker-compose.yml
        • 7.5.4 创建./nginx/conf.d日录
        • 7.5.5 编写nginx的配置文件
        • 7.5.6 使用docker-compose启动容器
        • 7.5.7 测试访问
    • 八、Docker容器虚拟化与传统虚拟机的比较
      • 8.1 什么是虚拟机
      • 8.2 什么是Docker
      • 8.3 区别
      • 8.4 注意区别总结

前言

我们写的代码会接触到好几个环境:开发环境,测试环境以及生产环境,导致代码"水土不服"的问题该怎么解决?开发人员可以把容器(代码+环境)统一发给测试人员,测试人员测试通过后再把容器发给运维人员,从而解决了软件跨环境迁移的所导致的水土不服的问题。

一、初识Docker

1.1 、Docker概述

​ Docker是一个开源的应用容器引擎,基于 Go 语言并从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用 沙箱 机制,相互之间不会有任何接口(类似 ipPhone 的 app),更重要的是容器性能开销极低。

什么是沙箱?沙箱也叫网络编程虚拟执行环境, 英文名sandbox(sandboxie),可以看做是一种容器,里面所做的一切都可以推倒重来。

​ 原理引用官方网站的一段话:电脑就像一张纸,程序的运行与改动,就像将字写在纸上,而Sandboxie就相当于在纸上放了块玻璃,程序的运行与改动就像写在了那块玻璃上,除去玻璃,纸上还是一点改变都没有的,它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可以用来测试不受信任的应用程序或上网行为。

Docker从17.3版本之后,分为CE版(社区版),和EE版(企业版)

1.2 、Docker的历史

Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 创立,其标志如下图所示。

在这里插入图片描述

1.3 、Docker解决了什么问题

  • 解决了环境配置的难题。软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
  • 用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。
  • 如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:“它在我的机器可以跑了”(It works on my machine),言下之意就是,其他机器很可能跑不了。
  • 环境配置如此麻烦,换一台机器,就要重来一次,旷日楚时,很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境-模一样地复制过来。

1.4 、Docker 的优点

​ Docker是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件,借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1.5 、Docker的架构图

在这里插入图片描述

镜像,容器和仓库的关系?

  • 镜像(lmage) :Docker镜像,就相当于是一个root文件系统。镜像相当于java中的一个类,是一个模板,一个镜像可以生成多个容器实例。
  • 容器(Container): 镜像和容器的关系就像是类与对象的关系一样。镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建,启动,停止,删除,暂停等。
  • 仓库(Repository):仓库可以看做是一个代码控制中心,或者Maven中央仓库,用来保存镜像。

二、镜像

相当于还没有安装的app

在这里插入图片描述

REPOSITORY: 表示镜像的仓库源

TAG: 镜像的标签

IMAGE ID: 镜像的ID(唯一的主键)

CREATED: 镜像的创建时间

SIZE: 镜像的大小

docker images[参数]
-a#列出本地所有的镜像,含中间映像层
-q #只返回镜像Id
-qa #-a与 -q的组合参数
-digests #一些镜像的摘要说明
--no-trunc #显示完整的镜像信息

三、容器

相当于已经安装好的App

镜像与容器,宿主机的关系:
docker的图标就是一个鲸鱼上面装有很多集装箱,鲸鱼游在大海里,大海就是宿主机,鲸鱼背上的集装箱就是一个个的容器实例,这个容器实例就来源于镜像生成的。
有镜像才能创建容器,Docker利用容器独立运行一个或一组应用。容器是用镜像创建的运行实例。它可以被启动,开始,停止,删除,每个容器都是相互隔离的,保证平台的安全。
可以把容器看做是一个简易版的linux运行环境,包括运行在里面的应用程序。Docker启动是秒级的,容器只保留了内核,把硬件,网络,打印机不相关的统统去掉了,所以它运行就快。

四、数据卷

4.1、数据卷的概念

  • 问题1: docker容器删除后,在容器中产生的数据还在吗?
  • 问题2: docker容器和外部机器可以直接交换文件吗?
  • 问题3: 容器之间想要进行数据交换该怎么解决?

数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷。

在这里插入图片描述

4.2 、数据卷的作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

4.3 、配置容器数据卷

直接使用命令来挂载

需要先使用镜像来启动成为容器

docker run -it -v #主机目录:容器目录
#例如:
docker run -it -v /home/cesi:/home --name=centos0l centos /bin/bash

写入文件

echo "abc">a.txt

查看是否挂载成功

docker inspect 容器ID

在这里插入图片描述

双向绑定,数据同步
我们以后修改只需要在本地修改即可,容器内会自动同步!

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建

五、搭建服务

5.1、创建容器步骤

设置端口、运行容器做数据挂载、端口映射、目录映射

  • 容器内的网络服务和外部机不能直接通信
  • 外部机器和宿主机可以直接通信
  • 宿主机和容器可以直接通信
  • 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机的该端口,从而间接访问容器的服这种操作叫做端口映射。

六、DockerFile

思考:

  • Docker镜像本质是什么?
  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
  • Docker中一个tomcat镜像为什么有500MB,而一个 tomcat 安装包只有70MB呢?

6.1 、Docker镜像原理

操作系统组成部分:

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 网络通信子系统
  • 作业控制子系统
  • 文件管理子系统

Linux 的文件系统由 bootfsrootfs两部分组成。fsfle system的简写,包含bootloader(引导加载程序)和kemel(内核)

roots是root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录与文件。不同的Linux发行版,boots基本一样,而rootf不同,如ubuntu与centos等。
docker镜像是由特殊的文件叠加而成,最底端是boots,并使用宿主机的boots,就是说我们启动了一个 Linux 的操作系统,在上面安装了一个docker,Linux 启动的时候要把内核加载起来,而docker的镜像启动的时候,也需要加载内核,boots 但不需要再次加载了,使用宿主机的 bootfs,第二层是 root 文件系统 rootfs ,称为 base image,然后再往上可以叠加其他的镜像文件

在这里插入图片描述


当你去下载 tomcat 的时候,它就去检查看看有没有idk,没有就去下载 jdk,再往下看有没有基础镜像,没有则继续下载,这三部分组合起来称之为tomcat镜像,对外暴露的tomcat,它是一个只读镜像,这就是我说的镜像就是一个千层饼。下载好tomcat以后,我们再要去下载一个nginx,这时候 nginx 也需要基础镜像,它就不会再去下载了,而直接使用下载好的基础镜像,基础的每一层镜像都可以被别人复用。

一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。这些只读镜像都不能改动,因为你改动了,别的镜像就不可以进行复用了。当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。

在这里插入图片描述


知道了docker的组成结构后,回答3个问题

  • Docker镜像本质是什么?
:是一个分层文件系统
  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个GB?
:centos的iso镜像文件包含bootfs和rootfs所以很大,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层,所以就小。
  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70MB呢?
:由于docker中镜像是分层的,tomcat虽然只有70MB,但它需要依赖父镜像和基础镜像,所以整个对外暴.的tomcat镜像就是500MBdocker inspect tomcat:latest #查看镜像的详细信息
docker inspect tomcat:latest #查看镜像的详细信息

6.2 、Docker镜像如何制作

6.2.1、容器转为镜像
docker commit 容器id 镜像名称:版本号

查看镜像

docker images

在这里插入图片描述

把容器转成镜像后,再把镜像转成压缩文件,这样就可以直接把压缩文件发给测试人员,测试人员把镜像还原成容器,就可以直接测试了。

镜像不可以直接传输只能转变为压缩文件才能传输。
镜像转变为压缩文件:

docker save -o 压缩文件名称 镜像名称:版本号
6.2.2、压缩文件转变为镜像
docker load -i 压缩文件名称 #i 就是input的意思

示例命令:

docker commit 04adada1e7f5 msi_tomcat:1.0 #把容器转变为镜像
docker save o msj_tomcat.tar msj_tomcat:1.0 #把镜像做成压缩文件
ll #查看生成的文件
#解压测试
docker rmi bef5472c2c00 #删除由容器转换成的镜像
docker oad i msj_tomcat.tar #解压缩镜像

总结:

1、由容器转为镜像
2、镜像转变为压缩文件
3、下载压缩文件,交由测试人员
4、测试人员拿到压缩文件,上传到宿主机
5、把压缩文件转化为镜像
6、由镜像再启动为容器

注意:数据卷挂载的文件,不会连同一起打成压缩文件。


6.3 Dockerfile概念

​ dockerfle 本质上是一个文本文件,包含了一条条的指令,是用来制作镜像的。每一条指令构建一层镜像,基于基础镜像,最终构建出一个新的镜像,对于开发人员,dockerfile可以为开发团队提供一个完全一致的开发环境。对于运维人员,在部署时,可以实现应用的无缝移植。

去官网上查看其他 dockerfile
https://hub.docker.com
构建mysql的Dockerfile命令行:
https://github.com/CentOs/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /LABEL \org.label-schema.schema-version="1.0" \org.label-schema.name="CentOS Base Image" \org.label-schema.vendor="CentOS" \org.label-schema.license="GPLv2" \org.label-schema.build-date="20201113" \org.opencontainers.image.title="CentOS Base Image" \org.opencontainers.image.vendor="CentOS" \org.opencontainers.image.licenses="GPL-2.0-only" \org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"]

常用的 DockerFile 关键字列表

在这里插入图片描述

6.4 制作dockerfile文件

dockerfile文件编写命令行步骤

#1 定义父镜像 FROM java:8
#2 定义作者信息 MAINTAINER jShuai  <3284484@qq.com>
#3 将jar包添加到容器 ADD docker-demo-01-0.0.1-SNAPSHOT.jar app.jar
#4 定义容器启动执行的命令 CMD java -jar app.jar
#5 通过dockerfile构建镜像 docker build -f dockerfile文件路径 -t 镜像名称:版本

学习目的:制作dockerfile文件,发布并部署springboot项目

6.4.1 制作项目jar文件

制作springboot项目jar文件,上传到根目录的dockerfile文件夹下

6.4.2 下载idk8镜像
docker pull java:8
6.4.3 创建dockerfile文件
vim springboot_dockerfile
6.4.4 编写dockerfile文件
ROM java:8
MAINTAINER jShuai <3284484@qq.com>
ADD docker-demo-01-0.0.1-SNAPSHoT.jar app.jar
CMD java -jar app.jar
6.4.5 执行生成镜像
docker build -f ./springboot_dockerfile -t app
6.4.6 把镜像生成为容器
docker run -id -p 9000:8080 --name=app app
6.4.7 测试
http://192.168.0.101:9000/he71o

七、Docker服务编排

7.1 服务编排概念

​ 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启动和停止,维护的工作量会很大。双11的时候,阿里的微服务达到上万个。我们自己部署项目都会部署在docker之中,其中启动的容器不仅仅有我们的项目,还有redis,mysql,nginx,还有tomcat等一些应用软件。

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

7.2 Docker Compose 概述

DockerCompose 是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止,使用步骤:

  1. 利用 dockerfile 定义运行环境镜像
  2. 利用 docker-compose.yml 定义组成应用的各服务
  3. 运行 docker-compose up 启动应用

7.3 Docker Compose安装和使用

我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:
https://github.com/docker/compose/releases
运行以下命令以下载 Docker Compose 的当前稳定版本:

curl -L "https://github.com/docker /compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换1.29.2。

网速较慢的话用

curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m`> /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

chmod +x/usr/local/bin/docker-compose

测试是否安装成功:

docker-compose -v

7.4 Docker compose卸载

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

7.5 使用Docker compose编排项目

7.5.1 创建文件夹
mkdir ~/docker-compose
7.5.2 创建docker-compose.yml
cd ~/docker-compose
vim docker-compose.yml
7.5.3 编写docker-compose.yml
version:'3'
services:nginx:image:nginxports:- 80:80links:- appvolumes :# 数据卷挂载- ./nginx/conf.d:/etc/nginx/conf.dapp:image: appexpose:-"8080"

说明:

Tinks: #当前的nginx可以访问到app项目
volumes: #数据卷挂载
7.5.4 创建./nginx/conf.d日录
mkoir -n./nginx/conf.d
cd ./nginx/cof.d
ll
vim nginx.conf
7.5.5 编写nginx的配置文件
server{listen 80;access_log off;location /{proxy_pass http://app:8080;}
}
7.5.6 使用docker-compose启动容器
cd ../../ #放到docker-compose目录之下
docker-compose up
#或者后台启动
docker-compose up -d
7.5.7 测试访问
http://192.168.0.101/hello

八、Docker容器虚拟化与传统虚拟机的比较

8.1 什么是虚拟机

虚拟机在本质上就是在模拟一台真实的计算机设备,同时遵循同样的程序执行方式。虚拟机能够利用"虚拟机管理程序"运行在物理设备之上。反过来,虚拟机管理
程序则可运行在主机设备或者“裸机”之上。传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。,每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

8.2 什么是Docker

Docker是一个集开发、打包、运行应用于一体的开放式平台。Docker可以用来快速交付应用。使用Docker,你可以将应用程序从你的基础设施中分离出来,并将基础设施当做一个管理平台。Docker可以加快打包时间,加快测试,加快发布,缩短开发及运行代码之间的周期。Docker通过结合内核容器化特点和工作流,并使之工具化来实现这一切,帮助管理和发布你的应用。

8.3 区别

相同点:
容器与虚拟机具有相似的资源隔离和分配优势
不同:
容器虚拟化的是操作系统,虚拟机虚拟化的是硬件
传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统

在这里插入图片描述

8.4 注意区别总结

Docker和虚拟机有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣。
Docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几平没有性能损耗Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小,同样的硬件环境,DocKer运行的镜像数远多于虑拟机数量,对系统的利用率非常高。

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

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

相关文章

洛谷P12238 [蓝桥杯 2023 国 Java A] 单词分类

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] Copy from luogu. [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 既然都是字符串前缀的问题了&#xff0c;那当然首先就应该想到 Trie \text{Trie} Trie 树。 我们可…

pta作业中有启发性的程序题

1 【知识点】&#xff1a;多态 函数接口定义&#xff1a; 以Student为基类&#xff0c;构建GroupA, GroupB和GroupC三个类 裁判测试程序样例&#xff1a; #include<iostream> #include <string> using namespace std;/* 请在这里填写答案 */int main() {const …

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类&#xff0c;它继承自 Spider 类&#xff0c;主要用于实现基于规则的网页爬取。相较于普通的 Spider 类&#xff0c;CrawlSpider 可以根据预定义的规则自动跟进页面中的链接&#xff0c;从而实现更高效、更灵活的爬取。 Scr…

Glide 如何加载远程 Base64 图片

最近有个需求&#xff0c;后端给出的图片地址并不是正常的 URL&#xff0c;而且需要一个接口去请求&#xff0c;但是返回的是 base64 数据流。这里不关心为啥要这么多&#xff0c;原因有很多&#xff0c;可能是系统的问题&#xff0c;也可能是能力问题。当然作为我们 Android 程…

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…

#基础Machine Learning 算法(上)

机器学习算法的分类 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Supervised Algorithms&#xff09;:在监督学习训练过程中&#xff0c;可以由训练数据集学到或建立一个模式&#xff08;函数 / learning model&#xff09;&#xff0c;并依此模式推测新的实例。…

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

目录 Multisim使用教程说明链接 一、正弦波信号发生电路 1.1正弦波发生电路 电路组成 工作原理 振荡频率 1.2 正弦波发生电路仿真分析 工程文件链接 二、方波信号发生电路 2.1 方波发生电路可调频率 工作原理 详细过程 2.2 方波发生电路可调频率/可调占空比 调节占空比 方波产生…

【AND-OR-~OR锁存器设计】2022-8-31

缘由锁存器11111111111-硬件开发-CSDN问答 重置1&#xff0c;不论输入什么&#xff0c;输出都为0&#xff1b; 重置0&#xff0c;输入1就锁住1 此时输入再次变为0&#xff0c;输出不变&#xff0c;为锁住。

力扣-字符串-468 检查ip

思路 考察字符串的使用&#xff0c;还有对所有边界条件的检查 spilt&#xff08;“\.”&#xff09;&#xff0c;toCharArray&#xff0c;Integer.parseInt() 代码 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…

BC8 十六进制转十进制

题目&#xff1a;BC8 十六进制转十进制 描述 BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 输入描述&#xff1a; 无 输出描述&#xff1a; 十六进制整数ABCDEF对应的十进制整数&#xff0c;所占域宽为15。 备注&#xff1a; printf可以使用…

ARM子程序和栈

微处理器中的栈由栈指针指向存储器中的栈顶来实现&#xff0c;当数据项入栈时&#xff0c;栈 指针向上移动&#xff0c;当数据项出栈时&#xff0c;栈指针向下移动。 实现栈时需要做出两个决定&#xff1a;一是当数据项进栈时是向低位地址方向向上生 长&#xff08;图a和图b&a…

jwt身份验证和基本的利用方式

前言 &#xff1a; 什么是jwt&#xff08;json web token&#xff09;&#xff1f; 看看英文单词的意思就是 json形式的token 他的基本的特征 &#xff1a; 类似于这样的 他有2个点 分割 解码的时候会有三个部分 头部 payload 对称密钥 这个就是对称加密 头部&am…

n8n工作流自动化平台的实操:利用本地嵌入模型,完成文件内容的向量化及入库

1.成果展示 1.1n8n的工作流 牵涉节点&#xff1a;FTP、Code、Milvus Vector Store、Embeddings OpenAI、Default Data Loader、Recursive Character Text Splitter 12.向量库的结果 2.实操过程 2.1发布本地嵌入模型服务 将bge-m3嵌入模型&#xff0c;发布成满足open api接口…

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…

git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit

之前git都是全新项目上传&#xff0c;没有迁移过&#xff0c;因为迁移的话要考虑已有项目上的分支都要迁移过去&#xff0c;提交记录能迁移就好&#xff1b;分支如果按照全新项目上传的方式需要新git手动创建好老git已有分支&#xff0c;在手动一个一个克隆老项目分支代码依次提…

Photo-SLAM论文理解、环境搭建、代码理解与实测效果

前言&#xff1a;第一个解耦式Photo-SLAM&#xff0c;亮点和效果。 参考&#xff1a;https://zhuanlan.zhihu.com/p/715311759 全网最细PhotoSLAM的conda环境配置教程&#xff0c;拒绝环境污染&#xff01;&#xff01;-CSDN博客 1. 环境搭建 硬件&#xff1a;RTX 4090D wi…

如何使用VSCode编写C、C++和Python程序

一、首先准备好前期工作。如下载安装Python、VSCode、一些插件等。写代码之前需要先创建文件夹和文件。 二、将不同语言写的代码放在不同的文件夹中&#xff0c;注意命名时不要使用中文。 三、打开VSCode&#xff0c;点击“文件”->“打开文件夹”->“daimalainxi”->…

基于不确定性感知学习的单图像自监督3D人体网格重建 (论文笔记与思考)

文章目录 论文解决的问题提出的算法以及启发点 论文解决的问题 首先这是 Self-Supervised 3D Human mesh recovery from a single image with uncertainty-aware learning &#xff08;AAAI 2024&#xff09;的论文笔记。该文中主要提出了一个自监督的framework用于人体的姿态…

Leetcode刷题记录33——二叉树的最小深度

题源&#xff1a;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 思路一&#xff1a; 使用 DFS 递归遍历的解法&#xff0c;每当遍历到一条树枝的叶子节点&#xff0c;就会更新最小深度&#xff0c;当遍历完整棵树后&#x…

有效的括号(20)

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:bool isValid(string s) {unordered_map<char, char> m {{), (}, {],[}, {}, {}};stack<char> stk;for (int i 0; i < s.size(); i) {if (s[i] ( || s[i…