Docker 镜像维护指南:从配置优化到 MySQL 实战运行
- [Docker 镜像维护指南:从配置优化到 MySQL 实战运行](#Docker 镜像维护指南:从配置优化到 MySQL 实战运行)
-
- [一、Docker 镜像维护的核心价值](#一、Docker 镜像维护的核心价值)
- 二、镜像维护前置配置:解决拉取失败问题
-
- [1. 检查当前镜像源配置](#1. 检查当前镜像源配置)
- [2. 配置国内镜像加速器](#2. 配置国内镜像加速器)
-
- (1)编辑配置文件
- [(2)重启 Docker 服务使配置生效](#(2)重启 Docker 服务使配置生效)
- (3)验证配置是否生效
- [三、实战:拉取 MySQL 镜像并配置端口映射](#三、实战:拉取 MySQL 镜像并配置端口映射)
-
- [1. 拉取 MySQL 镜像(指定固定版本)](#1. 拉取 MySQL 镜像(指定固定版本))
- [2. 启动 MySQL 容器(配置端口映射与环境变量)](#2. 启动 MySQL 容器(配置端口映射与环境变量))
- [3. 验证容器运行状态](#3. 验证容器运行状态)
-
- (1)查看容器是否启动成功
- (2)测试宿主机端口映射是否生效
- [(3)进入容器验证 MySQL 服务](#(3)进入容器验证 MySQL 服务)
- 四、镜像与容器的日常维护操作
-
- [1. 镜像维护:清理无用镜像](#1. 镜像维护:清理无用镜像)
- [2. 容器维护:启停、重启与日志查看](#2. 容器维护:启停、重启与日志查看)
- 五、常见问题排查
Docker 镜像维护指南:从配置优化到 MySQL 实战运行
在 Docker 日常使用中,镜像维护是保障容器服务稳定、高效运行的核心环节。从镜像源配置、镜像拉取优化,到容器启动后的端口映射与基础运维,每一步都影响着服务可用性。本文将以 Docker 镜像维护核心要点 为基础,结合 docker pull mysql
实战案例,详细演示如何解决镜像拉取问题、配置端口映射(宿主机 3307 映射容器 3306),最终实现 MySQL 容器的成功运行。
一、Docker 镜像维护的核心价值
Docker 镜像作为容器的"模板",其维护质量直接决定了容器服务的稳定性与效率:
- 加速拉取:通过配置镜像加速器,解决官方仓库访问慢、连接超时问题;
- 版本管控 :避免使用
latest
标签(默认标签),指定固定版本(如mysql:8.0
),防止版本迭代导致的兼容性问题; - 安全清洁 :定期清理无用镜像(
docker rmi
)、悬空镜像(docker image prune
),释放宿主机磁盘空间; - 私有管理:对企业内部镜像,通过私有仓库(如 Harbor)管理,保障镜像安全性。
二、镜像维护前置配置:解决拉取失败问题
在执行 docker pull mysql
前,多数用户会遇到 "连接超时""拒绝连接" 等问题(如官方仓库 index.docker.io
访问不稳定),核心解决方案是 配置国内镜像加速器。
1. 检查当前镜像源配置
首先查看 Docker 现有镜像源,确认是否已配置加速器:
bash
docker info | grep -A 5 "Registry Mirrors"
若输出为空或仅显示官方仓库(https://index.docker.io/v1/
),则需手动配置国内镜像源。
2. 配置国内镜像加速器
Docker 镜像源配置文件为 /etc/docker/daemon.json
(Linux 系统),常用国内镜像源包括阿里云、网易、中科大等,步骤如下:
(1)编辑配置文件
bash
sudo vi /etc/docker/daemon.json
添加以下内容(保留 data-root
可自定义镜像存储路径,可选):
json
{
"data-root": "/data/docker", // 可选:指定镜像存储路径,默认 /var/lib/docker
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn", // 中科大镜像源
"https://hub-mirror.c.163.com", // 网易镜像源
"https://dockerproxy.com" // 通用加速器(高可用)
]
}
(2)重启 Docker 服务使配置生效
配置修改后需重启 Docker,确保镜像源加载:
bash
# 停止 Docker 服务与关联套接字(避免进程残留)
sudo systemctl stop docker docker.socket
# 重新加载系统服务配置
sudo systemctl daemon-reload
# 启动 Docker 服务
sudo systemctl start docker
(3)验证配置是否生效
再次执行镜像源检查命令,确认加速器已加载:
bash
docker info | grep -A 5 "Registry Mirrors"
若输出以下内容,说明配置成功:
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
https://hub-mirror.c.163.com/
https://dockerproxy.com/
三、实战:拉取 MySQL 镜像并配置端口映射
解决镜像源问题后,开始拉取 MySQL 镜像,并通过 宿主机 3307 端口映射容器 3306 端口(避免与宿主机本地 MySQL 端口冲突)。
1. 拉取 MySQL 镜像(指定固定版本)
不建议使用 latest
标签(默认指向最新版本,可能存在兼容性风险),推荐指定具体版本(如 mysql:8.0
):
bash
docker pull mysql:8.0
拉取成功后,查看本地镜像:
bash
docker images | grep mysql
输出示例(显示镜像名称、版本、ID 等信息):
mysql 8.0 3218b38490ce 2 weeks ago 514MB
2. 启动 MySQL 容器(配置端口映射与环境变量)
启动容器时需指定 端口映射 (-p 宿主机端口:容器端口
)、root 密码 (MYSQL_ROOT_PASSWORD
),命令如下:
bash
docker run -d \
--name mysql-8.0 \ # 容器名称(自定义,便于管理)
-p 3307:3306 \ # 端口映射:宿主机 3307 → 容器 3306
-e MYSQL_ROOT_PASSWORD=123456 \ # 设置 MySQL root 用户密码
-e TZ=Asia/Shanghai \ # 配置时区(避免时间同步问题)
mysql:8.0 # 镜像名称:版本
命令参数说明:
-d
:后台运行容器(守护态);--name
:给容器起一个唯一名称,后续可通过名称操作容器(如停止、重启);-p 3307:3306
:端口映射,宿主机 3307 端口接收请求,转发到容器内 3306 端口(MySQL 默认端口);-e
:设置环境变量,MYSQL_ROOT_PASSWORD
是 MySQL 必需变量(指定 root 密码),TZ
用于同步时区;mysql:8.0
:指定启动所用的镜像。
3. 验证容器运行状态
(1)查看容器是否启动成功
bash
docker ps | grep mysql-8.0
若输出包含容器 ID、状态(Up
表示运行中),说明启动成功:
a1b2c3d4e5f6 mysql:8.0 "docker-entrypoint.s..." 2 minutes ago Up 2 minutes 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mysql-8.0
(2)测试宿主机端口映射是否生效
通过 telnet
或 nc
命令测试宿主机 3307 端口是否可通(需先安装 telnet
或 nc
):
bash
# 方法1:使用 telnet
telnet localhost 3307
# 方法2:使用 nc(更简洁)
nc -zv localhost 3307
若输出 succeeded!
或 Connected to localhost
,说明端口映射正常。
(3)进入容器验证 MySQL 服务
通过 docker exec
命令进入容器内部,登录 MySQL 验证服务:
bash
# 进入容器(交互式终端)
docker exec -it mysql-8.0 /bin/bash
# 在容器内登录 MySQL(输入之前设置的密码 123456)
mysql -u root -p
登录成功后,可执行 MySQL 命令(如查看数据库):
sql
show databases;
输出 MySQL 内置数据库(mysql
、information_schema
等),说明服务正常。
四、镜像与容器的日常维护操作
成功运行 MySQL 容器后,需掌握基础维护命令,保障服务长期稳定。
1. 镜像维护:清理无用镜像
-
删除指定镜像 (需先停止并删除依赖该镜像的容器):
bashdocker rmi mysql:8.0 # 删除 mysql:8.0 镜像
-
清理悬空镜像 (无标签的镜像,通常是构建镜像残留):
bashdocker image prune -f # -f 强制删除,无需确认
-
清理所有未使用镜像 (谨慎使用,会删除未运行容器的镜像):
bashdocker image prune -a -f
2. 容器维护:启停、重启与日志查看
-
停止容器 :
bashdocker stop mysql-8.0
-
重启容器 :
bashdocker restart mysql-8.0
-
查看容器日志 (排查启动失败或运行错误):
bash# 实时查看日志 docker logs -f mysql-8.0 # 查看最近 100 行日志 docker logs --tail 100 mysql-8.0
-
设置容器开机自启 (避免宿主机重启后容器未启动):
bashdocker update --restart=always mysql-8.0
五、常见问题排查
- 拉取镜像超时 :检查镜像源配置是否生效,或更换其他加速器(如
https://dockerproxy.com
); - 容器启动失败 :通过
docker logs 容器名
查看日志,常见原因是 端口被占用 (更换宿主机端口,如 3308:3306)或 密码未设置 (确保MYSQL_ROOT_PASSWORD
变量正确); - 无法连接容器 MySQL :检查宿主机防火墙是否开放 3307 端口(
sudo firewall-cmd --add-port=3307/tcp --permanent
),或关闭防火墙测试(sudo systemctl stop firewalld
)。
若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/153109380