Linux知识

基础知识

  • ip addr show显示当前虚拟机ip,或者ubuntu设置里面可以直接看,win主机可以直接ping通
  • sudo usermod -aG docker admin01 将用户添加进docker用户组,之后用docker命令就不用sudo了

docker 使用

docker 官网可以查各个官方维护的镜像以及参数

docker 命令

1
2
3
4
5
6
7
8
9
10
docker pull         # 拉取镜像
docker images # 列出镜像
docker run # 创建并运行镜像
docker ps # 列出正在运行的容器 -a 列出所有容器
docker stop # 停止容器
docker start # 启动容器
docker rm # 删除容器
docker rmi # 删除镜像
docker build # 构建镜像
docker push # 推送镜像
1
2
3
4
5
6
7
8
9
10
11
# -d 后台运行
docker run -d \
# --name 容器名称,不能重复
--name mysql \
# -p 设置端口映射,宿主机端口:容器端口
-p 3306:3306 \
# -e KEY=VALUE 设置环境变量,由镜像提供者提供,可在docker官网查看
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
# 镜像名称 [repository:tag]名称和版本,版本不写就默认 latest
mysql

如果要再运行一个 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 自定义网络 容器名称 添加容器到自定义网络

部署项目

部署后端

  1. 项目打成 jar 包,构建 docker 镜像,然后都放入 Linux 里面的一个文件夹
  2. 运行 docker build 构建镜像
    docker build -t 自定义镜像名称:版本号 .
  3. 通过 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部署项目全流程

  1. 创建一个 Dockerfile 文件,用来声明项目结构
  2. 运行 docker build 通过这个Dockerfile 构建镜像
  3. 运行 docker run 运行镜像
  4. 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

  1. 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
  2. 查看 Ubuntu 虚拟机的 IP 地址

    1
    2
    3
    ip a
    # 或
    hostname -I
  3. 在 MobaXterm 中连接 Ubuntu

    打开 MobaXterm(Windows 上)
    点击左上角 Session(会话)
    选择 SSH
    填写:

    • Remote host: Ubuntu 虚拟机的 IP(如 192.168.5.100)
    • Port: 22(默认 SSH 端口)
    • Username: 你的 Ubuntu 用户名(如 ubuntu 或 admin01)

    点击 OK
    首次连接会提示确认密钥,点 Accept
    输入密码 → 成功登录!

  4. 连接之后就能像 windows 的文件夹一样操作 Ubuntu 了,也能互相传文件

使用 MobaXterm 连接虚拟机的redis

  1. docker中运行多个redis实例
  2. mobaxterm右键标签页复制标签,用来创建多个终端
  3. 每个终端执行redis-cli -p 6380就连接上redis实例了

【保存终端到会话夹】

  1. 新建连接填写IP、SSH端口(22)、用户名
  2. 勾选底部的宏里面,插入一行文本,输入redis-cli -p 6380

顺便记录一下运行redis实例的命令:

1
2
3
4
docker run -d \
--name redis-node4 \
-p 6383:6379 \
redis:latest

启动和停止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

  1. 新建一个文件夹用来存放每个sentinel的配置文件

    1
    2
    mkdir -p ~/redis-sentinel
    cd ~/redis-sentinel
  2. 创建一个文件夹存放当前哨兵的配置文件,也作为他的工作目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    mkdir -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
  3. 启动每一个sentinel实例,可以用mobaxterm左上角的多执行来同时运行命令,或者排布终端

    1
    2
    3
    redis-sentinel s1/sentinel.conf
    redis-sentinel s2/sentinel.conf
    redis-sentinel s3/sentinel.conf
  4. 配置从节点的“对外宣告地址”(关键!)
    这个是哨兵里面选举时用到的

    方法 1:启动时通过命令行设置(推荐)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    docker 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:动态设置(如果已运行)
    连接的是容器内的端口,也就是6379

    1
    2
    docker 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

  1. 查看网关ip route show default

  2. 编辑Netplan配置文件sudo nano /etc/netplan/00-installer-config.yaml
    删除原内容,添加以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    network: # 整个网络配置的根节点
    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
  3. 修复权限 + 应用配置
    sudo chmod 600 /etc/netplan/00-installer-config.yaml
    sudo netplan apply


Linux知识
http://www.981928.xyz/2026/01/12/Linux知识/
作者
981928
发布于
2026年1月12日
许可协议