docker入门

docker安装

在 Ubuntu |上安装 Docker 引擎Docker 文档

卸载旧版本

1
2
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ apt-get autoremove -y docker docker-ce docker-engine docker.io containerd runc docker-ce-cli

使用存储库安装 复制就完了

更新软件包

1
2
3
4
5
6
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release

GPG密钥

1
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证:

1
2
3
4
5
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]

阿里云镜像

1
$ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

安装docker引擎

1
2
3
4
5
6
7
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 对应版本docker
apt-cache madison docker-ce
apt-cache madison docker-ce-cli
# 选一个心动的
apt-get install docker-ce=5:20.10.24~3-0~ubuntu-focal docker-ce-cli=5:20.10.24~3-0~ubuntu-focal containerd.io docker-compose-plugin

验证:

1
docker version

docker镜像

搜索镜像(docker hub)

images查看镜像

1
docker images

pull下载镜像

1
2
3
docker pull mysql:5.7
# docker pull [name]:[tag]
# tag默认latest

rmi删除镜像

1
2
3
4
docker rmi mysql:5.7
# docker rmi [name]:[tag]
docker rmi 9384bbce10b2
#docker rmi [image]

stats查看docker进程

1
docker stats

tag

1
docker tag [image] [新image]

save保存为tar

1
docker save -o [路径/name.tar] [images]

load加载打包的镜像

1
docker load -i [name.tar]

docker容器

ps查看容器

1
2
3
4
5
docker ps # 查看运行容器
# docker ps [options]
option:
-a # 所有容器(默认是正在运行的容器)
-q # 只显示id

run运行容器

1
2
3
4
5
6
7
8
9
10
11
12
docker run -it -p 80:80 --name nginx01 nginx /bin/bash
#docker run [options] [image] [command]
option:
-it # 交互方式运行
-d # 后台
-p # 端口
-p [本机端口]:[容器端口]
-p [本机容器同端口]
-P # 随机端口
--name [name] # 容器名
-v [本机路径]:[容器路径] # 挂载数据卷
-network [name] # 自定义网络

进入容器

attach进入

1
2
docker attach nginx01 # exit后容器关闭,ctrl+p+q后容器依旧运行
# docker attach [container]

exec进入

1
2
3
4
docker exec -it nginx01 /bin/bash # exit后容器依旧运行
# dockr exec [options] [container] [command]
option:
-it # 交互方式进入

退出容器

1
2
exit
# 或ctrl+p+q(不停止退出)

容器状态操作

start启动关闭的容器

1
docker start [container]

restart重启容器

1
docker restart [container]

关闭容器

1
2
docker stop [container] # 关闭
docker kill [container] # 强制关闭

rm删除容器

1
2
docker rm [container]
docker rm -f [container] # 不关闭强制删除

logs查看容器日志

1
2
3
docker logs -tf --tail 25 nginx01
# docker logs [options] [container]
# 照着写就完了

top查看容器内进程(command)

1
docker top [container]

inspect查看容器信息

1
docker inspect [container]

cp拷贝文件到宿主机

1
2
docker cp a330bcd500d2:/home/hello.txt /home
# docker cp [container]:[容器路径] [宿主机路径]

commit提交镜像(快照)

1
2
3
4
# docker commit [options] [container] [新image名字]
option:
-m 描述
-a 作者

Dockerfile

基本指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FORM [image] # 基础镜像
MAINTAINER [作者名+邮箱]
RUN [command] # 构建时运行
ADD [包名] [容器内路径] # 自动解压
WORKDIR [路径] # 工作目录
VOLUME [匿名] # 数据卷
# VOLUME ["volume01","volume02"]
EXPOSE [端口]
CMD [command] # 容器启动时运行
ENTRYPOINT [command] # 同CMD但可追加
ONBIULD # 我不会
COPY [本机路径] [容器路径]
ENV [name] [路径]
# ENV JAVA_HOME /usr/local/java
# ENV PATH $PATH:$JAVA_HOME/bin

biuld

1
2
3
4
5
6
docker biuld -f dockerfile01 -t nginx01 .
docker biuld [options] .
option:
-f dockerfile名字(默认Dockerfile)
-t 新images名字
. 当前目录

docker hub

login登录

1
dockeer login -u [name] -p [password]

push上传

1
docker push [image:tag]

docker网络

network查看网络

1
docker network ls

create创建网络

1
2
3
4
5
6
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# docker network create [options] [name]
options:
--driver bridge # 桥接
--subnet 192.168.0.0/16 # 子网
--gateway 192.168.0.1 # 默认网关

connect容器连接网络

1
docker network connect [mynet] [container]

mysql基础

压测

安装mysql(docker)

Mysql - 官方图片|Docker Hub

拉取镜像

1
2
docker pull mysql:5.7
# docker pull mysql:[tag]

运行

1
2
3
4
5
6
docker run --name [name] -e MYSQL_ROOT_PASSWORD=[password] -d -p 3306:3306 mysql:[tag]
# 看这里-d -p -v --name -e --network
挂载数据卷
/var/lib/mysql/ # data
/etc/mysql/ # config
/var/log/mysql/ # logs

基本操作

show查看

1
2
3
4
5
6
7
8
# 查看所有数据库
show databases;
# 查看所有表
show tables;
# 查看数据库创建语句
show create database [database];
# 查看表创建语句
show create table [table];

use切换数据库

1
use [database];

create创建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create database [options] [table] [列];
# option:
if not exists
# 例子
create table if not exists users(
id int(4) not null auto_increment comment 'id',
name varchar(30) not null default 'name' comment 'name',
birthday datetime default null comment 'birthday',
email varchar(50) default null comment 'email',
primary key(id)
)engine=innodb default charset=utf8;
# 列属性
[name] [看例子]
option:
not null # 非空
default ['value'] # 默认值(可为null)
auto_increment # 自增
comment 'value' # 注释

desc显示表的结构

1
desc [table]

alter修改

1
2
3
4
5
6
7
8
9
10
# 修改表名
alter table [table] rename as [new table];
# 增加表的字段
alter table [table] add [列名] [列属性];
# 修改约束
alter table [table] modify [列名] [列属性];
# 重命名
alter table [table] change [列名] [新列名] [列属性];
# 删除
alter table [table] drop [列名];

drop删除

1
2
3
4
5
6
# 删除数据库
drop database [options] [database];
# 删除表
drop table [options] [table];
# option:
if exists

基本数据类型

整数

  • tinyint 1字节
  • smallint 2字节
  • mediumint 3字节
  • int 4字节
  • bigint 8字节

小数

  • float 4字节
  • double 8字节
  • decimal 高精度

字符串

  • char 255
  • varchar 65535
  • tinytext 2^8-1
  • text 2^16-1

时间

  • data YYYY-MM-DD
  • time HH:mm:ss
  • datatime YYYY-MM-DD HH:mm:ss
  • timestamp 1970.1.1到今毫秒
  • year 年

增删改查

1
2
3
4
# 插一个(列名不写就是全部)
insert into [table]([列名]) values ('[value]');
# 插多个
insert into [table]([列名1],[列名2]) values ('[value1]','[value2]'),('[value1]','[value2]');

1
2
3
4
# 删一个
delete from [table] where [自行判断];
# 清表
truncate [table];

1
2
3
update [table] set [设置的值] where [自行判断]
# 设置的值:
[列名]=[value] # 多个用逗号隔开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
select [distinct去重] [表达式] from [table] [连接表] where [自行判断] group by [列名] having [自行判断] order by [列名] [asc/desc] limit [起始行] [显示行];
# 表达式
* # 全部
[列名] # 多个逗号隔开
[表达式] as [别名] # 起别名
current_data() # 获取当前日期
now() # 获取当前日期+时间
localtime() # 本地日期+时间
sysdate() # 系统时间
year(now()) # 获取年,类推月日时分秒
user() 或 system_user() # 用户
version() # 版本
concat([表达式],[表达式])# 字符串拼接(支持多个)
abs([表达式]) # 绝对值
ceiling([表达式]) # 向上取整
floor([表达式]) # 向下取整
rand() # 0~1随机数
sign([表达式]) # -1,0,1返回符号
char_length([表达式]) # 字符串长度
insert() # 插入 用到再查
lower([表达式]) # 转小写
upper([表达式]) # 转大写
instr([表达式],[表达式]) # 第一次出现索引
replace() # 替换 用到再查
substr() # 截取 用到再查
reverse() # 反转 用到再查
# 连接表
inner join [table] # 表中至少一个匹配,返回行
right join [table] # 返回右表值,即使左表没有
left join [table] # 返回左表值,即使右表没有
# 例子 (on 或 where) [s.no] = [r.no]
# order by
asc # 升序
desc # 降序

聚合函数(select后)

1
2
3
4
5
count([表达式]) # 表达式: *或1 不忽略null 列名忽略null
sum([列名]) # 总和
avg([列名]) # 平均分
max([列名])
min([列名])

where

  • =
  • <> 或 !=
  • ‘>=
  • <
  • ‘>=
  • <=
  • and 或 &&
  • or 或 ||
  • not 或 !
  • [value] is null 分割 [value] is not null
  • [value] between [value] and [value]
  • [value] like [value] // %任意不限长度 _任意单字符
  • [value] in [value]

事务没啥必要看一乐吧

1656853152683

mysql编程没啥必要看一乐吧

1656856342909

数据库备份

导出

1
mysqldump -h[ip] -uroot -p[password] [database] [table] >d:/a/a.sql

导入

1
source [path];

JDBC(嘎嘎重要)(经典白学,年轻人啊)

connection连接数据库

1
2
3
4
5
6
7
String url = "jdbc:mysql://49.232.139.28:3306/website?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "password";

// connection代表数据库
Connection connection = DriverManager.getConnection(url,username,password);

statement执行类(sql注入,不安全)

1
2
3
4
5
6
// 连接
Statement statement = connection.createStatement();

statement.executeQuery(); // 查询
statement.execute(); // 通用
statement.executeUpdate(); // 更新插入删除

prepareStatement执行类(嘎嘎安全)

创建

1
2
3
4
5
6
// 创建
PrepareStatement [prepareStatement] = [connection].prepareStatement([sql语句]);
// sql:问号占位
例:"insert into user(name) values (?)"
// 返回sql时间
(new java.sql.Date(new Date().getTime))

传参

1
2
3
4
5
[prepareStatement].setObject([index],[value]);
[prepareStatement].setInt([index],[value]);
[prepareStatement].setString([index],[value]);
// set[xxx]类推Float,Date等等
// index从1开始

执行

1
2
3
4
5
6
7
8
[prepareStatement].executeUpdate(); // 更新
[prepareStatement].execute(); // 通用
[prepareStatement].executeQuery(); // 查询
// 返回值类型int,代表受影响行数
int i = [上面那玩应];
if (i > 0) {
sout("成功");
}

resultSet接收返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 例子
ResultSet resultSet = statement.executeQuery(sql);

// 接收表类型(数组)
resultSet.getObject(); // 未知
resultSet.getString(); // 字符串
resultSet.getInt(); // 整形
还有Float,Date,等等

// resultSet读取值
resultSet.beforeFirst(); // 到最前面
resultSet.afterLast(); // 到最后面
resultSet.next(); // 下一个
resultSet.previous(); // 上一个
resultSet.absolute([row]); // 到指定行

释放资源

主从复制

问题

函数多个可选参数+默认值

挺好看的,挺好用的,我的评价是,目前最优雅写法

1
2
3
4
5
function createVerticalCircle(radius: number, {
color = '#ffffff',
opacity = .5,
angle = 0
} = {}) {

three.js入门

安装

1
npm install three

渐变色

改一下颜色和高度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
let c = new THREE.Color('#09e7ea');
const material = new THREE.ShaderMaterial({
uniforms: {
targetColor:{value:new THREE.Vector3(c.r,c.g,c.b)},
height: { value: 10},
},
side: THREE.DoubleSide,
transparent:true,
//depthTest:false,
depthWrite:false,
vertexShader: [
"varying vec3 modelPos;",
"void main() {",
" modelPos = position;",
" gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join("\n"),
fragmentShader: [
"uniform vec3 targetColor;",
"uniform float height;",
"varying vec3 modelPos;",

"void main() {",
" gl_FragColor = vec4(targetColor.xyz,(1.0 - modelPos.y/height)*(1.0 - modelPos.y/height));",
"}"
].join("\n")
});

边缘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 椭圆
const ellipseShape = new THREE.Shape();
ellipseShape.absellipse(0, cardProps.value.height / -2, cardProps.value.width / 2, cardProps.value.height / 4, 0, Math.PI * 2, false, 0);
const ellipseGeometry = new THREE.ShapeGeometry(ellipseShape);
const ellipseMaterial = new THREE.MeshBasicMaterial({
color: '#22e3e3',
transparent: true,
opacity: 0.3,
depthTest: false,
});
// 边
const ellipseEdgeGeometry = new THREE.EdgesGeometry(ellipseGeometry);
const ellipseEdgeMaterial = new THREE.LineBasicMaterial({
color: '#22e3e3',

});
const ellipse = new THREE.Mesh(ellipseGeometry, ellipseMaterial);
const ellipseEdge = new THREE.LineSegments(ellipseEdgeGeometry, ellipseEdgeMaterial);
imagePlane.add(ellipse, ellipseEdge);

问题

重叠闪烁

深度测试(depthTest)

  1. 当启用深度测试时(默认启用)渲染器会根据像素深度渲染像素
  2. 深度相同时不到渲谁
  3. 闪烁开始。。
  4. 关闭深度测试
  5. 重贴像素一起计算像素值(会变色)
1
2
3
4
5
6
7
8
9
const iconGeometry = new THREE.PlaneGeometry(1, 1);
const iconMaterial = new THREE.MeshBasicMaterial({
map: textureLoader.load(images[i]),
transparent: true,
opacity: 1,
side: THREE.TwoPassDoubleSide,
depthTest: false, // 关闭深度测试解决重叠闪烁
});
const iconMesh = new THREE.Mesh(iconGeometry, iconMaterial);

组内坐标是相对坐标

1
2
3
4
// 原
item.position.distanceTo(camera.position)
// 改成
item.localToWorld(new THREE.Vector3(0, 0, 0)).distanceTo(camera.position)

字体居中

1
2
3
4
5
6
7
8
9
10
11
12
13
const fontLoader = new FontLoader();
fontLoader.load('font/gentilis_regular.typeface.json', font => {
const textGeometry = new TextGeometry('114514', {
font: font,
height: cardProps.value.height / 3 * 0.05,
size: cardProps.value.width / 2 * 0.5,
});
textGeometry.center(); // 字体居中
const textMaterial = new THREE.MeshBasicMaterial({color: 0xffffff});
const textMesh = new THREE.Mesh(textGeometry, textMaterial);
textMesh.position.set(cardProps.value.width / -2, cardProps.value.height / 3 * -1.75, 0.0);
imagePlane.add(textMesh);
});

问题

学校服务器

1
2
3
Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory 
# 解决方法
# 直接服务器拷一份过去

pytorch入门

安装anaconda

官网下载安装,安装时加上path

准备环境

创建环境

1
2
# 创建环境
conda create -n [namespace] python=[3.7] -y

安装pytorch

复制以下命令到anaconda prompt

1
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

1694159416448

安装jupyter

1
2
3
4
5
pip install jupyter
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
pip install --user jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

启动

1
2
3
4
5
jupyter notebook
# 没有出能写代码的地方怎么办
conda install -c conda-forge nb_conda
#
conda install nb_conda # 确实牛逼

v-md-editor入门

放script setup里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { createApp } from 'vue';
import VMdPreview from '@kangc/v-md-editor/lib/preview';
import '@kangc/v-md-editor/lib/style/preview.css';
import githubTheme from '@kangc/v-md-editor/lib/theme/github.js';
import '@kangc/v-md-editor/lib/theme/style/github.css';

// highlightjs
import hljs from 'highlight.js';

VMdPreview.use(githubTheme, {
Hljs: hljs,
});

const app = createApp(/*...*/);

app.use(VMdPreview);

template里

1
<v-md-preview :text="blogText"/>

别人的世界

启动参数优化

1
2
3
4
5
6
title Isekai Lifes Fantasy
java -Xms6G -Xmx6G -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8 -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -jar forge-1.16.5-36.2.0.jar
java -Xms6G -Xmx6G -server -jar forge-1.16.5-36.2.0.jar nogui
java -Xms6G -Xmx6G -server -jar forge-1.16.5-36.2.0.jar nogui
pause

默认启动项

1
java -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8 -Dfml.queryResult=confirm -server -jar forge-1.12.2-14.23.5.2860.jar nogui