Docker 容器部署 MySQL Redis、资源控制与常用命令解析
本文实操 MySQL/Redis 容器安装测试及远程连接,介绍国内镜像源加速下载,演示 CentOS 容器替换源编译 C 程序,详解 Docker 内存/CPU 资源控制,辨析 create/start/run、save/load 与 export/import、rm/rmi/prune 等命令区别,最后通过复合命令实现批量停容器,覆盖容器全流程操作与常见问题。

本文实操 MySQL/Redis 容器安装测试及远程连接,介绍国内镜像源加速下载,演示 CentOS 容器替换源编译 C 程序,详解 Docker 内存/CPU 资源控制,辨析 create/start/run、save/load 与 export/import、rm/rmi/prune 等命令区别,最后通过复合命令实现批量停容器,覆盖容器全流程操作与常见问题。

启动 MySQL 容器。
测试容器是否成功启动,并在容器内部执行 bash 命令连接 MySQL。
在 MySQL 容器内部连接 MySQL(此时容器内部可以看到 MySQL 这个服务),进行一系列操作也是正常的。
退出 MySQL 容器。
Windows 安装 MySQL Workbench 进行连接,进入后看到的数据也是一样的。
从 Docker Hub 中找到对应版本并下载。下载完成,看到容器成功运行。
进入容器内,进行连接里面的 Redis,发现能够正常操作。退出 Redis 客户端与 Redis 容器。
首先下载远程连接软件。进行启动配置,发现数据正常。
想象你要下载一个超大的 C++ 开发工具包(比如编译器、第三方库),官方源在国外,下载速度慢如蜗牛。镜像源就是国内(比如阿里、腾讯,清华源,中科大源)帮你'复印'了一份官方资源,内容和原版完全一样,但服务器离你更近,下载快得多!
可以更具帮助手册进行下载,比如对应 Ubuntu 下的镜像源更换。这里只需要几行命令即可完成替换源。
这里需要手动更改对应文件内容。
在对应的 CentOS 7 的容器中进行安装 gcc 进行 C 程序编写测试;如果容器中未安装 gcc,需要往国外去下载对应的 gcc 的镜像源,十分慢,因此这里可以把对应的 CentOS 7 的国外镜像源全部替换掉(这里选用中科大镜像源)。
启动 CentOS 7 进入 bash 中。下面给 CentOS 7 进行替换镜像源。输入对指令,然后再刷新下,也是能跑起来。
首先跑一个 Nginx 容器。看下内存信息与 CPU 信息。stats 看下资源动态变化。
docker update:改运行中容器配置的命令。
-m 300m:给容器设内存上限 300MB。--memory-swap 600m:容器内存 + 交换空间上限 600MB。nginx2:要改的容器名。把对应 Nginx 容器内存最大限制在 300m。
在容器中执行对应打满 CPU 命令:
docker exec -it nginx2 bash
for i in $(seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)); do dd if=/dev/zero of=/dev/null &; done
docker exec -it nginx2 bash:进入名为 nginx2 的 Docker 容器,启动交互终端。for i in ...:根据容器里物理 CPU 数量循环。dd if=/dev/zero of=/dev/null &:每个循环启动一个后台任务,用 dd 命令消耗 CPU 资源(读 /dev/zero 写 /dev/null)。[1] 44 等:显示后台任务编号和进程 ID,说明已启动对应数量任务。这里发现对应的容器的 CPU 确实占到了接近 100%。
下面给它使用 CPU 限制在 10%:
docker update --cpu-shares 1024 nginx2
果然被限制在了 10%。
进行资源释放,删除容器。
docker create start run 区别docker create 创建的容器。docker export import 与 docker save load 区别docker save images_name
docker load 导入时,能完整还原镜像的历史记录与元数据。docker export container_id
docker import 导入时,会把这个容器快照当作新的镜像来构建。docker load
docker save 导出的镜像存储文件(格式一般是 .tar 之类的归档文件)。docker import
docker export 导出的容器快照文件(同样是归档文件,但内容是容器运行时的状态)。差异总结:
导入的'源文件'不同
docker load 导入的是 docker save 导出的镜像级备份;docker import 导入的是 docker export 导出的容器级快照。历史记录与元数据的保留
docker load 导入后,新镜像和原镜像的历史记录、元数据完全一致;docker import 导入后,新镜像丢弃了容器的历史记录与元数据,仅保留容器导出时的'瞬时状态'。文件体积与内容侧重点
docker load 对应的源文件(docker save 产出)体积更大,因为它存了镜像全生命周期的信息;docker import 对应的源文件(docker export 产出)体积更小,因为它只存容器某一时刻的'快照'。使用场景的差异
docker save + docker load 更合适;docker export + docker import 更轻便。简单来说,你可以把 docker load 想象成'完整镜像的克隆机'——连历史和元数据都一模一样;把 docker import 想象成'容器快照的定格器'——只抓当下状态,抛掉历史包袱。根据你对'镜像完整性'和'文件体积'的需求,选择对应的命令组合即可。
docker rm rmi prune 区别docker rm-f 强制删docker rmidocker prune一句话总结:rm 管容器删除,rmi 管镜像删除,prune 批量清闲置对象。
下面举个例子:
docker ps -q:docker ps 命令用于列出正在运行的容器,-q 选项表示只显示容器的 ID,而不显示其他详细信息(如容器名称、镜像等)。$():这是命令替换语法。它会先执行括号内的命令(即 docker ps -q),然后将命令的输出结果作为参数传递给外部命令。docker kill:该命令用于强制停止一个或多个正在运行的容器。它会向容器内的主进程发送 SIGKILL 信号,使得容器立即停止运行。docker kill $(docker ps -q):这条复合命令的作用是获取当前所有正在运行的容器的 ID,并使用 docker kill 命令将这些容器全部强制停止。总之,这样配合使用,变样式支持了原本 Docker 不存在的命令,减少了许多重复命令使用。
本篇文章从数据库容器部署(MySQL/Redis)、镜像源加速、C++ 开发环境配置到资源管控(内存/CPU 限制),系统讲解 Docker 基础操作;对比核心命令(如 create/run、save/export、rm/prune)差异,辅以复合命令(批量停容器)实战,助读者掌握 Docker 从安装到优化的完整流程。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online