accttodo 12/31/2024 运维操作系统Docker
目录
参考:
# Docke搭建:Mysql
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 备注 |
---|---|---|---|---|
Docker | ||||
MySQL | 5.7.44 |
# 查询镜像
# 查询mysql镜像
docker search mysql
1
2
2
# 拉取镜像
# 拉取对应的版本Mysql5.7.44
docker pull mysql:5.7.44
1
2
2
# 检查镜像
docker images
1
2
2
# 创建挂载目录
# 存储 MySQL 的通信文件\数据文件\文件数据\配置文件\日志文件
mkdir -p /data/mysql/{sock,data,mysql-files,conf,log}
mkdir -p /data/mysql/conf/conf.d
1
2
3
2
3
# 复制配置
创建临时容器
docker run --name mysql \
-p 3308:3306 \
-d mysql:5.7.44
1
2
3
2
3
复制配置
# 将容器my.cnf文件复制到宿主机
docker cp mysql:/etc/my.cnf /data/mysql/
1
2
2
删除临时容器
# 停止
docker container stop mysql
# 删除
docker container rm mysql
1
2
3
4
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
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
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
2
3
4
# 登录MySQL
- 进入容器登录
# 进入容器
docker exec -it 容器id /bin/bash
# 登录MySQL
mysql -uroot -p
1
2
3
4
2
3
4
- 主机内远程登陆
# 主机内远程登陆
mysql -uroot -p -h127.0.0.1 -P3306
1
2
2
# 授权允许远程连接
查看用户表中root信息
show databases;
use mysql;
select host, user, plugin, authentication_string, password_expired from user;
1
2
3
2
3
设置允许所有人可连接
# 授权允许所有人可连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rt@at3721' WITH GRANT OPTION;
# 重载授权表
FLUSH PRIVILEGES;
1
2
3
4
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
2
3
# 复制MySQL配置
# 启动一个退出后自动删除的临时容器
sudo docker run --rm --name temp-mysql -d mysql:5.7.44 tail -f /dev/null
1
2
2
--rm
:容器停止后自动删除,避免残留容器占用资源。tail -f /dev/null
:保持容器活跃但不启动MySQL服务,避免因配置缺失导致服务崩溃。
# 将容器内的配置文件复制到宿主机目录
sudo docker cp temp-mysql:/etc/my.cnf /data/docker_mysql/conf/
1
2
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
2
#停止并清理容器
sudo docker stop temp-mysql
1
2
2
# 编辑Docker Compose文件
# 编辑
sudo vi docker-compose.yaml
1
2
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
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