基于 Ubuntu Server 22.04 使用 Docker 部署 MySQL 5.7 压缩包版 (mysql-server_8.0.41-1ubuntu22.04_amd64.deb-bundle.tar)
确保docker已安装:docker安装参考文章
1、创建工作目录:
## 创建工作目录
mkdir mysql-docker && cd mysql-docker
# 下载 MySQL 包(如果已下载,可跳过此步骤)
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-server_8.0.41-1ubuntu22.04_amd64.deb-bundle.tar
需要确保MySQL进程以mysql用户身份启动。以下是关键修正步骤:
2、修改入口脚本 (entrypoint.sh)
在启动MySQL前,明确切换到mysql用户。使用 gosu 或 su-exec 工具(需安装):
#!/bin/bash
set -eo pipefail
##### 初始化数据库(仅首次启动)
if [ ! -d "/var/lib/mysql/mysql" ]; then
echo "Initializing MySQL database..."
chown -R mysql:mysql /var/lib/mysql
mysqld --initialize-insecure --user=mysql # 指定用户为mysql
echo "Initialization complete!"
fi
##### 确保权限正确
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
##### 以mysql用户身份启动MySQL
exec gosu mysql "$@"
3、创建 Dockerfile:
FROM ubuntu:22.04
# 设置工作目录
WORKDIR /mysql-setup
# 复制 MySQL 包
COPY mysql-server_8.0.41-1ubuntu22.04_amd64.deb-bundle.tar .
# 解压文件
RUN tar xvf mysql-server_8.0.41-1ubuntu22.04_amd64.deb-bundle.tar
# 安装所有必需的依赖
RUN apt-get update && apt-get install -y \
libaio1 \
libmecab2 \
libsasl2-2 \
libnuma1 \
perl \
psmisc \
libtinfo5 \
numactl \
wget && \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.16/gosu-amd64" && \
chmod +x /usr/local/bin/gosu && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 创建MySQL用户和组
RUN groupadd -r mysql && \
useradd -r -g mysql -s /bin/false mysql
# 安装 MySQL 包(注意安装顺序)
RUN dpkg -i mysql-common_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client-plugins_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client-core_8.0.41-1ubuntu22.04_amd64.deb \
mysql-client_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-server-core_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-server_8.0.41-1ubuntu22.04_amd64.deb \
|| apt-get -f install -y \
&& dpkg -i mysql-common_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client-plugins_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client-core_8.0.41-1ubuntu22.04_amd64.deb \
mysql-client_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-client_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-server-core_8.0.41-1ubuntu22.04_amd64.deb \
mysql-community-server_8.0.41-1ubuntu22.04_amd64.deb
# 创建必要的目录
RUN mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
&& chmod 777 /var/run/mysqld
# 清理安装文件
RUN rm -rf /mysql-setup/*.deb
# 暴露 MySQL 端口
EXPOSE 3306
# 最终指定运行用户为mysql
USER mysql
# 入口脚本
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
# 设置启动命令
CMD ["mysqld"]
4、清处构建缓存
docker builder prune --all
5、重启docker服务
systemctl daemon-reload
systemctl restart docker.service
6、重新构建docker镜像
docker build --no-cache -t mysql-8.0.41 .
7、使用脚本创建 Docker 容器并运行:
### 创建 Docker 卷来持久化数据
docker volume create mysql-data
### 运行 MySQL 容器
docker run -d \
--name mysql8.0.41 \
-e MYSQL_ROOT_PASSWORD=your_password \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
mysql-8.0.41
8、验证 MySQL 是否正常运行
# 查看容器状态
docker ps
### 查看容器日志
docker logs mysql8.0.41
### 连接到 MySQL
docker exec -it mysql8.0.41 mysql -uroot -p
8、常用管理命令:
# 停止容器
docker stop mysql8.0.41
# 启动容器
docker start mysql8.0.41
# 重启容器
docker restart mysql8.0.41
# 删除容器
docker rm -f mysql8.0.41
docker运行报错排查:
## 验证镜像是否存在
docker images | grep mysql-8.0.41
## 查看所有容器:
docker ps -a
#找到名称为 mysql8.0.41 的容器(或根据错误中的容器ID 1c296385b4cc)。
## 删除旧容器:
docker rm 1c296385b4cc # 使用容器ID
docker rm mysql8.0.41 # 使用容器名称
## 修改容器名称并重启
docker run -d \
--name mysql8.0.41-new \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-p 3306:3306 \
-v mysql-data:/var/lib/mysql \
mysql-8.0.41
## 注意事项:
#数据保留:如果旧容器中有需要保留的数据,确保数据卷 mysql-data 已正确挂载,删除容器不会影响持久化的数据。容器状态:如果容器正在运行,需先停止再删除:*
docker stop mysql8.0.41 # 停止容器
docker rm mysql8.0.41 # 删除容器
# 验证结果:
docker ps
#输出应显示新容器(如 mysql8.0.41 或 mysql8.0.41-new)的状态为 Up。