软件开发培训班笔记
## 大纲
### 第一周
#### 一、MySQL安装
#### 二、node与ghost安装
#### 三、nginx安装
### 四、配置csr证书
### 第二周
#### 一、安装nodehttp://t.csdnimg.cn/F0bcF
#### 二、配置vue下载镜像
### 第三周
#### 一、docker安装
#### 二、MySQL一主二从
#### 三、docker 安装redis
### 第四周
#### 一、安装jenkins
#### 二、课堂笔记
### 第五周
#### 一、Jenkins相关配置
#### 二、git bash
第一周
一、MySQL安装
1.进入MySQL
mysql -u root -p
2.安装MySQL,进行修改密码。(root为用户名,123456为密码)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
3.刷新
flush privileges;
二、node与ghost安装
1.node安装
wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.gztar -zxvf node-v18.16.0-linux-x64.tar.gzcd ./node-v18.16.0-linux-x64/ln -s /root/node-v18.16.0-linux-x64/bin/npm /usr/local/bin/ln -s /root/node-v18.16.0-linux-x64/bin/node /usr/local/bin/
2.ghost安装
安装Ghost命令行工具Linux> sudo npm install ghost-cli\@latest -g
①.创建ghost安装目录并授权mkdir -p /var/www/ghostchown yanyljava:yanyljava /var/www/ghostchmod 777 /var/www/ghost
②.安装ghostsu - yanyljava # 切换用户cd /var/www/ghost # 切换到指定目录ghost install # 安装ghost setup #启动ghostghost config url https://47.99.35.213
三、nginx安装
1.安装权限mkdir -p /etc/nginx/sites-availablemkdir -p /etc/nginx/sites-enabled/mkdir -p /home/yanyljava/content
2.安装nginx nginx -t
3.重启运行 nginx -s reloadnginx -s stop # 停止运行nginxnginx restart # 重启nginx应用
配置 /etc/nginx/nginx.conf
nginx.conf文件配置如下:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name 123.57.164.198;
rewrite ^(.*)$ https://$host$1 permanent;
#root /usr/share/nginx/html;
root /var/www/ghost/content;
#Load configuration files for the default server block.
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
#include /etc/nginx/default.d/*.conf;
location /{
proxy_pass http://127.0.0.1:2368;
}
client_max_body_size 50m;
}
# Settings for a TLS enabled server.
#
server {
# listen 443 ssl http2;
listen 443 ssl;
listen [::]:443 ssl;
# listen [::]:443 ssl http2;
# server_name _;
server_name 47.99.35.213;
# root /usr/share/nginx/html;
root /var/www/ghost/content;
#
ssl_certificate "/etc/nginx/SSL/MyBlobStore/SSL.crt";
ssl_certificate_key "/etc/nginx/SSL/MyBlobStore/SSL.KEY.unsecure";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
location / {
root html;
index index.html index.htm;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
5.passwd命令 | 菜鸟教程:https://www.runoob.com/linux/linux-comm-passwd.html
四、配置CSR证书
- CSR在线生成工具:
https://myssl.com/csr_create.html - CSR查看:
https://myssl.com/csr_decode.html - 证书查看:
https://myssl.com/cert_decode.html - 使用OpenSSL生成SSL.crt证书
openssl rsa -in SSL.KEY -out ./SSL.KEY.unsecureopenssl x509 -req -days 365 -in SSL.csr -signkey SSL.key -out SSL.crt
第二周
相关上课文档
有关于vue和node的安装如下:
nvm详细安装步骤以及使用(window10系统)_nvm 安装_小何同学要加油的博客-CSDN博客:
https://blog.csdn.net/Anony_me/article/details/124153201
Window版本的nvm下载安装以及配置 - node - 乐享WEB技术栈:
http://yehbe0qp7.qdxiaochuan.com/?id=558
nvm install [version] // 安装node, version是特定版本也可以是最新稳定版本latest
nvm list available // 显示已安装的列表。可选参数available,显示可安装的所有版本。list可简化为ls
nvm ls available // 显示已安装的列表。可选参数available,显示可安装的所有版本。list可简化为ls
npm list -g --depth 0 //查看自己本地全局环境下都已经下载哪些模块
npm install -g cnpm --registry=https://registry.npm.taobao.org //将npm镜像改为淘宝的镜像cnpm,可以提高下载速度
npm config list
npm config ls //list可简化为ls
npm config ls -l //Run `npm config ls -l` to show all defaults.
vue系列(一)使用UI创建新项目超详细版:
https://baijiahao.baidu.com/s?id=1736486285983532889&wfr=spider&for=pc
//安装VUE3.X及以上的版本
npm install -g @vue/cli
//如果安装2.X错误可进行卸载
npm uninstall -g vue-cli
//安装WebPack打包工具
npm install -g webpack
//创建VUE项目并使用WebPack进行打包发布
vue init webpack vue-demo
node -v
npm -v
vue -V
where node
npm install -g vue // 安装全局vue
npm install -g vue/cli // 安装的Vue3.X及以上的版本 不是最新版本
npm install -g @vue/cli // 安装vue脚手架 ,加一个@是最新的版本
vue ui
一、安装node
- nvm 的安装版本
nvm install [version]nvm list(ls可以替换list)(显示已下载版本信息) - 下载全局模块
npm list -g --depth 0
将npm镜像改为淘宝的镜像cnpm,可以提高下载速度npm install -g cnpm –registry=https://registry.npm.taobao.org
npm install -g \@vue/cli#安装VUE3.X及以上的版本
- 查看版本信息
node -v
npm -v
vue -V
where node
二、配置vue下载镜像
- 位置:C:\Users\xxx\AppData\Roaming\nvm
打开文件名称:settings.txt
修改内容:添加:
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/(提高下载速度) - 安装vue
安装全局vuenpm install -g vuenpm install -g @vue/cli
打开vuevue ui
第三周
上课相关文档
第三周上课文档
部署并使用Docker-阿里云帮助中心:
https://help.aliyun.com/document_detail/2341651.html?spm=5176.28008736.J_7597446870.d10000006670_1.a92e3e4dO4sYR7&pipCode=savingplan&goodsId=10000006670&scm=20140722.M_10000006670.P_121.MO_2230-ID_10000006670-MID_10000006670-CID_0-ST_8726-V_1
资源编排管理控制台:
https://ros.console.aliyun.com/cn-hangzhou/stacks/00bca8bc-6bb6-43ff-9df5-30d09904e0c6
云服务器管理控制台:
https://ecs.console.aliyun.com/?spm=5176.2020520146.0.0.20ee20681Dqooz#/cloud-assistant/region/cn-hangzhou/commandResult?invokeId=t-hz040y5uigfnj7k
Linux常用路径地址参考:
/etc
/var/lib/docker
/usr/libexec/docker
/proc
/root/docker/volumes/etc/mysql
Linux> docker info
Linux> docker --version
Linux> docker images
Linux> docker images -aq
Linux> docker ps -a
Linux> docker ps -aq
Linux> docker search nginx
Linux> docker pull nginx:latest
Linux> docker search tomcat
Linux> docker pull tomcat:9
Linux> docker search mysql:latest
Linux> docker pull mysql
Linux> docker run --name mysql --restart always -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3306:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest(废弃,已过时~)
Linux> docker run --name mysql -p 3307:3306 -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest(废弃,已过时~)
Linux> docker ps -a
Linux> docker stop mysql
Linux> docker rm mysql
Linux> docker ps -a
Linux> docker exec -it mysql /bin/bash
Linux> mkdir -p /root/docker/volumes/etc/mysql/conf.d
Linux> mkdir -p /root/docker/volumes/etc/mysql/my.cnf.d
Linux> docker logs mysql
Linux> docker cp mysql:/etc/mysql/my.cnf /root/docker/volumes/etc/mysql/my.cnf(路径错误✖,已废弃,已过时~)
Linux> docker cp mysql:/etc/my.cnf /root/docker/volumes/etc/mysql/my.cnf
Linux> docker cp mysql:/etc/my.cnf /root/docker/volumes/etc/my.cnf(废弃,已过时~)
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/mysql:/etc/mysql -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest
Linux> docker run --name mysql --restart always -p 3307:3306 -v /root/docker/volumes/etc/mysql/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/mysql/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/mysql/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riBKj8zM -d mysql:latest
docker 查看镜像所有tag_百度搜索:
https://www.baidu.com/s?wd=docker+查看镜像所有tag&ie=UTF-8&tn=62095104_17_oem_dg
获取docker镜像的tag列表 - 走看看:
http://t.zoukankan.com/xlovepython-p-14479334.html
获取docker镜像的tag列表 - s。 - 博客园:
https://www.cnblogs.com/xlovepython/p/14479334.html
获取docker镜像的tag列表
Linux> wget -q https://registry.hub.docker.com/v1/repositories/nginx/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> wget -q https://registry.hub.docker.com/v2/repositories/library/nginx/tags/ -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> curl -s https://registry.hub.docker.com/v1/repositories/nginx/tags | json_reformat | grep name | awk '{print $2}' | sed -e 's/"//g'(亲测无效~)
Linux> wget -q https://cobx09bv.mirror.aliyuncs.com/v1/repositories/nginx/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
Linux> wget -q https://cobx09bv.mirror.aliyuncs.com/v2/repositories/library/nginx/tags/ -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}'(亲测无效~)
ubuntu
centos
官方认证的仓库url
https://registry.hub.docker.com/v2/repositories/library/$Repo/tags/
$Repo
eg: ubuntu
个人仓库url
https://registry.hub.docker.com/v2/repositories/$User/$Repo/tags/
$User/$Repo
eg: jenkins/jenkins
MySQL主从复制(一主两从)架构搭建:
master主机:root password: riCXT8zM
Linux> docker run --name master --restart always -p 3308:3306 -v /root/docker/volumes/etc/master:/etc/mysql -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riCXT8zM -d mysql:latest
Linux> docker cp master:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
Linux> docker ps -a
Linux> docker stop master
Linux> docker rm master
Linux> docker ps -a
Linux> docker run --name master -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name master -p 3308:3306 -v /root/docker/volumes/etc/master/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/master/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/master/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riCXT8zM -d mysql:latest
slave01从机:root password: riDYQ8zM
Linux> docker run --name slave01 --restart always -p 3309:3306 -v /root/docker/volumes/etc/slave01:/etc/mysql -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riDYQ8zM -d mysql:latest
Linux> docker cp slave01:/etc/my.cnf /root/docker/volumes/etc/slave01/my.cnf
Linux> docker ps -a
Linux> docker stop slave01
Linux> docker rm slave01
Linux> docker ps -a
Linux> docker run --name slave01 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name slave01 -p 3309:3306 -v /root/docker/volumes/etc/slave01/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave01/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave01/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riDYQ8zM -d mysql:latest
slave02从机:root password: riEZG8zM
Linux> docker run --name slave02 --restart always -p 3310:3306 -v /root/docker/volumes/etc/slave02:/etc/mysql -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riEZG8zM -d mysql:latest
Linux> docker cp slave02:/etc/my.cnf /root/docker/volumes/etc/slave02/my.cnf
Linux> docker ps -a
Linux> docker stop slave02
Linux> docker rm slave02
Linux> docker ps -a
Linux> docker run --name slave02 -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql(废弃,已过时~)
Linux> docker run --name slave02 -p 3310:3306 -v /root/docker/volumes/etc/slave02/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave02/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave02/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riEZG8zM -d mysql:latest
Linux> docker exec -it slave01 /bin/bash
Linux> cat /etc/my.cnf
Linux> cat /etc/mysql/my.cnf(废弃,已过时~)
Linux> sed -i '$a server_id=2' /etc/my.cnf
Linux> sed -i '$a server_id=2' /etc/mysql/my.cnf(废弃,已过时~)
Linux> docker restart slave01
mysql> show variables like 'server_id';
Linux> docker exec -it slave02 /bin/bash
Linux> cat /etc/my.cnf
Linux> cat /etc/mysql/my.cnf(废弃,已过时~)
Linux> sed -i '$a server_id=3' /etc/my.cnf
Linux> sed -i '$a server_id=3' /etc/mysql/my.cnf(废弃,已过时~)
Linux> docker restart slave02
mysql> show variables like 'server_id';
mysql> show master status;
change master to
master_port=3308,
master_user='root',
master_password='riCXT8zM',
master_host='172.20.16.116',
master_log_file='binlog.000003',
master_log_pos=157;
#再次登录从机MySQL数据库
#Linux> docker exec -it slave01 bash
Linux> docker exec -it slave01 /bin/bash
mysql> mysql -uroot -priDYQ8zM
Linux> docker exec -it slave02 /bin/bash
mysql> mysql -uroot -priEZG8zM
#确认是否OK server_id
show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
1 row in set (0.01 sec)
#此时在【从机端】执行上述已经修改后的change master to语句
# 开启主从服务
mysql> start slave;
# 查看是否配置成功?
mysql> show slave status \G;
如下参数都为YES======>恭喜配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
此时在主机MySQL端分别执行增、删和改
验证主从功能的实现
Linux> docker run --name tomcat09 --restart always -p 8080:8080 -v /root/docker/volumes/tomcat/webapps:/usr/local/tomcat/webapps -d tomcat:9
HTTP Server Test Page:
http://47.99.35.213:8080/hellow/index.html
Linux> gcc mycommand.c -o mycommand
Linux> ./mycommand
Linux> ./mycommand 123 456 789
Linux> export PATH="$PATH:/root/mycommand"
Linux> echo $PATH
Linux> printenv
Linux> printenv PATH
Linux> echo $PATH
在Linux操作系统当中,请问以下哪几项命令 可以正确地打印出当前PATH的环境变量?
A、printenv PATH
B、printenv $PATH
C、echo $PATH
D、echo PATH
正确答案是(?)_
在Windows操作系统当中,请问以下哪几项命令 可以正确地打印出当前PATH的环境变量?
A、echo PATH
B、echo $PATH
C、%PATH%
D、PATH
正确答案是(?)_
课外延伸 参考链接:
程序员如何把控自己的职业:
https://mp.weixin.qq.com/s/GG2E9tsESvdRr7WLCuN7VQ
金三银四你准备好了吗,一份满级面试题送上:
https://mp.weixin.qq.com/s/IXYwOrbqiYsWXOqSOrz_jQ
为什么nginx比apache更强:
https://mp.weixin.qq.com/s/OqjWno0JX0ryAYdZwVZU8A
排查服务器是否被入侵的11个关键步骤:
https://mp.weixin.qq.com/s/BM_wTI27XMcEefIisokTsg
Linux 中 root 与 sudo 的用法与区别,居然这么多人搞不清楚。。。:
https://mp.weixin.qq.com/s/v4hSLIoh8oPlIWp2jo2zcg
linux三剑客(grep,sed,awk):
https://mp.weixin.qq.com/s/8FbN7KxO8kRqT5vkJqEKug
k8s 和 Docker 关系简单说明:
https://mp.weixin.qq.com/s/Im-tti3iRE90F5t_uZnmUw
sudo 授权需谨慎,否则亲人两行泪!6 个超实用使用技巧:
https://mp.weixin.qq.com/s/EPNOwkAVg6h3Y_aqtGz1kA
10分钟快速搭建个人博客、文档网站!:
https://mp.weixin.qq.com/s/VwYcxkMeg4-EASfN1wvKZg
5 款顶级 Docker GUI 工具!免费又好用:
https://mp.weixin.qq.com/s/dsAsswKRqEiSCUvJF33nmw
聊聊Linux中的环境变量:
https://mp.weixin.qq.com/s/cjYv_1Hk33J9_aixBr0_hw
在Linux下写一个自己的命令:
https://mp.weixin.qq.com/s/TEuwgbFXNw-KBU_gwos5Yw
# start~
datadir=/var/lib/mysql
# 是否开启mysql日志 0:关闭(默认值) 1:开启
general-log=1
# mysql 日志的存放位置
general_log_file="/var/lib/mysql/logs/master.log"
slow-query-log=1
slow_query_log_file="/var/lib/mysql/logs/master-slow.log"
long_query_time=10
# Error Logging.
log-error="/var/lib/mysql/logs/master.err"
# end~
Linux> docker ps -a
Linux> docker stop slave01
Linux> docker stop slave02
Linux> docker stop master
Linux> docker start master
Linux> docker logs master
Linux> docker start slave01
Linux> docker start slave02
Linux> ocker ps -a
Linxu> cd /root/docker/volumes/var/lib/master/logs
Linxu> ll
>>
total 12
-rw-r----- 1 systemd-coredump input 1592 Nov 1 17:06 master.err
-rw-r----- 1 systemd-coredump input 864 Nov 1 17:06 master.log
-rw-r----- 1 systemd-coredump input 180 Nov 1 17:06 master-slow.log
恭喜MySQL主从复制(一主两从)读写分离架构集群日志 开启成功!
Linux常用路径地址参考:
/root/docker/volumes/var/lib/master/logs
/root/docker/volumes/var/lib/mysql
/usr/libexec/docker
/var/lib/docker/volumes
/root/docker/volumes/tomcat/webapps
/etc
一、docker安装
- 配置网站:
https://help.aliyun.com/document_detail/2341651.html

- dockeer 安装MySQL,3307接口方法以及注意事项详细版本(
http://t.csdnimg.cn/hsDy9)(自己感觉网上的合适一点点) - MySQL软件尝试连接服务器中的docker的MySQL使用设置的3307窗口
连接名: 阿里云ESC服务器-Docker容器
主机: 123.57.164.198
端口: 3307
用户名: ROOT
密码: Docker设置密码xxx

二、MySQL一主二从
- 建立主数据库master密码123456,端口号3308(server_id=1)
docker run --name master --restart always -p 3308:3306 -v /root/docker/volumes/etc/master:/etc/mysql -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp master:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
docker ps -a
docker stop master
docker rm master
docker ps -a
docker run --name master -p 3308:3306 -v /root/docker/volumes/etc/master/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/master/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/master/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- 建立副数据库slave01密码123456,端口号3309(server_id=2)
docker run --name slave01 --restart always -p 3309:3306 -v /root/docker/volumes/etc/slave01:/etc/mysql -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp slave01:/etc/my.cnf /root/docker/volumes/etc/slave01/my.cnf
docker ps -a
docker stop slave01
docker rm slave01
docker ps -a
docker run --name slave01 -p 3309:3306 -v /root/docker/volumes/etc/slave01/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave01/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave01/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- 建立副数据库slave02密码123456,端口号3310(server_id=3)
docker run --name slave02 --restart always -p 3310:3306 -v /root/docker/volumes/etc/slave02:/etc/mysql -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker cp slave02:/etc/my.cnf /root/docker/volumes/etc/slave02/my.cnf
docker ps -a
docker stop slave02
docker rm slave02
docker ps -a
docker run --name slave02 -p 3310:3306 -v /root/docker/volumes/etc/slave02/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave02/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave02/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
- 展示server_id信息
docker restart slave02
①docker exec -it slave01 /bin/bash
②mysql -u root -p
③mysql> show variables like 'server_id';(需要进入各数据库当中运行)
④show slave status \G;
如下参数都为YES======>恭喜配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- 只要命令只要在两个从的运行即可master可以不用运行
主的端口 #主的名称 #主的密码 #IP #和两个日志保持一致(show master status;)
change master to
master_port=3308,
master_user='root',
master_password='123456',
master_host='123.57.164.198',
master_log_file='binlog.000004',
master_log_pos=157;
- 其他代码块指令
docker exec -it slave01 /bin/bash
mysql -u root -p123456
start slave;
show slave status \G;
docker stop slave02
docker rm slave02
show variables like 'server_id';
reset slave;
三、docker 安装redis
- 安装命令
docker pull redis - 查看是否成功
docker images - 启动redis:
reids-server .exe|.sh
第四周
一、安装jenkins
docker search jenkins查看版本信息docker pull jenkins/jenkins安装适合版本,本人以这个版本为例,pull一个Jenkins镜像- 查看是否安装成功,下载完通过
docker images可查看已下载的镜像 - 需要修改下目录权限,因为当映射本地数时,/data/jenkins_home/目录的拥有者为root用户,而容器jenkins用户uid 为 1000。我们创建一个jenkins目录
mkdir /home/jenkins_home、chown -R 1000:1000 /home/jenkins_home/ - 构建Jenkins容器(以下命令直接一次性全复制粘贴使用)
docker run \
-d \
--name jenkins \
-p 9999:8080 \
-p 8888:8888 \
-p 50000:50000 \
-v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8 \
-v /opt/apache-maven-3.5.0:/opt/apache-maven-3.5.0 \
-v /home/jenkins_home:/var/jenkins_home \
jenkins/jenkins

ps:(照片上的命令最后一点错误,以代码块上的为主)
docker exec -it jenkins bash得到相应密码记得保存相关密码cat /var/jenkins_home/secrets/initialAdminPassword
63cf912dfe604ab084b2e3f04a28e7b4

http://123.57.164.198:9999/替换自己的IP地址进行运行Jenkins进Web界面(自己的账号密码:UserXyz、123456xy.z)- 剩下的自己网上找,自己遇到一些问题,没有解决方案
二、课堂笔记
- 静态分配的典型运用的就是方法重载。在
main方法中,创建了一个Human类型的对象man和一个Human类型的对象woman。然后,通过sr对象调用了sayHello方法并传入了这两个对象作为参数。由于方法的重载是根据参数的静态类型进行选择的,因此无论man实际上是Man类的实例还是Woman类的实例,都会调用sayHello(Human guy)方法。
public class StaticDispatch {
static abstract class Human {}
static class Man extends Human {}
static class Woman extends Human {}
public void sayHello(Human guy) {
System.out.println("Hello, guy!");
}
public void sayHello(Man guy) {
System.out.println("Hello, gentleman!");
}
public void sayHello(Woman guy) {
System.out.println("Hello, lady!");
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
StaticDispatch sr = new StaticDispatch();
sr.sayHello(man); // Output: Hello, guy!
sr.sayHello(woman); // Output: Hello, guy!
}
}
- 在
Human类中定义了一个抽象方法sayHello(),并在Man和Woman子类中进行了重写。在main方法中,创建了一个Man对象赋给man变量,创建了一个Woman对象赋给woman变量。然后,通过man和woman对象调用了sayHello()方法。由于方法的动态分派是根据对象的实际类型进行选择的,所以无论变量类型是什么,实际上调用的都是对象所属类的重写方法。
public class DynamicDispatch {
static abstract class Human {
protected abstract void sayHello();
}
static class Man extends Human {
@Override
protected void sayHello() {
System.out.println("Man says hello!");
}
}
static class Woman extends Human {
@Override
protected void sayHello() {
System.out.println("Woman says hello!");
}
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
man.sayHello(); // Output: Man says hello!
woman.sayHello(); // Output: Woman says hello!
man = new Woman();
man.sayHello(); // Output: Woman says hello!
}
}
- 方法签名=方法名+参数列表
指令集
调用不同类型的方法,字节码指令集里设置了不同的指令,在jvm里面提供了5条方法调用字节码指令:
invokestatic:调用静态方法,解析阶段确定唯一方法版本invokespecial:实例构造器init方法、私有及父类方法,解析阶段确定唯一方法版本invokevirtual:调用所有虚方法invokeinterface:调用接口方法,在运行时再确定一个实现该接口的对象invokedynamic:先在运行时动态解析出调用点限定符所引用的方法,然后再执行该方法,在此之前的4条调用指令,分派逻辑是固化在Java虚拟机内部的,而invokedynamic指令的分派逻辑是由用户所设定的引导方法决定的。
❝
invokedynamic指令是Java7中增加的,是为实现动态类型的语言做的一种改进,但是在java7中并没有直接提供生成该指令的方法,需要借助ASM底层字节码工具来产生指令,直到java8的lambda表达式的出现,该指令才有了直接的生成方式。❞
- 普通类和抽象类的区别:
○ 抽象类不能被实例化,而普通类可以被实例化。
○ 抽象类中可以包含抽象方法,普通类不可以包含抽象方法。
○ 如果一个类继承了抽象类,则必须实现抽象类中的所有抽象方法,否则需要把该子类也声明为抽象类,而普通类则不需要这样做。
○ 抽象类可以拥有成员变量,可以含有构造方法和普通方法,普通类也具有这些特点。但抽象类的成员变量和方法不能声明为 private,static 和 final。
○ 抽象类可以有静态和非静态的成员变量和方法,普通类也具有这些特点。 - 根据补码的知识,Java中的整数类型(包括
byte)使用补码表示。在补码表示中,最高位(最左侧位)是符号位,0表示正数,1表示负数。
对于byte类型,它占用8个位(8 bits)。范围是从-128到127。因此,当你将max赋值为127时,其二进制表示为01111111。
然后,执行max+=1操作,相当于对max进行加1运算。在补码中,加1操作实际上是对二进制表示进行递增。现在让我们看看如何进行递增:
01111111 (127)
+ 00000001 (+1)
___________
10000000 (-128)
结果是10000000,这是一个负数。由于byte类型的取值范围是-128到127,所以它循环回到了负数的最小值-128。因此,经过max+=1操作后,max的值将变为-128。
这是因为在计算机中,溢出后的结果仍然保持在有效的范围内。所以,根据 补码 的规则,-128是byte类型的正确表示。
第五周
一、Jenkins相关配置
- gitee上的私钥密码
b577802d1fd065990d6ff4bc0beb171f兴趣班使用
二、git bash
- 设置用户名和邮箱
git config --global user.name yanyljava
git config --global user.email yanyljava@qq.com
- 查看
git config user.name
git config user.email

- 本地生成
公钥和私钥文件
在
git bash上输入如下:
ssh-keygen -t rsa -C "yanyljava@qq.com"
成功生成文件:id_rsa文件是私钥,id_rsa.pub是公钥,
存放路径为:C:\Users\Administrator/.ssh 目录下。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1c1NvkODu4rxflt5WH5DPtNrtQOObuufHpWVV1ther6V28t6CUzMcqRAkKyDY4+K4ZpxuuKoBiCDkng9HAnZyiEfD4QulLnVOEuVEmwRM5bycLlRo1UhmIAjuTGNvRZ1io0D95CbD58yWOKTclk9qwQDBtFV7lCiRp/DPRb0f88WC42reRfveD9QdjN7O11LswVqIcgRVUG85tzUxmemym5JoYLg5EZDfgMGBxRX2HKP1yY3CFwoKsTpbh/+38jJclZA/M0Qwy6bhCMfB3KQj+L3vnFr3A5dHGp8UsKdB6EcDejWmpbmxkmSkPt/qj0NrvyR4nvfWLSteiVpfyM8OjcfnAXp28bMn8DUhL3Y8UzGVvPbnfRg3vyDk9CAoQ4cjizG57wt1tLKRTItfPa6ueYVC11JrHnqvsQvtXeNpbFTVIisqKk58CnYvDf7kyBAIMpLXtu70BKY1AUtsrFniz/6wKJdofD5udMj4Fk1x+vtboaHm4zIJVEhjAOpGnfk= yanyljava@qq.com



评论