Docker-compose下配置Mysql,Redis,MongoDB详解

  • 一、docker-compose简介
  • 二、构建一个实例项目
    • 1.前后端实现
    • 2.Dockerfile及docker-compose.yml
    • 3. 生成镜像
  • 三、实例程序源码

一、docker-compose简介

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
使用Compose基本上是一个三步过程:

  1. 使用Dockerfile定义你的应用环境,以便可以在任何地方复制它。
  2. 用docker-compose.yml定义组成应用程序的服务, 以便它们可以在隔离的环境中一起运行。
    docker-compose.yml主要结构:
①. version:         #版本
②. services:        #服务redis:    #服务一depends_on:     #依赖于哪个服务,它会在依赖的服务启动之后再启动image:build:network:volumes:redis:    #服务二web:      #服务三
③. 其他设置(网络卷、全局规则)volumes:networks:configs:
  1. 运行docker compose up或docker compose up -d(后台运行)运行您的整个应用程序。
    注意:每次修改任一配置文件后,都要使用 docker-compose up --build 重新构建
    总结:有了docker-compose,当我们想启动多个服务时,无需再一个一个进行docker run操作,而只需要编写docker-compose.yml配置文件,即可一次运行你的全部服务。

二、构建一个实例项目

这里给出的实例,Web框架使用Spring-boot,并同时使用Mysql,Redis,MongoDB这三个现在最常见的数据库,对其进行简单的计数操作。(即每访问一次网页,三个库中的计数器分别加一)

1.前后端实现

//实现每次点击网页,对各个数据库进行累加,并返回当前的计数器记录的数值。
@RequestMapping("/")public String home(Model model){int bef1 = mysqlMapper.selectMysql();mysqlMapper.changeMysql();int res1 = mysqlMapper.selectMysql();model.addAttribute("mysqlbef", bef1);model.addAttribute("mysqlres", res1);model.addAttribute("redisres", redisTemplate.opsForValue().increment("age"));Query query = new Query(Criteria.where("name").is("5yw"));List<Map> list = mongoTemplate.find(query, Map.class,  "hellomongodb");int bef3 = (int) list.get(0).get("age");//****************************************************************************************************Update update = new Update();update.set("age", bef3 + 1);mongoTemplate.updateFirst(query, update, "hellomongodb");//****************************************************************************************************List<Map> list1 = mongoTemplate.find(query, Map.class,  "hellomongodb");int res3 = (int) list1.get(0).get("age");model.addAttribute("mongobef", bef3);model.addAttribute("mongores", res3);return "Page/home.html";}
<!-- 前端接收后端传递的参数并显示 -->
<span id="mysql"></span>
<hr>
<span id="redis"></span>
<hr>
<span id="mongo"></span>
</body>
<script>var message1 = "Mysql更新后:" +[[${mysqlres}]];var message2 = "Redis更新后:" +[[${redisres}]];var message3 = "Mongo更新后:" +[[${mongores}]];document.getElementById("mysql").textContent = message1;document.getElementById("redis").textContent = message2;document.getElementById("mongo").textContent = message3;
</script>

2.Dockerfile及docker-compose.yml

Dockerfile将我们Springboot打包的jar包,装配成为docker的镜像,以在docker中运行。

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER 5yw <w1596253661@gmail.com>
# 将jar包添加到容器中并更名为app.jar
ADD dockerweb-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
ENTRYPOINT ["java","-jar","/app.jar"]

docker-compose.yml是docker-compose的核心配置文件,docker将会根据这个配置文件进行镜像的构建以及运行,在类似于我们这类需要启用多个镜像(web,mysql,redis,mongo)的项目,docker-compose减少了我们很多的工作量。(即我们无需对每个镜像依次进行run操作)

version: '3.8'
services:dockerweb:build: .depends_on:          # 使web项目在数据库均运行之后再运行- mysql- redis- mongoports:- 8000:8000              # 配置端口映射(主机端口:容器端口)mysql:image: 'mysql'environment:MYSQL_ROOT_PASSWORD: 123456    # 配置Mysql密码MYSQL_USER: rootMYSQL_PASS: 123456container_name: "mysql"restart: alwaysports:- 3306:3306volumes:          # 卷挂载- /home/ostrich5yw/Desktop/DockerCompose/mysql/db:/var/lib/mysql- /home/ostrich5yw/Desktop/DockerCompose/mysql/log:/var/log/mysql- /home/ostrich5yw/Desktop/DockerCompose/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnfredis:image: 'redis'container_name: "redis"restart: alwaysvolumes:- /home/ostrich5yw/Desktop/DockerCompose/redis/data:/data      # 主机路径:容器路径- /home/ostrich5yw/Desktop/DockerCompose/redis/redis.conf:/etc/redis/redis.confmongo:image: 'mongo'environment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: 123456container_name: "mongo"restart: alwaysvolumes:- /home/ostrich5yw/Desktop/DockerCompose/mongo/db:/data/db- /home/ostrich5yw/Desktop/DockerCompose/mongo/log:/data/logsports:- 27017:27017

尤其要注意这里的service名称(例如dockerweb),这里的名称,docker-compose会将他们对应成相应的域名。
例如我们如果要访问mysql,一般是192.168.0.xxx:3306,而当我们有域名时,只需要写为mysql:3306即可
在有多个服务时,比如Mysql1在192.168.0.1,Mysql2在192.168.0.2,我们只需要写为mysql:3306而无需指定IP。

3. 生成镜像

我们将编写的docker-compose.yml,Dockerfile以及导出的jar包放入同一文件夹,并建立配置文件中描述的三个挂载文件夹。

我们运行docker-compose up运行镜像。
项目运行后,我们需要为Mysql与MongoDB导入初始数据。

docker exec -it mysql /bin/bash 进入Mysql镜像

  • mysql -uroot -p 123456
  • create database test;
  • use test;
  • CREATE TABLE hellomysql (
    name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
    age int(11) NULL DEFAULT NULL
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
  • INSERT INTO hellomysql VALUES (‘5yw’, 0);

docker exec -it mongo /bin/bash 进入MongoDB镜像

  • mongo 127.0.0.1:27017/admin -u root -p 123456
  • use test;
  • db.createCollection(“hellomongodb”)
  • db.getCollection(“hellomongodb”).insert( {
    _id: ObjectId(“5feac4fba4de87481cd2139b”),
    name: “5yw”,
    age: NumberInt(“0”)
    } );
  • exit

通过另一个窗口,输入curl localhost:8000查看结果。

三、实例程序源码

https://gitee.com/Ostrich5ywtt/dockerweb

Docker-compose配置Mysql,Redis,MongoDB相关推荐

  1. Docker Compose运行MySQL、Redis服务

    Docker Compose运行MySQL.Redis服务 前言:通过容器来统一管理开发中使用到的依赖,顺便学习docker-compose 1.docker-compose.yml 文件说明 2.d ...

  2. monit mysql_monit配置监控启动nginx php mysql redis mongodb 服务器

    -----nginx php mysql redis mongodb 配置 完美OK------– # nginx check process nginx withpidfile /usr/local ...

  3. Docker Compose配置springboot微服务项目

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  4. 使用Docker Compose安装mysql

    使用Docker Compose安装mysql 1运行 安装 Docker Compose 运行以下命令以下载 Docker Compose 的当前稳定版本:$ sudo curl -L " ...

  5. 使用docker compose部署MySQL主从复制集群

    使用docker compose部署MySQL主从复制集群 环境说明 宿主机:Ubuntu 14.04.6 LTS Docker Engine: 18.06.3-ce docker compose: ...

  6. Linux系统:第十二章:AWS服务器X86架构安装配置Mysql与MongoDB

    sudo passwd root root su root cd /usr/local/ chmod 777 /usr/local/ 上传文件到/usr/local下 安装MongoDB (安装文件: ...

  7. 快速部署PHP Web环境(docker nginx php mysql redis)

    注:此项目已升级成 通用 docker 项目自动化部署脚本工具 先看最终效果,如下: 使用方式 debian/ubuntu/deepin: sudo wget -O /tmp/src.tar.gz h ...

  8. 数据库—MySql—Redis—MongoDB—Http协同流程

    目录 MySql Mysql中char和varchar有什么区别? Mysql中float和double的区别是什么? Mysql中date和datetime类型的区别? Mysql中sql语句执⾏的 ...

  9. Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控

    背景: Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案,具体的安装和使用说明请见官网:http://open-falcon.org/,是一款比较全的监控.而且提供各种API ...

  10. Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群

    前言 随着应用业务数据不断的增大,应用的 响应速度不断下降,在检测过程中我们不难发现大多数的请求都是 查询操作.此时,我们可以将数据库扩展成 主从复制模式,将 读操作 和 写操作 分离开来,多台数据库 ...

最新文章

  1. hive2.3.2安装使用
  2. canvas绘制时钟
  3. Ubuntu 12.10 下 详细Netbeans安装配置篇 (下)
  4. 设计模式:外观模式(Facade)
  5. 最小平方误差判别 MSE
  6. 邮箱批量登录接验证码_记一次莫名的需求(临时邮箱|企业邮箱)
  7. c# 指定打开某个路径下的CMD_【自学C#】|| 笔记 25 文件的操作
  8. java 自动生成mybatis文件_如何自动生成Mybatis的Mapper文件详解
  9. MySQL 定时任务event
  10. js格式化日期或者日期时间
  11. Ubuntu16.04关闭笔记本触摸板
  12. 机器学习?有无监督、弱监督、半监督、强化、多示例学习是什么
  13. 消息总线VS消息队列
  14. html excel2007打开很慢,excel打开很慢,教您Excel表格打开后很卡很慢怎么办
  15. 欧拉降幂公式模板hdu4704
  16. 挑战微软 + GitHub!谷歌联手 Replit,升级 AI 编程“神器”:曾拒绝微软 10 亿美元的收购...
  17. 深度解读扫地机器人的导航原理
  18. 【读书笔记】雄性衰落
  19. eclipse配置python开发环境_Python开发环境配置步骤
  20. 2.6-2.7 向量运算的基本性质零向量

热门文章

  1. 13 代码分割之import静动态导入
  2. centos忘记root用户的密码
  3. 《领域特定语言》一1.5使用代码生成
  4. 【暴力】Codeforces Round #398 (Div. 2) A. Snacktower
  5. Linux网卡eth0变成eth1修改方法
  6. opacity用法:
  7. iDempiere = OSGi + ADempiere 一款ERPCRMSCM系统、助力中小企业发展
  8. 20100506网络互联技术实验
  9. IP、TCP、UDP数据包长度问题
  10. HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测