Docker实战指南:MySQL、Redis与C++环境的深度容器化部署

前言

在现代软件工程体系中,Docker作为一种轻量级的虚拟化技术,已经成为快速构建、交付和运行应用程序的标准工具。通过容器化技术,开发人员能够将应用及其依赖环境打包成一个独立的单元,从而实现"一次构建,到处运行"的目标。本文将深入解析MySQL 5.7数据库、Redis 7.0缓存中间件以及基于CentOS 7的C++编译环境的容器化部署全流程。文中将涵盖镜像获取、容器实例化、网络端口映射、数据持久化操作、系统源配置以及编译工具链构建等核心知识点。

第一部分:MySQL 5.7 关系型数据库的容器化部署

MySQL作为应用最广泛的开源关系型数据库管理系统,其稳定性和成熟的生态使其成为众多项目的首选。Docker Hub提供了官方维护的MySQL镜像,极大地简化了安装配置流程。

1.1 镜像获取与版本选择

首先,需要从远程仓库拉取MySQL 5.7版本的镜像。选择5.7版本而非最新的8.0版本,通常是因为旧有系统的兼容性需求或对特定版本稳定性的考量。

执行拉取命令:

bash 复制代码
docker pull mysql:5.7

Docker不仅会下载镜像的元数据,还会分层下载文件系统。

在下载过程中,可以看到每一层(Layer)的下载状态。这种分层存储机制是Docker文件系统的核心优势,它允许不同镜像共享相同的基础层,从而节省存储空间并加快下载速度。待所有层级下载完毕并校验通过后,终端将显示下载完成的信息。

为了确认镜像已成功存储在本地宿主机中,可以使用镜像列表查询命令。该命令将列出本地所有的镜像仓库名称、标签、镜像ID、创建时间及大小。

1.2 容器实例的创建与网络映射

镜像准备就绪后,下一步是根据该镜像启动一个容器实例。在启动过程中,需要配置几个关键参数:

  • --name: 指定容器的名称,便于后续管理。
  • -e: 设置环境变量。对于MySQL而言,MYSQL_ROOT_PASSWORD是必须设置的变量,用于初始化root用户的密码。
  • -p: 配置端口映射。格式为宿主机端口:容器端口。此处将宿主机的8201端口映射到容器内部的3306标准端口,这意味着外部访问应连接8201端口。
  • -d: 指定容器在后台(Detached mode)运行。

执行如下命令:

bash 复制代码
docker run --name mysql -e MYSQL_ROOT_PASSWORD=qwe123 -p 8201:3306 -d mysql:5.7

命令执行成功后,Docker守护进程会返回一个长字符串,即该容器的唯一ID,这标志着容器已成功启动并在后台运行。

1.3 容器内部交互与数据库初始化

容器运行后,是一个独立的Linux环境。为了进行数据库操作,需要通过docker exec命令进入容器内部的交互式终端。

bash 复制代码
docker exec -it mysql bash

进入容器后,使用标准MySQL客户端命令登录数据库系统。

bash 复制代码
mysql -u root -p

此时系统会提示输入密码,需输入在启动容器时通过环境变量设置的qwe123

成功登录MySQL控制台后,可以执行SQL语句来管理数据库。首先,查看当前系统默认存在的数据库列表,以验证系统初始化的完整性。

bash 复制代码
show databases;

为了再次确认当前运行的数据库版本,执行版本查询语句。

bash 复制代码
select version();

返回结果明确显示版本为5.7.44,符合预期。

1.4 数据定义与操作实战

接下来进行实际的业务模拟操作。首先创建一个名为test_db的测试数据库。

bash 复制代码
create database test_db;

执行成功后,Query OK提示表明数据库文件已在容器内部的文件系统中建立。

使用use命令切换上下文至新建的数据库。

bash 复制代码
use test_db;

系统提示Database changed,表示后续操作均将在该数据库作用域内执行。

在当前数据库中创建一个用户表test_user,包含姓名(varchar类型)和年龄(int类型)两个字段。

bash 复制代码
create table test_user(name varchar(50),age int);
show tables;

表创建成功后,show tables命令可以查看到该表的存在。

向表中插入一条测试数据,并随即进行全表查询以验证数据写入的准确性。

bash 复制代码
insert into test_user values('kaizi','99');
select * from test_user;

查询结果清晰展示了刚才插入的记录,证明数据库的读写功能完全正常。

1.5 外部客户端连接验证

容器化的核心价值之一在于对外提供服务。此时,使用宿主机上的图形化数据库管理工具(如Navicat、DBeaver等)尝试连接该MySQL容器。连接配置中,主机地址应填写宿主机IP(或localhost),端口则填写映射出来的8201端口,而非容器内部的3306端口。

连接成功建立后,展开数据库列表,可以立刻看到刚才在容器命令行中创建的test_db数据库。

在图形化工具中打开test_user表,可以看到之前插入的kaizi, 99这条数据。这验证了容器内外网络的连通性以及数据的一致性。


第二部分:Redis 7.0 高性能键值存储的部署

Redis作为高性能的Key-Value数据库,常用于缓存、消息队列等场景。Docker容器化部署Redis能够极大地降低环境依赖配置的复杂度。

2.1 镜像拉取与检查

执行命令拉取Redis 7.0版本的镜像。

bash 复制代码
docker pull redis:7.0

Docker将自动从Registry中下载相关层文件。

下载完成后,通过镜像列表命令确认Redis镜像已存在于本地仓库中,准备随时调用。

bash 复制代码
docker images

2.2 容器启动与端口映射

启动Redis容器时,同样需要关注端口映射。Redis默认端口为6379,此处将其映射至宿主机的8090端口。

bash 复制代码
docker run --name redis -d -p 8090:6379 redis:7.0
docker ps

docker ps命令用于列出当前正在运行的容器。输出结果显示,Redis容器状态为Up,且端口映射规则0.0.0.0:8090->6379/tcp已生效。

2.3 命令行读写测试

为了验证Redis服务是否可用,进入容器内部并启动redis-cli客户端工具。

bash 复制代码
docker exec -it redis bash
redis-cli

在CLI中进行基础的键值对设置与获取操作。

bash 复制代码
set sellcount 1
get sellcount

操作结果显示,键sellcount被成功设置为1,并能被正确读取。

2.4 外部GUI工具连接验证

使用Redis Desktop Manager或类似的图形化工具进行连接测试。连接参数中主机地址为宿主机IP,端口为8090。连接测试通过提示"Connection successful"。

进入GUI界面后,浏览数据库键值空间,可以直观地发现之前通过命令行设置的sellcount键及其对应的值1。至此,Redis容器化部署及外部访问配置全部完成。


第三部分:构建基于CentOS 7的C++编译开发环境

除了部署现成的应用服务(如MySQL、Redis),Docker常被用于构建标准化的开发或编译环境。本节将演示如何在CentOS 7的基础镜像上,解决官方源失效问题,并安装GCC编译器,最终编译运行C代码。

3.1 基础操作系统镜像准备

拉取CentOS 7的基础镜像。CentOS 7因其在服务器领域的广泛应用,常被选作基础运行环境。

bash 复制代码
docker pull centos:7

启动容器并直接进入交互模式(Interactive Mode)。参数-it-i(交互式)和-t(分配伪终端)的组合,这使得用户可以直接在容器内获得一个Bash Shell。

bash 复制代码
docker run -it --name mycpp centos:7 bash

命令执行后,命令提示符从宿主机切换到了容器内部(例如 [root@容器ID /]#),表明当前已处于容器的文件系统中。

此时,若在宿主机开启另一个终端窗口执行docker ps,可以看到名为mycpp的容器正在运行,执行的命令为bash

3.2 解决YUM源失效问题(关键步骤)

由于CentOS 7已停止维护(EOL),官方的yum源地址大多已失效或归档,直接使用yum install往往会报错。因此,配置可用的第三方镜像源是构建环境的第一步。

首先,备份原有的repo配置文件,以防后续操作失误需要恢复。

bash 复制代码
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

接着,下载国内(如阿里云)提供的CentOS 7镜像源配置文件。由于部分精简版容器可能未预装wget,优先尝试使用curl命令。

bash 复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

若环境中已包含wget,也可使用:

bash 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

这一步将替换yum主要配置文件,指向依然提供服务的镜像站点。

配置更改后,必须清理旧的yum缓存,防止元数据冲突。

bash 复制代码
yum clean all

系统将提示正在清理仓库缓存。

随后,重建yum缓存,这一步会从新的镜像源下载软件包的元数据,建立本地索引,确保后续安装软件时能正确索引到包文件。

bash 复制代码
yum makecache

当看到Metadata Cache Created提示时,说明源配置成功。

3.3 GCC编译工具链安装

在源配置无误后,开始安装GNU编译器集合(GCC)。

bash 复制代码
yum install gcc

Yum会自动解析依赖关系,下载并安装GCC及其所需的库文件(如glibc-devel, kernel-headers等)。

安装过程中需确认安装提示(输入y或使用-y参数)。待出现Complete!字样,表明编译环境已就绪。

3.4 C语言代码编写与编译运行

为了验证环境,编写一段简单的C代码。可以使用容器内自带的编辑器(如vi)创建一个名为code.c的文件。文件中包含标准的输入输出逻辑。

保存文件后,调用GCC进行编译。-o参数用于指定输出的可执行文件名。

bash 复制代码
gcc code.c -o code

若代码无语法错误,编译器将静默完成编译,生成名为code的可执行文件。

最后,在当前目录下运行该程序。

bash 复制代码
./code

程序成功输出预期的结果,证明该基于Docker的CentOS 7 C++编译环境已构建完整且功能正常。


总结

本文详细记录了在Docker环境下部署数据库服务(MySQL)、缓存服务(Redis)以及构建自定义开发环境(CentOS+GCC)的全过程。从镜像的获取、容器的参数化启动、网络端口的映射机制,到容器内部的系统配置与源切换,每一个步骤都紧密结合实际操作场景。这种容器化的部署方式,不仅隔离了应用环境,避免了宿主机环境的污染,更极大地提升了环境搭建的效率与可移植性,是现代DevOps流程中的基石。

相关推荐
Mr_sun.4 小时前
Docker中安装软件汇总(留存版)
运维·docker·容器
武子康4 小时前
Java-189 Guava Cache 源码剖析:LocalCache、Segment 与 LoadingCache 工作原理全解析
java·redis·后端·spring·缓存·guava·guava cache
共享家95274 小时前
MySQL 数据类型
android·数据库·mysql
Chloeis Syntax4 小时前
MySQL初阶学习日记(5)--- 联合查询
java·笔记·学习·mysql
惊鸿Randy4 小时前
Spring Boot 应用 Docker 部署完整指南
spring boot·docker
思成不止于此4 小时前
【MySQL 零基础入门】DQL 核心语法(三):学生表排序查询与分页查询篇
数据库·笔记·学习·mysql
计算机学姐4 小时前
基于Python的高校后勤报修系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
moluzhui4 小时前
mysql 修复插入零日期报错
数据库·mysql
不会c嘎嘎4 小时前
MySQL -- 深入剖析事务底层原理
数据库·mysql