Dockerfile 安装Centos7、MySQL和Redis

devtools/2024/9/22 14:22:18/

为了创建一个包含 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.ppmy.cn/devtools/115496.html

相关文章

es6 和 commonJS 模块管理的区别

ES6 模块和 CommonJS 模块是两种广泛使用的 JavaScript 模块化方案。它们之间有许多显著的区别,包括语法、特性、运行时行为、兼容性等方面。 1. 模块引入背景 在 JavaScript 语言发展早期,并没有提供官方的模块化机制。随着应用规模的增加&#xff0c…

学习笔记JVM篇(五)

JVM常用命令参数 1、JPS JPS全称 Java Process Status Tool,这个命令与Liunx的PS很像,下面我们测试一下这个命令,首先编写一段非常简单的Java代码。 JPS的语法 JPS [options] [hostid] options:选项 -q: 只显示进程 ID (PID)…

【C++】—— string模拟实现

前言&#xff1a; 学习了string的使用&#xff0c;总感觉了解不是很深厚&#xff1b;自己模拟实现string类来帮助自己理解。 这里只是实现了一部分内容&#xff08;并没有实现完整的string类&#xff09;。 先来实现string类里面的成员变量&#xff1a; #include<iostream…

python qt5 常用

QT5中如何设置让窗口根据屏幕比例显示设置&#xff1f; desktop QDesktopWidget().screenGeometry() self.resize(int(desktop.width() * 0.3), int(desktop.height()*0.5)) QT5中关于背景穿透问题的处理方式&#xff1f; 场景如下&#xff1a;我们在开发的时候&#xff0c…

【C语言】数据类型和变量

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 数据类型1.1 字符1.2 整型1.3 浮点型1.4 布尔类型 2. signed和unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#xff1a;、-、*、/、%5.1 和 -5.2 *5.3 /5.4 % 6. 赋值操作符…

网络丢包定位记录(一)

数据在Internet上是以数据包为单位传输的&#xff0c;单位为字节&#xff0c;数据在网络上传输&#xff0c;受网络设备&#xff0c;网络质量等原因的影响&#xff0c;使得接收到的数据少于发送出去的数据&#xff0c;造成丢包。 数据包接收、发送原理 发送数据包&#xff1a; …

策略模式+模版模式+工厂模式

1. 抽象类 /*** 策略模式&#xff1a;不同类型选择不同的实现策略* */ public interface AbstractStrategy {/*** 模版模式&#xff1a;不同策略实现同一接口的共性部分&#xff08;公共方法&#xff09;* */default void commentMeth(){System.out.println("模版方法&qu…

【STM32】esp8266通过MQTT连接服务器|订阅发布

1. MQTT协议 该协议为应用层协议&#xff0c;传输层使用的是tcp,MQTT的订阅和发布&#xff0c;就相当于在抖音中你关注了某个领域的博主&#xff08;订阅&#xff09;&#xff0c;如果有其他人发了作品就会推给你&#xff08;发布&#xff09;&#xff0c;默认已经安装好了 简…