当前位置: 首页 > news >正文

【在Ubuntu部署Docker项目】— PROJECT#1

一、说明

        让我们深入了解 Docker。用docker构建web服务器。我们正在计划开发JavaScript API,建立MySQL数据库,并创建一个 PHP 网站使用 API 服务。Php + Node.js + Mysql — DockerSeries — Episode#1

二、系统架构概述

        我们要构建的容器,是三个独立的容器组成,它们三者构成一个网络。

        以下是目录结构和相应的步骤:

四、通过实践来学习 Docker!

        这是最终结果:http://localhost:8888/

        准备好练习了吗?

1#Step — 在 Ubuntu 上安装并运行 Docker Desktop。如果需要,您可以参考这篇文章;

2#Step — 使目录结构(复制/粘贴并按回车键,您就可以进入VScode:)

mkdir docker
cd docker
mkdir proj_01
cd proj_01
mkdir api
cd api
mkdir db
mkdir src
cd ..
mkdir website
cd website
mkdir vendor
cd ..
code . 

3#Step — 进入 VScode 后,让我们创建一个 Dockerfile:

转到: :proj_01/api/db/Dockerfile

FROM mysql
ENV MYSQL_ROOT_PASSWORD jaythree 

4#Step — 让我们构建映像。

返回到根目录并在终端中键入:proj_01/

docker build -t mysql-image -f api/db/Dockerfile . 

你会得到这个:/ERROR

无法在 unix:///home/j3/.docker/desktop/docker.sock 连接到 Docker 守护程序。docker 守护程序是否正在运行?

哎呀!运行 Docker 桌面,您就可以开始了!

请立即运行 Docker 桌面!

返回根目录 ~/docker/proj_01$ 并尝试再次构建 MySQL 镜像...巨大的成功!

5#Step — 使用我们最近生成的映像运行 MySQL 容器。转到 &类型:proj_01/

容器 # 1

docker run -d -v $(pwd)/api/db/data:/var/lib/mysql --rm --name mysql-container mysql-image 

在 Docker 桌面中,您将看到 MySQL 容器运行良好!

6#Step — 现在我们已经启动并运行了一个 MySQL 容器,让我们创建一个数据库 (outfit_db),定义一个表(产品),并插入一些值。

对于此测试,我们将使用我们在服装商店的在线数据库:

DB来自这篇文章。我们现在只使用三行...

创建此文件:

proj_01/db/script.sql

CREATE DATABASE IF NOT EXISTS outfit_db;
USE outfit_db;
CREATE TABLE IF NOT EXISTS products (id INT AUTO_INCREMENT,sales_code INT NOT NULL,date date NOT NULL,store_id VARCHAR(255),product VARCHAR(255),qty INT NOT NULL,unit_price DECIMAL(10, 2),PRIMARY KEY (id)
);
INSERT INTO products VALUE(0, 65014, '2019-01-12', 'Shopping Morumbi', 'Aster Pants', 5, 114);
INSERT INTO products VALUE(0, 65014, '2019-01-12', 'Shopping Morumbi', 'Trench Coat', 1, 269);
INSERT INTO products VALUE(0, 65016, '2019-01/-2', 'Iguatemi Campinas', 'Peter Pan Collar', 2, 363); 

7#Step —让我们执行数据库和表,并使用前面的脚本用值填充它。转到 :proj_01/

docker exec -i mysql-container mysql -uroot -pjaythree < api/db/script.sql 

8#Step — 现在,让我们访问容器以执行 SQL 选择。

若要查看容器中的表并使用命令行与数据库交互,需要通过调用方法访问它:outfit_dbexec

docker exec -it mysql-container /bin/bash 
bash-4.4# mysql -uroot -pjaythreemysql> USE outfit_db;
mysql> SELECT * FROM products;
exit
exit 

具体来说,它使用该命令与名为 的 Docker 容器进行交互。命令末尾的 指示它正在指定容器内启动交互式 b灰壳 (CLI) 会话。这允许您访问容器的文件系统并在其中工作,并像在容器本身中一样运行命令。这是在 Docker 容器中执行任务或维护操作的常用方法。docker execmysql-container/bin/bash

为方便起见,以下是我们在终端中执行的上述两项操作:


$ docker exec -i mysql-container mysql -uroot -pjaythree < db/script.sql
mysql: [Warning] Using a password on the command line interface can be insecure.$ docker exec -it mysql-container /bin/bash
bash-4.4# mysql -uroot -pjaythree
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.1.0 MySQL Community Server - GPLCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> USE outfit<em>_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changedmysql> SELECT * FROM products;
+----+------------+------------+-------------------+------------------+-----+------------+
| id | sales_</em>code | date       | store<em>_id          | product          | qty | unit_</em>price |
+----+------------+------------+-------------------+------------------+-----+------------+
|  1 |      65014 | 2019-01-12 | Shopping Morumbi  | Aster Pants      |   5 |     114.00 |
|  2 |      65014 | 2019-01-12 | Shopping Morumbi  | Trench Coat      |   1 |     269.00 |
|  3 |      65016 | 2019-01-02 | Iguatemi Campinas | Peter Pan Collar |   2 |     363.00 |
+----+------------+------------+-------------------+------------------+-----+------------+
3 rows in set (0.00 sec)mysql> exit
Bye
bash-4.4# exit
exit 

注意:如果需要删除,请使用:mysql> DROP DATABASEoutlet_db;

9#Step — 继续通过终端安装Node(NodeJs官网),因此输入以下命令:

sudo apt install npmnode -v
v18.13.0 

10#Step — GoTo & type:

proj_01/api/ :

npm init  

这是我们终端的输出:

~/docker/proj_01/api$ npm initThis utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.See `npm help init` for definitive documentation on these fields
and exactly what they do.Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.Press ^C at any time to quit.
package name: (api) 
version: (1.0.0) 
description: Docker intro
entry point: (index.js) 
test command: test
git repository: 
keywords: Docker
author: j3
license: (ISC) 
About to write to /home/j3/docker/proj_01/api/package.json:{"name": "api","version": "1.0.0","description": "Docker intro","main": "index.js","scripts": {"test": "test"},"keywords": ["Docker"],"author": "j3","license": "ISC"
}Is this OK? (yes)  

该命令用于初始化新的 Node.js 项目。当您在终端中运行此命令时,它会提示您一系列问题,并询问各种配置选项来设置您的项目。这些问题通常包括项目名称、版本、说明、入口点文件、测试命令等内容。npm init

回答这些问题或接受默认值后,npm 将在项目目录中生成一个文件。此文件对于管理 Node.js 应用程序的依赖项、脚本和其他与项目相关的元数据至关重要。它会跟踪项目的依赖项及其版本,从而更轻松地在不同系统上共享和重现项目。package.jsonpackage.json

总之,是一个命令,可帮助您为 Node.js 项目创建和配置文件,从而更轻松地管理依赖项和项目设置。npm initpackage.json

11#Step — 让我们安装 。现在运行在 :nodemonproj_01/api/

npm install --save-dev nodemonornpm install -D nodemonnpm fund 

我们提到的两个命令执行以下操作:

  1. npm install --save-dev nodemon:此命令将包安装为 Node.js 项目的开发依赖项。 是一个实用程序,用于监视 Node.js 应用程序文件中的更改,并在检测到更改时自动重新启动服务器。该标志指定应添加到文件部分的标志。这通常用于仅在开发和测试期间(而不是在生产中)需要的工具和依赖项。nodemonnodemon--save-devnodemondevDependenciespackage.json
  2. npm fund:此命令用于显示有关项目中使用的文件包的资金选项的信息。它显示了有关如何在经济上支持您所依赖的软件包的维护者的信息。这是一种鼓励用户为开源项目做出贡献的方式,如果维护者已经设置了资金选项或捐赠平台的链接。
  3. 您还可以选择使用速记:-D
npm install -D nodemon 

这两个命令(或)都将正确地将nodemon安装为开发依赖项,并相应地更新您的package.json文件。--save-dev-D

总之,第一个命令作为开发依赖项安装,这对于开发目的很有用,第二个命令用于检查与项目中使用的包相关的资金信息。nodemon

这是我们的终端:

~/docker/proj_01/api$ npm install - save-dev nodemonadded 35 packages, and audited 36 packages in 5s3 packages are looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities~/docker/proj_01/api$ npm fund
api@1.0.0
└─┬ https://opencollective.com/nodemon│ └── nodemon@3.0.1└─┬ https://paulmillr.com/funding/│ └── chokidar@3.5.3└── https://github.com/sponsors/jonschlinkert└── picomatch@2.3.1 

12#Step — 让我们安装和驱动程序。转到 :expressMySQLproj_01/api/

npm install --save express mysql 

该命令用于安装两个 Node.js 包和 ,并将它们另存为项目中的依赖项。npm install --save express mysqlexpressmysql

  • express:这个流行的 Node.js Web 应用程序框架简化了 Web 应用程序和 API 的构建。它提供了用于路由、处理 HTTP 请求和响应、中间件支持等的工具和功能。通过安装它并将其另存为依赖项(标志现已弃用,因此对于现代 npm 版本不是必需的),您可以包含在项目中,使其可用于代码。请参阅官方 NPM 文档。--saveexpress
  • mysql:这是 MySQL 数据库的 Node.js 驱动程序。它允许您的 Node.js 应用程序与 MySQL 数据库交互,使您能够执行数据库操作,例如查询、插入、更新和删除数据。通过安装并另存为依赖项,您可以在项目中使用它来连接和使用 MySQL 数据库。mysql

因此,该命令会安装这两个包并将它们添加到文件中的项目部分,从而允许您在 Node.js 应用程序中使用它们。npm install --save express mysqldependenciespackage.json

13#Step —转到该文件并将以下代码添加到脚本部分中:proj_01/api/package.json

, "start": "nodemon ./src/index" 

整个文件的结果如下:

proj_01/api/package.json

{"name": "api","version": "1.0.0","description": "Docker intro","main": "index.js","scripts": {"test": "test", "start": "nodemon ./src/index"},"keywords": ["Docker"],"author": "j3","license": "ISC","dependencies": {"-": "^0.0.1","express": "^4.18.2","mysql": "^2.18.1","nodemon": "^3.0.1","save-dev": "^0.0.1-security"}
}

在文件中,该部分用于定义可以使用 npm 执行的各种脚本或命令。此代码块定义了两个脚本:package.json"scripts"

  1. "test": "test":此脚本名为“test”,它与命令“test”相关联。此脚本的实际功能取决于它在项目中的实现方式。在许多 Node.js 项目中,“test”脚本用于运行自动化测试,例如使用 Mocha、Jest 等测试框架编写的测试。“test”脚本的特定行为应记录在项目的自述文件或单独的测试配置文件中。
  2. "start": "nodemon ./src/index":此脚本名为 ,它与命令 相关联。当您在终端中运行时,它将执行此处指定的命令,即 。此命令使用该工具通过运行位于 的文件来启动 Node.js 应用程序。 是一个实用程序,每当在指定文件中检测到更改时,它都会自动重新启动 Node.js 应用程序,这在开发过程中非常有用,可以在您进行代码更改时自动刷新服务器。startnodemon ./src/indexnpm startnodemon ./src/indexnodemon./src/indexnodemon

因此,总而言之,这些脚本定义了可以使用 npm 执行的命令。 通常用于运行测试,通常用于启动 Node.js 应用程序,通常在开发期间通过 自动重新加载。"test""start"nodemon

14#Step —请建立一个目录并将文件放在其中:/api/srcindex.js

proj_01/api/src/index.js

const express = require('express');
const mysql = require('mysql');const app = express();const connection = mysql.createConnection({host: 'mysql-container', //'172.17.0.2', You can streamline this operation by employing the alias 'mysql-container' when executing the Docker run command with the addition of '--link mysql-container.'user: 'root',password: 'jaythree',database: 'outfit_db',insecureAuth: true // Add this line
});connection.connect();app.get('/products', function(req, res) {connection.query('SELECT * FROM products', function (error, results) {if (error) { throw error};res.send(results.map(item => ({ name: item.product, price: item.unit_price })));});
});app.listen(9001, '0.0.0.0', function() {console.log('Listening on port 9001');
})

注意:要获取 IP 地址:docker inspect mysql-container

此指令将生成一组与指定容器相关的大量 JSON 格式的详细信息。我们的目标是使用以下格式查找网络 IP “IPAddress”: “172.17.0.2”

15#Step —生成一个 Dockerfile 来设置 Node.js 应用程序:

proj_01/api/Dockerfile

FROM node:18-slim
WORKDIR /home/node/app
CMD npm start

此 Dockerfile 定义了为 Node.js 应用程序创建 Docker 容器的指令:

  1. 它指定要用作起点的基本映像,即 。此映像包含 Node.js 版本 18,并且是 Node.js 映像的轻量级(苗条)版本。node:18-slim
  2. 它将容器内的工作目录设置为 。这是应用程序的文件和代码将放置在容器中的位置。/home/node/app
  3. CMD 指令指定容器启动时要运行的命令,即 。此命令通常用于启动项目文件中定义的 Node.js 应用程序。npm startpackage.json

总体而言,此 Dockerfile 设置了一个运行 Node.js 应用程序的环境,将应用程序文件放在指定的目录中,并在启动容器时使用“npm start”启动应用程序。

16#Step — 让我们为 Node.js 应用程序构建一个映像。

转到:proj_01/

docker build -t node-image -f api/Dockerfile .

这是我的终端:

j3@JAYTHREE:~/docker/proj_01$ docker build -t node-image -f api/Dockerfile .
[+] Building 2.5s (6/6) FINISHED                                                                                                                                              docker:desktop-linux=> [internal] load build definition from Dockerfile                                                                                                                                          0.0s=> => transferring dockerfile: 91B                                                                                                                                                           0.0s=> [internal] load .dockerignore                                                                                                                                                             0.0s=> => transferring context: 2B                                                                                                                                                               0.0s=> [internal] load metadata for docker.io/library/node:18-slim                                                                                                                               2.4s=> [1/2] FROM docker.io/library/node:18-slim@sha256:e5c8c319295f6cbc288e19506a9ac37afa3b330f4e38afb01d1269b579cf6a5b                                                                         0.0s=> CACHED [2/2] WORKDIR /home/node/app                                                                                                                                                       0.0s=> exporting to image                                                                                                                                                                        0.0s=> => exporting layers                                                                                                                                                                       0.0s=> => writing image sha256:9edd82ba69b8e912e3f0e3ef876a14bb4f5a82f8b19b8bbeaa612cb1e642ae0e                                                                                                  0.0s=> => naming to docker.io/library/node-image                                                                                                                                                 0.0sWhat's Next?View summary of image vulnerabilities and recommendations → docker scout quickview

17#Step — 现在在以下位置运行节点容器proj_01/

容器 # 2

docker run -d -v $(pwd)/api:/home/node/app -p 9001:9001 --link mysql-container --rm --name node-container node-image

该标志用于指定端口映射。-p

以下是在此上下文中执行的操作:-p

  1. -p 9001:9001:此标志将主机上的端口映射到 Docker 容器内的端口。在本例中,它将主机上的端口 9001 映射到容器内的端口 9001。定向到主机上端口 9001 的任何流量都将转发到容器的端口 9001。
  2. 使用该标志链接两个容器。这允许Web应用程序容器轻松地与MySQL容器进行通信。--link

当您在侦听特定端口的 Docker 容器中运行服务,并且您希望从主机访问该服务时,通常会使用此方法。通过指定此端口映射,可以与容器中运行的服务进行交互,就像它直接在主机上运行一样。

因此,在此特定示例中,对主机上的端口 9001 发出的任何请求都将转发到在名为 的 Docker 容器内运行的 Node.js 应用程序。node-container

18#step — 如果您打开 Web 浏览器并导航到 ,它将断言:http://localhost:9001/

不:/

转到您的 Docker 桌面终端 在选项卡中,您将看到以下内容:/Logs

错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端

此问题已在 StackOverflow 上的此线程中得到解决。

解决方案:请重复步骤#8,一旦进入MySQL容器的终端,输入以下命令:

ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'jaythree';or ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';flush privileges;exit

在 Docker 桌面选项卡内,请运行这些脚本 👆️ 终端

19#step — 在 Docker Desktop 中停止并重新初始化此容器。

按以下顺序刷新两个容器,方法是单击按钮:Restart

重新启动 mysql 容器并...

重新启动节点容器。

20#step — 现在导航到:

http://localhost:9001/products

瞧!您的 API 已启动并平稳运行,并按预期响应!

21#step — 让我们继续创建一个 PHP 应用程序,该应用程序将与该 API 交互并使用该 API。

转到:

proj_01/website/index.php

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Docker Intro | Jungletronics</title><link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.min.css" />
</head>
<body><?php$result = file_get_contents("http://node-container:9001/products");$products = json_decode($result);?><h1 style="text-align: center;">Inspirational Clothing and Fashion Catalogue:</h1>  <div class="container d-flex justify-content-center">  <table class="table">      <thead><tr><th>Product</th><th>Price</th></tr></thead><tbody><?php foreach($products as $product): ?><tr><td><?php echo $product->product; ?></td><td><?php echo $product->unit_price; ?></td></tr><?php endforeach; ?></tbody></table></div><footer style="text-align: center;">Please visit this post on our Outfit App:<a href="https://medium.com/jungletronics/simple-ecommerce-api-using-flask-b192e2079791">Simple eCommerce API using Flask - How to Get Started on Flask — #flaskSeries #Episode00</a>
</footer>
</body>
</html>

22#step — 为您的 PHP 应用程序创建另一个 docker 文件:

proj_01/website/Dockerfile

FROM php:7.2-apache
WORKDIR /var/www/html

23#step — 在其上构建映像app_01/:

docker build -t php-image -f website/Dockerfile .

24#step — 运行 php 容器

容器 # 3

docker run -d -v $(pwd)/website:/var/www/html -p 8888:80 --link node-container --rm --name php-container php-image

25#step —浏览至:

http://localhost:8888/

26#step - 启用引导程序以增强网页的外观。

下载适用于 Bootstrap v5.0.2 的即用型编译代码,轻松放入您的项目中。

请点击提供的链接下载ZIP文件。下载后,提取其内容,然后将解压缩的文件夹重命名为 .bootstrap

将文件保存在目录中。proj_01/website/vendor

27#step — 转到并在 </head 上方添加此行>app_01/website/index.php

 <link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.min.css" />

28#step — 在 Docker Desktop 中访问 MySQL 容器的终端并引入新产品。观察此添加是否同时反映在 API 和网站中。

29#step — 创建一个 Docker 组合:

proj_01/docker-compose.yml

version: "3.7"
services:db:image: mysql-imagecontainer_name: mysql-containercommand: --default-authentication-plugin=mysql_native_passwordenvironment:MYSQL_ROOT_PASSWORD: jaythreevolumes:- ./api/db/data:/var/lib/mysqlrestart: alwaysapi:build: ./apicontainer_name: node-containerrestart: alwaysvolumes:- ./api:/home/node/appports:- "9001:9001"depends_on:- dbweb:image: php-imagecontainer_name: php-containerrestart: alwaysvolumes:- ./website:/var/www/htmlports:- "8888:80"depends_on:- db- api

要达到预期的结果,只需执行:,就像魔术一样,一切都将被配置!docker-compose up -d

给你!

如果你也有兴趣学习Python,请考虑查看这篇文章。非常感谢您的关注!

我相信这篇文章为您提供了有关 Docker 的更多见解。

相关文章:

【在Ubuntu部署Docker项目】— PROJECT#1

一、说明 让我们深入了解 Docker。用docker构建web服务器。我们正在计划开发JavaScript API&#xff0c;建立MySQL数据库&#xff0c;并创建一个 PHP 网站使用 API 服务。Php Node.js Mysql — DockerSeries — Episode#1 二、系统架构概述 我们要构建的容器&#xff0c;是三…...

【学习笔记】LOJ #6240. 仙人掌

毒瘤题&#x1f605; 简单版本 CF235D Graph Game 首先&#xff0c;考虑建立圆方树&#xff0c;然后对于一个点双&#xff08;简单环&#xff09;上的两个点&#xff0c;有两条路径可以到达 和简单版本类似&#xff0c;考虑容斥。即枚举点对 i , j i,j i,j之间 哪些路径是联…...

java通过接口转发文件(上传下载)

java接口转发上传的文件 RequestMapping(value "/XXXX/fileUpload", method RequestMethod.POST) public String getFileUpload2(RequestParam("file") MultipartFile file, HttpServletRequest request) public static String hotMapPost3(String ur…...

Docker-部署docker-compose以及管理服务

部署docker-compose以及管理服务 文章目录 部署docker-compose以及管理服务[TOC] 前言一、docker-compose是什么&#xff1f;1、介绍2、 功能 二、安装docker-compose1.yum直接安装2.二进制安装3.pip安装 三、docker-compose部署服务1.编写docker-compose.yml文件 总结 前言 D…...

Android - Monkey 测试应用出现Crash报错IllegalStateException

问题描述 平时使用Lottie动画都是正常的&#xff0c;没出过这个crash问题&#xff0c;看下的报错信息&#xff0c;代码中文件夹也设置了&#xff0c;没看出来问题。 AndroidRuntime: java.lang.IllegalStateException: You must set an images folder before loading an imag…...

Spring源码分析 事务 实现原理

文章目录 什么是事务Spring事务管理Spring事务实现原理事务管理器事务定义事务的开启事务核心方法业务代码使用事务TransactionInterceptor 什么是事务 一般所指的事务是数据库事务&#xff0c;是指一批不可分割的数据库操作序列&#xff0c;也是数据库并发控制的基本单位。其…...

ADS-B及雷达显示终端8.3

新版本功能升级主要有如下: 1、地图更新 在上一版本8.2中使用的高程地图为由SRTM经过地形晕渲后&#xff0c;生成地形图片&#xff0c;然后对图片进行贴图&#xff0c;一一按规定位置、大小将地形图贴至底图上&#xff0c;而后在底图上进行二维矢量地图的绘制&#xff0c;包括…...

第二章:最新版零基础学习 PYTHON 教程(第二节 - Python 输入/输出–从 Python 控制台获取输入)

目录 Python 中的控制台是什么? 接受来自控制台的输入: 1. 将输入类型转换为整数:...

linux安装配置 flume

目录 一 解压安装包 二 配置部署 &#xff08;1&#xff09;修改配置 &#xff08;2&#xff09;下载工具 &#xff08;3&#xff09;创建配置文件 &#xff08;4&#xff09;启动监听测试 &#xff08;5&#xff09;flume监控文件 一 解压安装包 这里提供了网盘资源 链…...

SSM - Springboot - MyBatis-Plus 全栈体系(十五)

第三章 MyBatis 二、MyBatis 基本使用 4. CRUD 强化练习 4.1 准备数据库数据 首先&#xff0c;我们需要准备一张名为 user 的表。该表包含字段 id&#xff08;主键&#xff09;、username、password。创建SQL如下&#xff1a; CREATE TABLE user (id INT(11) NOT NULL AUT…...

win10默认浏览器改不了怎么办,解决方法详解

win10默认浏览器改不了怎么办&#xff0c;解决方法详解_蓝天网络 在使用Windows 10操作系统时&#xff0c;你可能会遇到无法更改默认浏览器的情况。这可能是因为其他程序或设置正在干扰更改。如果你也遇到了这个问题&#xff0c;不要担心&#xff0c;本文将为你提供详细的解决…...

C语言连接MySQL并执行SQL语句(hello world)

1.新建一个控制台项目 参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客 2.安装MySQL 参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客 3.复制MySQ…...

react实现动态递增展示数字特效

在可视化展示界面时有一种场景&#xff0c;就是页面在初始化的时候&#xff0c;有些数字展示想要从某个值开始动态递增到实际值&#xff0c;形成一种动画效果。例如&#xff1a; 写一个数字递增的组件&#xff0c;有两种方式&#xff1a;1.固定步长&#xff0c;代码如下&#x…...

读取.nrrd和.dcm文件格式医学图片可视化与预处理

nrrd数据格式 MITK默认会将医学图像保存为格式为NRRD的图像&#xff0c;在这个数据格式中包含&#xff1a; 1、一个单个的数据头文件&#xff1a;为科学可视化和医学图像处理准确地表示N维度的栅格信息。 2、既能分开又能合并的图像文件。 nrrd_options输出 {u’dimension’:…...

VS CODE中的筛选器如何打开?

最近更新了vscode1.82版本&#xff0c;发现在git管理界面有一个“筛选器”功能&#xff0c;十分好用&#xff0c;后来关掉了&#xff0c;找了好久都没有找到办法打开这个筛选器功能&#xff0c;今天无意中不知道按到了哪个快捷键&#xff0c;打开了&#xff0c;就是下图这个&am…...

vue 多环境文件配置(开发,测试,生产)

1.经常我们在开发时候会有不同环境&#xff0c;要代理的路由等等都会出现不同 配置一下三个文件打包的时候&#xff0c;执行三个不同的指令就会打包不同的环境 npm run build:dev npm run build:test npm run build:prodpackage.json 中配置scripts 指令 以,env.development…...

在服务器上搭建pulseaudio的运行环境,指定其运行目录、状态目录和模块目录

如果想在搭建 PulseAudio 的服务器上指定其运行目录、状态目录和模块目录&#xff0c;可以通过修改 PulseAudio 的配置文件来实现。一般情况下所涉及的配置文件和相关选项如下所示&#xff1a; 1、配置文件路径&#xff1a;通常情况下&#xff0c;PulseAudio 的配置文件位于 /…...

[Qt]QListView 重绘实例之一:背景重绘

0 环境 Windows 11Qt 5.15.2 MinGW x64 1 系列文章 简介&#xff1a;本系列文章&#xff0c;是以纯代码方式实现 Qt 控件的重构&#xff0c;尽量不使用 Qss 方式。 《[Qt]QListView 重绘实例之一&#xff1a;背景重绘》 《[Qt]QListView 重绘实例之二&#xff1a;列表项覆…...

国庆周《Linux学习第二课》

Linux开篇指南针环境安装(第一课)-CSDN博客 Linux详细的环境安装介绍在上面 第一 环境准备过程 安装过程...

6年前的麒麟980依旧可以再战

麒麟980&#xff0c;使用6年后的今天&#xff0c;我对它进行跑分测试。 在bench旗下的VRMark跑分中&#xff0c;麒麟980荣获5023分&#xff0c;同款跑分APP&#xff0c;要知道同一时期的高通骁龙855只有4937分&#xff0c; 打游戏&#xff0c;以和平精英为例&#xff0c;帧率3…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...