Linux知识
基础知识
ip addr show显示当前虚拟机ip,或者ubuntu设置里面可以直接看,win主机可以直接ping通sudo usermod -aG docker admin01将用户添加进docker用户组,之后用docker命令就不用sudo了
docker 使用
docker 官网可以查各个官方维护的镜像以及参数
docker 命令
1 | |
1 | |
如果要再运行一个 Mysql 容器,就起个别名,然后因为宿主机 3306 一斤背上一个容器占用,就改成 3307:3306,依旧映射到容器的 3306 端口(MySql 默认端口是 3306)
docker 数据卷
通过数据卷将容器内的目录和 docker 数据卷的目录实现双向绑定,修改宿主机的数据,容器的数据也会跟着改变docker run -d -v mysql_volume:/var/lib/mysql mysql -v 数据卷名称:容器目录的映射docker volume ls 列出数据卷
docker 本地目录挂载
基于宿主机目录实现 MySQL 是数据目录,配置文件,初始化脚本的挂载,目录要查官方镜像文档
如果前面以/开头就是宿主机目录docker run -d -v /root/data/mysql:/var/lib/mysql mysql -v 宿主机目录:容器目录的映射
自定义镜像
- 镜像是分层的,基础环境、系统函数库等是基础镜像,多个镜像可以共享基础镜像层,比如 Ubuntu 和 JDK 都有官方做的基础镜像
- 自定义镜像可以用
Dockerfile来描述镜像结构 - 最后用
docker build -t 自定义镜像名称:版本号 Dockerfile_路径来构建镜像
docker 网络
- docker 所有容器都是用 bridge 方式连接到一个网桥上
- 172.17.0.1/16 是默认的网段,前面是 docker0 的 ip 地址
自定义网络docker network create -d 自定义网络名称 建立自定义网络docker network connect 自定义网络 容器名称 添加容器到自定义网络
部署项目
部署后端
- 项目打成 jar 包,构建 docker 镜像,然后都放入 Linux 里面的一个文件夹
- 运行 docker build 构建镜像
docker build -t 自定义镜像名称:版本号 . - 通过 docker run 运行新创建的镜像
docker run -d -p 8080:8080 --network 自定义网络名称 自定义镜像名称:版本号
部署前端
创建一个新的 nginx 容器,挂载配置文件和静态页面docker run -d -p 18080:18080 -p 18081:18081 -v /root/data/nginx/html:/usr/share/nginx/html -v /root/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf --network 和后端相同的网络名称 nginx
DockerCompose
通过一个单独的 docker-compose.yml 模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的 Docker 容器的快速部署,就比如把上面的前端和后端直接放在一起
docker compose 的命令格式docker compose [OPTIONS] [COMMAND]docker compose up -d一键启动docker compose down一键停止
总结docker部署项目全流程
- 创建一个 Dockerfile 文件,用来声明项目结构
- 运行 docker build 通过这个Dockerfile 构建镜像
- 运行 docker run 运行镜像
- docker compose则是一个多镜像组合启动文件,可以一键启动所有镜像
idea中集成docker
首先下载wsl2(windos subsystem for linux),然后去docker官网下载docker桌面端,然后启动,docker的加速去看配置bug
然后idea中下载docker的插件,在设置中配置docker可执行文件的位置,如C:\Program Files\Docker\Docker\resources\bin\docker.exe
识别到了啊,但是连接没成功,还是先不尝试了,docker还是配置在Linux里面好
使用 MobaXterm 连接 Ubuntu
Ubuntu 桌面版默认不安装 SSH 服务,先安装并启动
1
2
3
4
5
6
7
8
9# 安装 OpenSSH 服务器
sudo apt update
sudo apt install openssh-server -y
# 启动 SSH 服务
sudo systemctl start ssh
# 设置开机自启(可选)
sudo systemctl enable ssh查看 Ubuntu 虚拟机的 IP 地址
1
2
3ip a
# 或
hostname -I在 MobaXterm 中连接 Ubuntu
打开 MobaXterm(Windows 上)
点击左上角 Session(会话)
选择 SSH
填写:- Remote host: Ubuntu 虚拟机的 IP(如 192.168.5.100)
- Port: 22(默认 SSH 端口)
- Username: 你的 Ubuntu 用户名(如 ubuntu 或 admin01)
点击 OK
首次连接会提示确认密钥,点 Accept
输入密码 → 成功登录!连接之后就能像 windows 的文件夹一样操作 Ubuntu 了,也能互相传文件
使用 MobaXterm 连接虚拟机的redis
- docker中运行多个redis实例
- mobaxterm右键标签页复制标签,用来创建多个终端
- 每个终端执行
redis-cli -p 6380就连接上redis实例了
【保存终端到会话夹】
- 新建连接填写IP、SSH端口(22)、用户名
- 勾选底部的宏里面,插入一行文本,输入
redis-cli -p 6380
顺便记录一下运行redis实例的命令:
1 | |
启动和停止redis实例
- 运行在docker容器中直接用run和start启动,单独的才用redis-server启动,run的时候就已经用过redis-server了
docker run redis redis-server ... - 连接redis客户端
redis-cli -p 6380(不是开启) - 关掉redis实例
docker stop redis-node1或者redis-cli -p 6380 shutdown,他们都会停止docker - 再启动就要用
docker start redis-node1因为是运行在docker的,所以不能用redis-server启动
建立redis sentinel集群
如果用docker,外部的sentinel监控内部的redis实例,它监控的host实际上是docker容器的ip,所以选举新主节点的时候会出问题
在docker中运行sentinel
得挂载配置文件,等之后再用吧
或者建立一个docker网络,当初运行的时候就全加进来
独立运行sentinel
新建一个文件夹用来存放每个sentinel的配置文件
1
2mkdir -p ~/redis-sentinel
cd ~/redis-sentinel创建一个文件夹存放当前哨兵的配置文件,也作为他的工作目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17mkdir -p s1 # 先有目录才能写入文件,不然保存时会报错
vi s1/sentinel.conf
# 输入一下内容后:wq保存并退出
port 26380
bind 0.0.0.0
daemonize no # 是否在为后台运行
logfile "sentinel1.log" # 日志文件
dir ./
# 监控名为 mymaster 的主节点
sentinel monitor mymaster 127.0.0.1 6380 2
# 可选:调整超时时间(单位毫秒)
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1启动每一个sentinel实例,可以用mobaxterm左上角的多执行来同时运行命令,或者排布终端
1
2
3redis-sentinel s1/sentinel.conf
redis-sentinel s2/sentinel.conf
redis-sentinel s3/sentinel.conf配置从节点的“对外宣告地址”(关键!)
这个是哨兵里面选举时用到的方法 1:启动时通过命令行设置(推荐)
1
2
3
4
5
6
7
8
9docker run -d \
--name redis-slave \
-p 6382:6382 \
redis redis-server \
--port 6382 \
--bind 0.0.0.0 \
--replica-announce-ip 192.168.5.100 \
--replica-announce-port 6382 \
--protected-mode no方法 2:动态设置(如果已运行)
连接的是容器内的端口,也就是63791
2docker exec redis-node2 redis-cli -p 6379 CONFIG SET replica-announce-ip 192.168.5.100
docker exec redis-node2 redis-cli -p 6379 CONFIG SET replica-announce-port 6382✅ 验证:
1
2# 在主节点执行
docker exec redis-master redis-cli -p 6380 INFO REPLICATION
ubuntu设置静态ip
每次进虚拟机ip都会变,很麻烦就设置一个静态ip
查看网关
ip route show default编辑Netplan配置文件
sudo nano /etc/netplan/00-installer-config.yaml
删除原内容,添加以下内容1
2
3
4
5
6
7
8
9
10
11
12
13network: # 整个网络配置的根节点
version: 2 # 使用 Netplan 的第 2 版语法(当前标准)
ethernets: # 定义以太网接口(有线网卡)
ens33: # 指定网卡名称(您的主网卡叫 ens33)
dhcp4: false # ❌ 关闭 IPv4 的 DHCP 自动获取(即不用动态 IP)
addresses:
[192.168.5.100/24] # ✅ 手动指定静态 IP 和子网掩码
# /24 = 子网掩码 255.255.255.0
routes: # 配置路由规则
- to: default # "default" 表示默认路由(即访问外网的出口)
via: 192.168.5.1 # 数据包通过这个网关转发(通常是路由器 IP)
nameservers: # 配置 DNS 服务器(用于域名解析,如访问 baidu.com)
addresses: [8.8.8.8, 114.114.114.114] # 使用 Google DNS + 国内公共 DNS修复权限 + 应用配置
sudo chmod 600 /etc/netplan/00-installer-config.yamlsudo netplan apply