12/31/2024 运维操作系统Docker

目录


参考:

  • 链接1:

# Docke搭建:Mysql

# 环境依赖

软件/系统 版本 架构 包名 备注
Docker
MySQL 5.7.44

# 查询镜像

# 查询mysql镜像
docker search mysql
1
2

# 拉取镜像

# 拉取对应的版本Mysql5.7.44
docker pull mysql:5.7.44
1
2
# 检查镜像
docker images
1
2

# 创建挂载目录

# 存储 MySQL 的通信文件\数据文件\文件数据\配置文件\日志文件
mkdir -p /data/mysql/{sock,data,mysql-files,conf,log}
mkdir -p /data/mysql/conf/conf.d
1
2
3

# 复制配置

创建临时容器

docker run --name mysql \
           -p 3308:3306 \
           -d mysql:5.7.44
1
2
3

复制配置

# 将容器my.cnf文件复制到宿主机
docker cp mysql:/etc/my.cnf /data/mysql/
1
2

删除临时容器

# 停止
docker container stop mysql
# 删除
docker container rm mysql
1
2
3
4

# 启动容器

执行启动命令

docker run --name mysql \
           -p 3308:3306 \
           -v /data/mysql/sock:/var/run/mysqld \
           -v /data/mysql/data:/var/lib/mysql \
           -v /data/mysql/mysql-files:/var/lib/mysql-files \
           -v /data/mysql/conf/conf.d:/etc/mysql/conf.d \
           -v /data/mysql/log:/var/log/mysql \
           -v /data/mysql/my.cnf:/etc/my.cnf \
           -e MYSQL_ROOT_PASSWORD=rt@at3721 \
           -d mysql:5.7.44
1
2
3
4
5
6
7
8
9
10

命令解释:

# 将容器的 3306 端口映射到服务器的 3308 端口,即可以通过服务器的 IP 地址和端口号访问容器的 MySQL 服务。
docker run -p 3308:3306 \
# 指定容器的名称为 mysql,方便后续管理和操作
--name mysql \
# 将服务器的 /data/mysql/sock 目录挂载到容器的 /var/run/mysqld 目录,用于存储 MySQL 的通信文件。
-v /data/mysql/sock:/var/run/mysqld \
# 将服务器的 /data/mysql/data 目录挂载到容器的 /var/lib/mysql 目录,用于存储 MySQL 的数据文件。
-v /data/mysql/data:/var/lib/mysql \
# 将服务器的 /data/mysql/mysql-files 目录挂载到容器的 /var/lib/mysql-files 目录,用于存储 MySQL 的文件数据。
-v /data/mysql/mysql-files:/var/lib/mysql-files \
# 将服务器的 /data/mysql/log 目录挂载到容器的 /var/log/mysql 目录,用于存储 MySQL 的日志文件。
-v /data/mysql/log:/var/log/mysql \
# 将服务器的 /data/mysql/conf 目录挂载到容器的 /etc/mysql/conf.d 目录,用于存储 MySQL 的配置文件。
-v /data/mysql/conf:/etc/mysql/conf.d \
# 将服务器的 /data/mysql/my.cnf 文件挂载到容器的 /etc/my.cnf 文件,用于存储 MySQL 的配置文件。
-v /data/mysql/my.cnf:/etc/my.cnf \
# 设置 MySQL 的 root 用户密码为 rt@at3721(这个参数使用了环境变量来传递密码信息)。
-e MYSQL_ROOT_PASSWORD=rt@at3721 \
# 以后台模式运行 MySQL 容器,并使用 mysql:5.7.44 镜像作为容器镜像。
-d mysql:5.7.44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

命令结束,输出的是容器的 ID,表示容器已成功启动。

# 检查容器的状态
docker ps -a
# 查看日志
docker logs mysql
1
2
3
4

# 登录MySQL

  • 进入容器登录
# 进入容器
docker exec -it 容器id /bin/bash
# 登录MySQL
mysql -uroot -p
1
2
3
4
  • 主机内远程登陆
# 主机内远程登陆
mysql -uroot -p -h127.0.0.1 -P3306
1
2

# 授权允许远程连接

查看用户表中root信息

show databases;
use mysql;
select host, user, plugin,  authentication_string, password_expired from user;
1
2
3

设置允许所有人可连接

# 授权允许所有人可连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rt@at3721' WITH GRANT OPTION;
# 重载授权表
FLUSH PRIVILEGES;
1
2
3
4

# Docker Compose 方式

# 环境依赖

软件/系统 版本 架构 包名 备注
Docker Compose

# 安装搭建

# 创建数据文件夹

# mysql
sudo mkdir -p /data/docker_mysql/{sock,data,mysql-files,conf,logs,init}
sudo mkdir -p /data/docker_mysql/conf/{my.cnf.d,conf.d,mysql.conf.d}
1
2
3

# 复制MySQL配置

# 启动一个退出后自动删除的临时容器
sudo docker run --rm --name temp-mysql -d mysql:5.7.44 tail -f /dev/null
1
2
  • --rm:容器停止后自动删除,避免残留容器占用资源。
  • tail -f /dev/null:保持容器活跃但不启动MySQL服务,避免因配置缺失导致服务崩溃。
# 将容器内的配置文件复制到宿主机目录
sudo docker cp temp-mysql:/etc/my.cnf /data/docker_mysql/conf/
1
2
  • temp-mysql:容器名称(需与上一步的 --name 一致)。

  • /etc/mysql/my.cnf:容器内配置文件路径。

    MySQL 5.7官方镜像的默认配置文件通常位于以下路径:

    • /etc/mysql/my.cnf(主配置文件)
    • /etc/mysql/conf.d/(包含额外配置文件的目录)

    也可进入容器查找路径:

    docker exec -it temp-mysql bash
    find / -name my.cnf
    
    1
    2
  • /data/docker_mysql/conf/my.cnf:宿主机目标路径,根据需要自定义。

# 检查宿主机目标路径下是否生成 `my.cnf` 文件:  
cat /data/docker_mysql/conf/my.cnf
1
2
#停止并清理容器
sudo docker stop temp-mysql
1
2

# 编辑Docker Compose文件

# 编辑 
sudo vi docker-compose.yaml
1
2
# 版本
#version: "3"

# 服务
services:
  # MySQL服务
  mysql:
    # 容器名称
    container_name: mysql_5.7.44
    # 镜像及版本
    image: mysql:5.7.44
    # 自动重启
    restart: always
    # 高级权限
    privileged: true
    # 主机名
    hostname: mysql_5.7.44
    # 端口映射
    ports:
      - "3306:3306"
    # 数据持久卷
    volumes:
      - "/data/docker_mysql/sock:/var/run/mysqld"
      - "/data/docker_mysql/data:/var/lib/mysql"
      - "/data/docker_mysql/mysql-files:/var/lib/mysql-files"
      - "/data/docker_mysql/conf/my.cnf:/etc/my.cnf"
      - "/data/docker_mysql/conf/my.cnf.d:/etc/my.cnf.d"      
      - "/data/docker_mysql/conf/conf.d:/etc/mysql/conf.d"
      - "/data/docker_mysql/conf/mysql.conf.d:/etc/mysql/mysql.conf.d"
      - "/data/docker_mysql/logs:/var/log/mysql"
      - "/data/docker_mysql/init:/docker-entrypoint-initdb.d"
    # 环境变量
    environment:
      # 时区:亚洲/上海
      - TZ=Asia/Shanghai
      # 账户root密码
      - MYSQL_ROOT_PASSWORD=rt@at3721
      # 允许root通过所有IP访问
      - MYSQL_ROOT_HOST=%
      # 中文编码
      - LANG=C.UTF-8
    # 健康检测
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-prt@at3721"]
      # 间隔时间
      interval: 5s
      # 超时时间
      timeout: 10s
      # 重试次数
      retries: 5
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
上次更新时间: 4/16/2025, 2:13:02 AM