Docker部署MySQL、Redis、Kafka、ES、Kibana
mhr18 2025-04-07 16:23 28 浏览 0 评论
Docker
Docker的基础概念和安装就不多讲了,参考官网学习就行。
https://www.docker.com/
https://docs.docker.com/engine/install/
镜像仓库
https://hub.docker.com/explore
https://hub.docker.com/search?badges=official
hub.docker已经提供了非常多的镜像,一般情况来讲使用官方镜像就好了。
如:
https://hub.docker.com/_/mysql
官方写的也相当明白,如何使用镜像,运行容器可以配置那些参数,日志等
还包括进入容器执行命名、查看文件等等
Docker Compose
Docker Compose 相较于单独使用 docker run 命令有很多优势,特别是在管理多容器应用时。
1. 简化复杂环境的配置
- 多容器管理:当您的应用程序由多个服务组成(如前端、后端、数据库等),使用 docker run 需要为每个服务单独启动容器,并手动配置它们之间的网络和依赖关系。而 Docker Compose 可以通过一个简单的 docker-compose.yml 文件定义所有服务及其配置。
- 统一配置文件:所有服务的配置都集中在一个 YAML 文件中,易于阅读和维护。
2. 自动化服务依赖
- 自动处理依赖:在 docker-compose.yml 中可以指定服务之间的依赖关系。例如,您可以设置 MySQL 服务必须在应用服务之前启动。Docker Compose 会确保这些依赖关系得到满足。
- 重启策略:可以定义重启策略来保证服务的高可用性,比如某个服务失败后自动重启。
3. 网络配置简化
- 内置网络管理:Docker Compose 自动创建一个默认网络供所有服务使用,使得容器间通信变得非常简单。您不需要手动创建和管理网络。
- 自定义网络:虽然可以手动创建网络并在 docker run 中指定,但 Docker Compose 提供了更简洁的方式来自定义网络。
4. 环境变量管理
- .env 文件支持:Docker Compose 支持从 .env 文件加载环境变量,这使得管理和切换不同环境下的配置更加容易。
- 环境变量文件:还可以通过 env_file 指令引用外部环境变量文件,进一步增强灵活性。
5. 卷和绑定挂载的便捷配置
- 持久化存储:在 Docker Compose 文件中,可以通过简单的声明来配置卷或绑定挂载,从而轻松实现数据持久化。
- 一致的开发与生产环境:可以在不同环境中复用相同的配置,只需调整少量参数即可适应不同的部署场景。
6. 命令行简化
- 单命令操作多个容器:使用 docker-compose up 即可一次性启动所有定义的服务,而无需分别执行 docker run 命令。
- 便捷的生命周期管理:除了启动服务外,还可以使用 docker-compose down 来停止并移除所有相关容器、网络和卷。
7. 版本控制友好
- YAML 格式便于版本控制:将 docker-compose.yml 文件纳入版本控制系统(如 Git)中,便于团队协作和历史记录追踪。
- 回滚方便:如果需要恢复到之前的配置版本,只需切换到相应的分支或标签即可。
8. 扩展性和伸缩性
- 轻松扩展服务实例数:通过 docker-compose scale 或者在 docker-compose.yml 中定义 deploy 部分,可以轻松地增加或减少服务实例的数量。
- 负载均衡:对于Web应用等场景,Docker Compose 能够结合 Docker Swarm 实现负载均衡。
示例对比
假设我们要部署一个包含 MySQL 和 Redis 的应用:
使用 docker run
# 启动 MySQL 容器
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
# 启动 Redis 容器
docker run --name some-redis -d redis:alpine
使用 Docker Compose
version: '3'
services:
db:
image: mysql:tag
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
redis:
image: redis:alpine
只需运行 docker-compose up -d 即可同时启动这两个服务,并且它们之间能够自动发现对方(如果在同一网络下)。
Docker Compose 提供了一种更为高效、灵活的方式来管理和部署复杂的多容器应用,特别适合开发、测试以及小规模生产环境中的快速部署需求。
示例Compose
https://github.com/wnhyang/coolGuard
也是此项目的部署方式
.env
mysql_root_password=mysql_password
mysql_database=mysql_database
mysql_user=mysql_user
mysql_password=mysql_password
redis_password=redis_password
elasticsearch_password=elasticsearch_password
kibana_password=kibana_password
kibana_url=http://localhost:5601
coolguard_image=coolguard_image
docker-compose.yml
services:
mysql:
image: mysql:8.0.36
container_name: mysql
volumes:
- mysqldata:/var/lib/mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_HOST: 'localhost'
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: ${mysql_root_password}
MYSQL_DATABASE: ${mysql_database}
MYSQL_USER: ${mysql_user}
MYSQL_PASSWORD: ${mysql_password}
networks:
- custom_network
redis:
image: redis:7.2.7-alpine
container_name: redis
command: redis-server --requirepass ${redis_password}
volumes:
- redisdata:/data
ports:
- "6379:6379"
environment:
TZ: Asia/Shanghai
networks:
- custom_network
kafka:
image: apache/kafka:3.7.0
container_name: kafka
volumes:
- kafkadata:/var/lib/kafka/data
ports:
- "9092:9092"
- "9093:9093"
environment:
KAFKA_NODE_ID: 1
KAFKA_LOG_DIRS: /var/lib/kafka/data
KAFKA_METADATA_LOG_REPLICATION_FACTOR: 1
KAFKA_DEFAULT_REPLICATION_FACTOR: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_NUM_PARTITIONS: 3
TZ: Asia/Shanghai
networks:
- custom_network
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.17.3
container_name: elasticsearch
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xms1g -Xmx1g"
discovery.type: single-node
ELASTIC_PASSWORD: ${elasticsearch_password}
xpack.security.enabled: "true"
xpack.security.http.ssl.enabled: "false"
xpack.security.transport.ssl.enabled: "false"
TZ: Asia/Shanghai
networks:
- custom_network
kibana:
depends_on:
- elasticsearch
image: docker.elastic.co/kibana/kibana:8.17.3
container_name: kibana
volumes:
- kibanadata:/usr/share/kibana/data
ports:
- "5601:5601"
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ELASTICSEARCH_USERNAME: kibana
ELASTICSEARCH_PASSWORD: ${kibana_password}
SERVER_PUBLICBASEURL: ${kibana_url}
XPACK_SECURITY_ENABLED: "true"
XPACK_SECURITY_HTTP_SSL_ENABLED: "false"
TZ: Asia/Shanghai
networks:
- custom_network
coolguard:
image: ${coolguard_image}
container_name: coolguard
volumes:
- /docker/coolguard/logs:/coolguard/logs
ports:
- "8081:8081"
environment:
- "SPRING_PROFILES_ACTIVE=demo"
networks:
- custom_network
volumes:
mysqldata:
driver: local
redisdata:
driver: local
kafkadata:
driver: local
esdata:
driver: local
kibanadata:
driver: local
networks:
custom_network:
driver: bridge
运行
在docker-compose.yml同目录执行
# 单独运行
docker compose up -d
# 一起运行
docker compose up -d
或指定
- -f 参数 指定 docker-compose.yml 文件的路径
- -p 参数 指定项目名,默认不指定时使用当前目录名作为项目的名称
docker-compose -f /home/user/projects/myapp/docker-compose.yml -p myapp up -d mysql redis
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)