Ubuntu Server 22.04 使用 Docker 部署 MySQL 5.7

基于 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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值