Dockerfile 安装Centos7、MySQL和Redis

为了创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像,并持久化 MySQL 和 Redis 的数据,需要:

  1. 编写 Dockerfile 安装 CentOS 7、MySQL 和 Redis。
  2. 在运行 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

解释

  1. 基础镜像

    • 使用官方的 CentOS 7 镜像作为基础镜像。
  2. 设置环境变量

    • 设置 MySQL 的 root 密码、数据库名称、用户和密码。
  3. 更新系统并安装必要的软件包

    • 使用 yum 更新系统,并安装 epel-releasewgetvimnet-tools
  4. 安装 MySQL

    • 下载 MySQL 的社区版 RPM 包并安装。
    • 安装 MySQL 服务器。
  5. 安装 Redis

    • 安装 Redis。
  6. 创建数据目录并设置权限

    • 创建 MySQL 和 Redis 的数据目录,并设置相应的权限。
  7. 暴露端口

    • 暴露 MySQL 默认端口 3306 和 Redis 默认端口 6379。
  8. 启动 MySQL 和 Redis 服务

    • 在容器启动时,使用 mysqld_saferedis-server 启动 MySQL 和 Redis 服务。
    • 使用 tail -f /dev/null 命令保持容器运行。
  9. 持久化数据

    • 使用 -v 参数将主机上的目录挂载到容器内的 /var/lib/mysql/var/lib/redis 目录,以持久化 MySQL 和 Redis 的数据。

持久化数据的路径

在运行容器时,需要指定主机上的目录来挂载到容器内:

  • /data/docker/mysql-data:主机上用于存储 MySQL 数据的目录。
  • /data/docker/redis-data:主机上用于存储 Redis 数据的目录。

请确保这些目录存在,并具有适当的权限。

总结

通过编写这个 Dockerfile 并运行容器,可以创建一个包含 CentOS 7、MySQL 和 Redis 的 Docker 镜像,并通过挂载数据卷来持久化 MySQL 和 Redis 的数据。这种方法确保了容器重启或删除后,数据依然保存在主机的指定目录中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言并发编程之select语句详解

在Go语言的并发模型中,channel是用于在goroutine之间进行通信的主要工具,而select语句则是将多个channel结合在一起的关键机制。通过select语句,开发者可以同时监控多个channel的状态,从而构建更为复杂和灵活的并发逻辑。本文将详细介绍select语句的原理和用法,并通过多个…

【Git】Clone

当git clone失败时,出现如下错误,可能由于网络连接不稳定或仓库太大导致的。 RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8) error: 160 bytes of body are still expectedB | 158.00 KiB/s fetch-pack: unexpected disc…

【60天备战2024年11月软考高级系统架构设计师——第23天:系统架构设计原则——模块化设计】

模块化设计是一种将系统划分为若干独立模块的设计方式,每个模块都具备相对独立的功能,可以单独开发、测试和维护。模块化设计的核心思想是通过模块的划分,减少系统的复杂度,提升系统的可扩展性和可维护性。 模块化设计的核心思想…

murmur 算法

简介 MurmurHash是一种高效的非加密哈希函数,适用于哈希表中的一般哈希任务。 MurmurHash的名称来源于Murmur,意为一种低频的声音,体现了其设计的低碰撞率和高性能。 名称来自两个基本操作,乘法(MU)和旋转…

hive分区详细教程

为什么要分区? 为了提高sql的查询效率 比如: select * from orders where create_date20230826; 假如数据量比较大,这个sql就是全表扫描,速度肯定慢。 可以将数据按照天进行分区,一个分区就是一个文件夹,当…

中序遍历二叉树全过程图解

文章目录 中序遍历图解总结 中序遍历图解 首先看下中序遍历的代码,其接受一个根结点root作为参数,判断根节点是否为nil,不为nil则先递归遍历左子树。 func traversal(root *TreeNode,res *[]int) {if root nil {return}traversal(root.Lef…

华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互

场景介绍 本章节将向您介绍如何使用地图的手势。 Map Kit提供了多种手势供用户与地图之间进行交互,如缩放、滚动、旋转和倾斜。这些手势默认开启,如果想要关闭某些手势,可以通过MapComponentController类提供的接口来控制手势的开关。 接口说明 以下是地图的控件和手势相…

【LLM多模态】文生视频评测基准VBench

note VBench的16个维度自动化评估指标代码实践(待完成)16个维度的prompt举例人类偏好标注:计算VBench评估结果与人类偏好之间的相关性、用于DPO微调 文章目录 note一、相关背景二、VBench评测基准概述:论文如何解决这个问题&…

RAII 与 std::lock_guard 在 C++ 中的应用:自动化互斥锁管理与线程安全

目录 1. RAII(资源获取即初始化)概述 RAII 的优点 2. std::lock_guard 的工作原理 2.1 构造函数 2.2 析构函数 2.3 关键特性 3. 为什么 std::lock_guard 能自动管理锁的生命周期 3.1 RAII 原则的应用 3.2 异常安全 3.3 简化代码和减少错误 4.…

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&#xff09…

【SQL】NVL函数的用法和MySQL中有什么不同

一、在Oracle数据库中,NVL函数的用法和MySQL中有什么不同? 在Oracle数据库中,NVL 函数用于将 NULL 值替换为指定的值。如果第一个参数不是 NULL,NVL 函数返回第一个参数的值;如果第一个参数是 NULL,它返回…

RNN的反向传播

目录 1.RNN网络:通过时间反向传播(through time back propagate TTBP) 2.RNN梯度分析 2.1隐藏状态和输出 2.2正向传播: 2.3反向传播: 2.4问题瓶颈: 3.截断时间步分类: 4.截断策略比较 5.反向传播的细节 ​编辑…

植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面

一、介绍 植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片(‘细菌性叶枯病’, ‘稻瘟病’, ‘褐斑病’, ‘稻瘟条纹病毒病’)作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算…

【后端开发】JavaEE初阶—线程的理解和编程实现

前言: 🌟🌟本期讲解多线程的知识哟~~~,希望能帮到屏幕前的你。 🌈上期博客在这里:【后端开发】JavaEE初阶——计算机是如何工作的???-CSDN博客 🌈感兴趣的小伙…

Tomcat中BIO和NIO的区别(Tomcat)

BIO Tomcat中BIO的模型和理论很简单,例图如下 1.Acceptor线程死循环阻塞接收客户端的打过来的socket请求 2.接收到请求之后打包成一个SocketProcessor(Runnable),扔到线程池中读取/写入数据 参数配置 1.Acceptor默认线程是1&#…

【Godot4.x】Mesh相关知识总结

概述 很早之前发布过一篇关于几何体程序生成的文章,当时对于三角面和网格的构造其实还没有特别深入的认识,直到自己脑海里想到用二维数组和点更新的方式构造2D类型的多边形Mesh结构,也意识到在Godot中其实Mesh不仅是3D网格,也可以…

如何通过 SSH 配置和部署项目:详细指南

以下是关于 SSH 配置和部署的详细博文,可以帮助用户快速配置服务器和本地机器之间的 SSH 连接并进行项目部署: 如何通过 SSH 配置和部署项目:详细指南 在远程管理服务器或部署项目时,SSH(Secure Shell)是非…

分子动力学工具篇二:Sobtop的安装与使用

文章目录 1. Sobtop的介绍1. Sobtop 的功能和特点2.主要应用场景 2.3.常见问题及解决方法 1. Sobtop的介绍 Sobtop 是一个用于自动生成分子拓扑文件的工具,特别是为 GROMACS 分子动力学模拟准备拓扑结构和参数。它的设计目标是通过自动化过程生成小分子、聚合物或其…

msvcp140.dll0丢失的解决方法,总结6种靠谱的解决方法

再使用计算机的过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。这个问题可能会影响到我们的正常使用,因此需要及时解决。经过一段时间的学习和实践,我总结了以下六种靠谱的解决方法,希望对大家…

linux如何查看当前的目录所在位置

在Linux系统中,查看当前目录所在位置的常用命令是 pwd,它代表 "print working directory"(打印工作目录)。当你在终端中输入 pwd 并按下回车键时,它会显示当前所在的完整路径。 打开终端,然后输…