在已经部署好 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_user
和 your_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
在操作前,请确保你清楚每个步骤的影响,避免误删重要数据或导致系统出现异常。