Docker安装Mysql

在已经部署好 Docker 的 CentOS 系统上部署 MySQL,可按以下步骤操作:

1. 拉取 MySQL 镜像

首先,你需要从 Docker Hub 上拉取 MySQL 镜像。可以根据自己的需求选择合适的版本,这里以 MySQL 8.0 为例:

bash 复制代码
docker pull mysql:8.0

若需要其他版本,只需将 8.0 替换为相应版本号,例如 5.7

2. 创建 MySQL 数据存储目录

为了持久化存储 MySQL 数据,避免容器删除后数据丢失,需要在主机上创建一个目录用于存储 MySQL 数据:

bash 复制代码
mkdir -p /data/mysql

3. 运行 MySQL 容器

使用以下命令启动 MySQL 容器:

bash 复制代码
docker run -d \
--name mysql-container \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
mysql:8.0

命令参数说明:

  • -d:以守护进程模式运行容器,即让容器在后台运行。
  • --name mysql-container:为容器指定一个名称,方便后续管理。
  • -p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口,这样就可以通过主机的 3306 端口访问 MySQL 服务。
  • -v /data/mysql:/var/lib/mysql:将主机的 /data/mysql 目录挂载到容器的 /var/lib/mysql 目录,实现数据持久化。
  • -e MYSQL_ROOT_PASSWORD=your_password:设置 MySQL 的 root 用户密码,将 your_password 替换为你自己设置的密码。
  • mysql:8.0:指定要使用的 MySQL 镜像。

4. 检查容器运行状态

使用以下命令检查 MySQL 容器是否正常运行:

bash 复制代码
docker ps

如果看到 mysql-container 容器处于 Up 状态,说明容器已成功启动。

5. 进入 MySQL 容器并登录 MySQL

可以使用以下命令进入 MySQL 容器:

bash 复制代码
docker exec -it mysql-container bash

进入容器后,使用以下命令登录 MySQL:

bash 复制代码
mysql -u root -p

输入之前设置的 root 密码,即可登录到 MySQL 数据库。

6. 配置远程访问(可选)

如果需要从远程主机访问 MySQL 服务,需要进行一些额外的配置。登录到 MySQL 后,执行以下 SQL 语句:

sql 复制代码
-- 切换到 mysql 数据库
USE mysql;

-- 创建允许远程访问的用户
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';

-- 授予用户所有权限
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

your_useryour_password 替换为你自己设置的用户名和密码。

7. 防火墙配置(可选)

如果你的 CentOS 系统开启了防火墙,需要开放 3306 端口:

bash 复制代码
# 开放 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 重新加载防火墙规则
firewall-cmd --reload

通过以上步骤,你就可以在 CentOS 系统的 Docker 中成功部署 MySQL 服务。

在 Docker 中删除镜像可以使用 docker rmi 命令,不过在删除镜像之前,有一些情况需要注意,比如镜像可能正在被容器使用,下面为你详细介绍删除镜像的操作步骤及不同场景的处理方式。

1. 查看现有镜像

在删除镜像之前,你可以先查看当前系统中存在哪些镜像,使用 docker images 命令:

bash 复制代码
docker images

该命令会列出镜像的仓库名、标签、镜像 ID、创建时间和大小等信息。

2. 删除单个镜像

若要删除单个镜像,可以使用 docker rmi 命令,后跟镜像的 ID 或者仓库名和标签。

使用镜像 ID 删除
bash 复制代码
docker rmi <镜像 ID>

例如,要删除镜像 ID 为 abc123 的镜像:

bash 复制代码
docker rmi abc123
使用仓库名和标签删除
bash 复制代码
docker rmi <仓库名>:<标签>

例如,删除 nginx:latest 镜像:

bash 复制代码
docker rmi nginx:latest

3. 删除多个镜像

你可以在 docker rmi 命令后跟上多个镜像 ID 或仓库名和标签来一次性删除多个镜像,多个参数之间用空格分隔。

使用镜像 ID 删除多个镜像
bash 复制代码
docker rmi abc123 def456 ghi789
使用仓库名和标签删除多个镜像
bash 复制代码
docker rmi nginx:latest ubuntu:20.04 redis:alpine

4. 删除所有镜像

若要删除系统中所有的镜像,可以结合 docker images -q 命令(该命令用于只输出镜像 ID)和 xargs 来实现:

bash 复制代码
docker rmi $(docker images -q)

5. 处理被容器使用的镜像

如果要删除的镜像正在被一个或多个容器使用,直接删除会失败,系统会提示该镜像被使用。你需要先停止并删除使用该镜像的容器,再删除镜像。操作步骤如下:

停止使用该镜像的容器
bash 复制代码
docker stop $(docker ps -a -q --filter ancestor=<镜像 ID 或 仓库名:标签>)

例如,停止使用 nginx:latest 镜像的所有容器:

bash 复制代码
docker stop $(docker ps -a -q --filter ancestor=nginx:latest)
删除使用该镜像的容器
bash 复制代码
docker rm $(docker ps -a -q --filter ancestor=<镜像 ID 或 仓库名:标签>)

例如,删除使用 nginx:latest 镜像的所有容器:

bash 复制代码
docker rm $(docker ps -a -q --filter ancestor=nginx:latest)
删除镜像

在容器删除后,就可以正常删除镜像了:

bash 复制代码
docker rmi <镜像 ID 或 仓库名:标签>

6. 强制删除镜像

如果想忽略镜像是否被容器使用,强制删除镜像,可以在 docker rmi 命令后添加 -f 选项:

bash 复制代码
docker rmi -f <镜像 ID 或 仓库名:标签>

不过不建议随意使用强制删除,因为这可能会导致系统处于不一致的状态。

注意事项

  • 确保你有足够的权限执行这些操作,通常需要使用 sudo 来运行 Docker 命令。
  • 删除镜像后无法恢复,确保你确实要删除该镜像。

当你遇到 Error response from daemon: conflict: unable to delete 6616596982ed (must be forced) - image is being used by stopped container 90fc79ea4c6e 这个错误,这表明你尝试删除的镜像(镜像 ID 为 6616596982ed)正被一个已停止的容器(容器 ID 为 90fc79ea4c6e)所使用,Docker 不允许在这种情况下直接删除镜像。下面为你提供几种解决办法:

方法一:先删除使用该镜像的容器,再删除镜像

这是比较推荐的做法,因为它能保证系统状态的一致性。

步骤 1:删除使用该镜像的容器

使用 docker rm 命令删除指定 ID 的容器:

bash 复制代码
docker rm 90fc79ea4c6e
步骤 2:删除镜像

在容器删除后,再次尝试删除镜像:

bash 复制代码
docker rmi 6616596982ed

方法二:强制删除镜像

如果你确定要删除该镜像,且不担心可能带来的系统状态不一致问题,可以使用 -f 选项强制删除镜像:

bash 复制代码
docker rmi -f 6616596982ed

不过这种方法不建议经常使用,因为强制删除可能会导致后续在管理容器和镜像时出现一些难以排查的问题。

总结操作步骤示例

以下是完整的操作示例,展示了如何先删除容器再删除镜像:

bash 复制代码
# 删除使用该镜像的容器
docker rm 90fc79ea4c6e

# 删除镜像
docker rmi 6616596982ed

若你选择强制删除镜像,示例命令如下:

bash 复制代码
docker rmi -f 6616596982ed

在操作前,请确保你清楚每个步骤的影响,避免误删重要数据或导致系统出现异常。

相关推荐
李迟4 小时前
我的docker随笔48:Docker版本号演进史
docker
阿拉雷️5 小时前
部署实战】Docker + AI Agent:让AI一键部署Spring Boot到服务器,从打包到上线只要一条指令
人工智能·spring boot·docker
雨声不在5 小时前
macos 12使用docker
macos·docker·容器
Mico185 小时前
MySQL 8.0.35 基于GTID 主从复制安装增强半同步复制
android·mysql·adb
CodexDave17 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
王琦031820 小时前
生产环境中使用通用二进制包安装
mysql
BullSmall20 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
蓝田~1 天前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
Herbert_hwt1 天前
MySQL学习前言:关于MySQL的历史与当下学习的必要性
mysql
梦梦代码精1 天前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源