Docker-compose配置Mysql,Redis,MongoDB

一、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
      - mongo
    ports:
    - 8000:8000				# 配置端口映射(主机端口:容器端口)
  mysql:
    image: 'mysql'
    environment:
      MYSQL_ROOT_PASSWORD: 123456    # 配置Mysql密码
      MYSQL_USER: root
      MYSQL_PASS: 123456
    container_name: "mysql"
    restart: always
    ports:
    - 3306:3306
    volumes:			# 卷挂载
    - /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.cnf

  redis:
    image: 'redis'
    container_name: "redis"
    restart: always
    volumes:
    - /home/ostrich5yw/Desktop/DockerCompose/redis/data:/data		# 主机路径:容器路径
    - /home/ostrich5yw/Desktop/DockerCompose/redis/redis.conf:/etc/redis/redis.conf
  mongo:
    image: 'mongo'
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    container_name: "mongo"
    restart: always
    volumes:
      - /home/ostrich5yw/Desktop/DockerCompose/mongo/db:/data/db
      - /home/ostrich5yw/Desktop/DockerCompose/mongo/log:/data/logs
    ports:
      - 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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker是一种容器化解决方案,Docker Compose可以简化多个容器的管理和部署流程。Nacos是一个用于服务发现、配置管理和动态DNS服务的开源平台。Node.js是一个基于JavaScript的开源、跨平台的运行时环境,用于构建可扩展的网络应用程序。MongoDB是一个高性能、文档型NoSQL数据库,适用于处理大量的结构化和非结构化数据。MySQL是一个开源的关系型数据库管理系统,用于存储和管理结构化数据。Redis是一个基于内存的高性能键值存储系统,用于缓存和数据持久化。Seata是一个开源的分布式事务解决方案,用于保证分布式系统中的数据一致性。 通过Docker Compose,我们可以轻松地将这些不同的组件和服务以容器化的方式部署在一台或多台服务器上。我们可以使用Docker Compose的配置文件定义每个服务的镜像、端口映射、环境变量等设置。在这个场景中,我们可以将Nacos、Node.js、MongoDBMySQLRedis和Seata分别作为独立的服务进行定义。 使用Docker Compose可以简化部署过程,只需运行一个命令即可启动整个应用程序的容器群组。Docker会自动拉取和部署所需的镜像,启动容器,并通过网络连接各个服务。Nacos可以作为服务发现和配置中心,用于管理和注册各个服务的地址和配置信息。Node.js可以作为应用程序的后端逻辑进行开发,通过Nacos来发现和调用各个后端服务。MongoDB作为主要的数据存储,MySQLRedis可以作为辅助数据存储和缓存。Seata可以用于管理和控制分布式事务,确保数据一致性。 总之,使用Docker Compose可以方便地将Nacos、Node.js、MongoDBMySQLRedis和Seata等组件集成在一起,并通过容器化的方式进行部署。这样做可以极大地简化应用程序的开发和部署过程,并提供高度可扩展的架构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ostrich5yw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值