当前位置: 首页 > news >正文

Docker安装Mysql

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

1. 拉取 MySQL 镜像

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

docker pull mysql:8.0

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

2. 创建 MySQL 数据存储目录

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

mkdir -p /data/mysql

3. 运行 MySQL 容器

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

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 容器是否正常运行:

docker ps

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

5. 进入 MySQL 容器并登录 MySQL

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

docker exec -it mysql-container bash

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

mysql -u root -p

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

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

如果需要从远程主机访问 MySQL 服务,需要进行一些额外的配置。登录到 MySQL 后,执行以下 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 端口:

# 开放 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

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

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

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

1. 查看现有镜像

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

docker images

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

2. 删除单个镜像

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

使用镜像 ID 删除
docker rmi <镜像 ID>

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

docker rmi abc123
使用仓库名和标签删除
docker rmi <仓库名>:<标签>

例如,删除 nginx:latest 镜像:

docker rmi nginx:latest

3. 删除多个镜像

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

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

4. 删除所有镜像

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

docker rmi $(docker images -q)

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

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

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

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

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

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

docker rm $(docker ps -a -q --filter ancestor=nginx:latest)
删除镜像

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

docker rmi <镜像 ID 或 仓库名:标签>

6. 强制删除镜像

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

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 的容器:

docker rm 90fc79ea4c6e
步骤 2:删除镜像

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

docker rmi 6616596982ed

方法二:强制删除镜像

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

docker rmi -f 6616596982ed

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

总结操作步骤示例

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

# 删除使用该镜像的容器
docker rm 90fc79ea4c6e

# 删除镜像
docker rmi 6616596982ed

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

docker rmi -f 6616596982ed

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

相关文章:

  • C语言图结构学习笔记
  • JavaScript函数-函数的返回值
  • 计算机网络之路由协议(自治系统)
  • AI学习之-阿里天池
  • jmeter后端监视器的妙用和实现方法
  • Progress bar (进度条)
  • 谷歌浏览器安装Vue3插件
  • 亲测Win11电脑可以安装LabVIEW的版本,及2015、2018、2020版本直接的区别
  • Google第三方库详解------ProtoBuf详解 + 样例(5万字详解!)
  • C#实现Modbus TCP 通讯测试软件
  • vue passive 修饰符使用场景
  • Python中的转义字符
  • MongoDB#常用脚本
  • Vulhub靶机 Apache Druid(CVE-2021-25646)(渗透测试详解)
  • 基于keepalived的Nginx高可用架构
  • 游戏引擎学习第119天
  • 【前端进阶】05 单线程的JavaScript如何管理任务的
  • Baklib企业CMS智能元数据与协作管理实践
  • 超级详细Spring AI运用Ollama大模型
  • 【CentOS7】安装MinIO
  • 世联行:2024年营业收入下降27%,核心目标为“全面消除亏损公司和亏损项目”
  • 常熟银行一季度净赚超10亿增逾13%,净息差较上年末下降0.1个百分点
  • 金隅集团:今年拿地将选择核心热门地块,稳健审慎投资
  • 药企销售的茶碱层层流转后部分被用于制毒,销售人员一审被判15年
  • 美媒称特朗普考虑大幅下调对华关税、降幅或超一半,外交部回应
  • 韩国检方以受贿嫌疑起诉前总统文在寅