为了创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像,并持久化 MySQL 和 Redis 的数据,需要:
- 编写 Dockerfile 安装 CentOS 7、MySQL 和 Redis。
- 在运行 Docker 容器时挂载数据卷来持久化数据。
以下是一个示例 Dockerfile,以及如何构建和运行 Docker 容器以持久化数据。
Dockerfile 示例
# 使用官方的 CentOS 7 镜像作为基础镜像
FROM centos:7# 设置环境变量以避免在安装过程中交互提示(不创建数据库可以删除MYSQL_DATABASE)
ENV MYSQL_ROOT_PASSWORD=rootpassword
ENV MYSQL_DATABASE=mydatabase
ENV MYSQL_USER=myuser
ENV MYSQL_PASSWORD=mypassword# 更换 CentOS 的软件源为阿里云
RUN set -e && \echo "更换 CentOS 软件源为阿里云..." && \mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \yum clean all && \yum makecache# 更新系统并安装必要的软件包
RUN yum -y update && \yum -y install epel-release && \yum -y install wget vim net-tools# 安装 MySQL
RUN rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 && \wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm && \rpm -Uvh mysql80-community-release-el7-3.noarch.rpm && \yum -y install mysql-server# 安装 Redis
RUN yum -y install redis# 创建数据目录并设置权限
RUN mkdir -p /var/lib/mysql /var/lib/redis && \chown -R mysql:mysql /var/lib/mysql && \chown -R redis:redis /var/lib/redis# 暴露 MySQL 和 Redis 的端口
EXPOSE 3306 6379# 启动 MySQL 和 Redis 服务
CMD ["/bin/bash", "-c", "mysqld_safe & redis-server --daemonize no & tail -f /dev/null"]
构建 Docker 镜像
在 Dockerfile 所在目录下,运行以下命令来构建 Docker 镜像:
docker build -t centos7-mysql-redis .
持久化数据并运行 Docker 容器
使用 Docker 卷来持久化 MySQL 和 Redis 的数据。以下命令创建并运行容器,同时挂载数据卷:
docker run -d --name mycontainer \-v /data/docker/mysql-data:/var/lib/mysql \-v /data/docker/redis-data:/var/lib/redis \-p 3306:3306 \-p 6379:6379 \centos7-mysql-redis
解释
-
基础镜像:
- 使用官方的 CentOS 7 镜像作为基础镜像。
-
设置环境变量:
- 设置 MySQL 的 root 密码、数据库名称、用户和密码。
-
更新系统并安装必要的软件包:
- 使用
yum
更新系统,并安装epel-release
、wget
、vim
和net-tools
。
- 使用
-
安装 MySQL:
- 下载 MySQL 的社区版 RPM 包并安装。
- 安装 MySQL 服务器。
-
安装 Redis:
- 安装 Redis。
-
创建数据目录并设置权限:
- 创建 MySQL 和 Redis 的数据目录,并设置相应的权限。
-
暴露端口:
- 暴露 MySQL 默认端口 3306 和 Redis 默认端口 6379。
-
启动 MySQL 和 Redis 服务:
-
持久化数据:
持久化数据的路径
在运行容器时,需要指定主机上的目录来挂载到容器内:
请确保这些目录存在,并具有适当的权限。
总结
通过编写这个 Dockerfile 并运行容器,可以创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像,并通过挂载数据卷来持久化 MySQL 和 Redis 的数据。这种方法确保了容器重启或删除后,数据依然保存在主机的指定目录中。