Docker-compose配置Mysql,Redis,MongoDB

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

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

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

相关文章

初学者应该了解的一些SQL语句及hr 用户解锁相关

初学者应该了解的一些SQL语句 1.显示当前连接用户SQL> show user&#xff1b; 2.查看系统拥有哪些用户SQL> select * from all_users; 3.连接到新用户SQL> conn 用户名/密码 4.查询当前用户下所有对象SQL> select * from tab; 5.建立第一个表SQL> create table …

用Delphi 6开发ASP上传组件详解

文件上传是WEB开发中经常要用到的功能&#xff0c;但ASP本身和内置的组件都不支持文件上传功能。网上流传的一些第三方组件虽然能够解决这个问题&#xff0c;但大多是要收费的&#xff0c;更别说Open Source了。本文将详细剖析WEB文件上传的原理&#xff0c;以及一步步指导读者…

使用WebDeployment Project改善VS2005发布网站问题

VS2005发布网站时不会像VS2003一样生成规则的DLL文件、而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件、让人有一些遗憾、为了做到像vs2003一样&#xff0c;微软发布了WebDeployment Project插件可解决此问题&#xff1a;下载地址1、下载后安装、右键选择vs2005中的…

03 - const static extern

const是一个C语言的关键字&#xff0c;它限定一个变量不允许被改变。使用const可以在一定程度上提高程序的安全性和可靠性&#xff0c;再者在看别人的代码作品的时候也可以有助于清晰理解const所起的作用。 1、const和#define的区别 &#xff08;1&#xff09;编译器处理的方式…

Linux、Windows、Mac下Docker的安装与使用

Linux、Windows、Mac下Docker的安装与使用一、Linux下的安装二、Windows与Mac下的安装三、Docker的使用一、Linux下的安装 这里以Centos 7为例&#xff0c;首先&#xff0c;确保系统已经正确运行了Centos 7并已经联网。yum安装gcc环境 yum -y install gcc yum -y install gcc…

[智能架构系列]什么是Buddy智能开发框架

buddy框架&#xff0c;秉承国内优秀框架THINKPHP的优点并增加了很多的商业特性和集成了全版本的商业项目模块&#xff0c;提供给创业者一个最好的选择 组建图: 转载于:https://www.cnblogs.com/scotoma/archive/2011/10/17/2215553.html

Mac nginx PCRE install ngnix

1 下载&#xff1a;pcre-8.12.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre 2 sudo tar xvfz pcre-8.12.tar.gz 解压文件 解压完成之后&#xff0c;执行命令 cd pcre-8.12sudo ./configure --prefix/usr/local --enable-utf8 sudo make sudo make instal…

解决IE6下,给图片加上line-height属性不起作用的方法

在css设置中&#xff0c;我们一般用行高line-height来设定某一行的高度&#xff0c;这在ie7与firefox等浏览器都适用。但当行中有其他元素时&#xff08;如图片&#xff0c;SPAN,li..&#xff09;在IE6.0下line-height会不起效果&#xff0c;后来查了下资料&#xff0c;果然如此…

小孔子文章管理系统V2.0发布测试

小孔子文章管理系统V2.0 【感谢】 本系统是仿照nbArticle开发,在此表示感谢nb联盟的作品. 【版权声明】 本软体为开源项目,允许个人使用或修改. 非经小孔子本人授权许可,不得将之用于盈利或非盈利性的商业用途. 欢迎使…

Docker Swarm建立服务器集群

Docker Swarm建立服务器集群一、Docker Swarm简介1. 集群模式2. 管理节点--Manager二、Docker Swarm的配置及使用三、Docker Service向集群中添加服务四、Docker Stack部署集群一、Docker Swarm简介 1. 集群模式 这是Docker官网给出的一张swarm原理图&#xff0c;即swarm就是…

Linux下的版本升级只是浮云

ubuntu从11.04到11.10&#xff0c;直接系统升级&#xff0c;那简直是扯蛋啊 gnome 也是 从2.32到了3 &#xff0c;ubuntu从此停在了11.04&#xff0c;对我而言。 转载于:https://www.cnblogs.com/x3d/archive/2011/10/18/2661307.html

恢复快速启动栏里的“显示桌面”图标

在百度知道上看到一个提问&#xff0c;大意是说自己不小心把快速启动栏的“显示桌面”图标给删除了&#xff0c;“显示桌面”按钮是大家经常用到的操作按钮&#xff0c;有时误删除掉后&#xff0c;然后使用起来非常不方便。 因为刚刚帮一个朋友解决了同样的问题&#xff0c;所以…

python常用魔法函数

1、__init__(): 所有类的超类object&#xff0c;有一个默认包含pass的__init__()实现&#xff0c;这个函数会在对象初始化的时候调用&#xff0c;我们可以选择实现&#xff0c;也可以选择不实现&#xff0c;一般建议是实现的&#xff0c;不实现对象属性就不会被初始化&#xff…

Python3.4 Django MySQL MySQL-python 安装不成功解决办法 Unable to find vcvarsall.bat 错误

解决办法&#xff1a; 1.安装pymysql pip install pymysql 2.在Django项目中找到跟settings.py在同一个目录下的__init__.py 添加如下代码 import pymysql pymysql.install_as_MySQLdb() 然后就解决了 ----------------------------------------------------------------------…

Go出现警告struct doesn‘t have any exported fields, nor custom marshaling

Go出现警告struct doesnt have any exported fields, nor custom marshalingGo语言要求所有结构体成员变量的首字母需要大写,如果首字母小写的话&#xff0c;则该字段无法被外部包访问和解析&#xff0c;比如&#xff0c;json解析。 type student struct {Id intName string…

苹果MAC系统的安装

搞Iphone开发&#xff0c;没有苹果系统是不行的。由于我已经装好了苹果的雪豹系统&#xff0c;所以在此我只是简单在说一下大休怎么装&#xff01; 苹果系统&#xff0c;现下在非苹果机上的安装分两种&#xff1a;1、虚拟机安装&#xff1b;2、物理机安装。 现在先说延续一种&a…

asp.net 对xml文件的读写,添加,修改,删除操作

下面有代码调试正确 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.Html…

sphinx和coreseek

sphinx是国外的一款搜索软件。 coreseek是在sphinx的基础上&#xff0c;增加了中文分词功能&#xff0c;换句话说&#xff0c;就是支持了中文。 Coreseek发布了3.2.14版本和4.1版本&#xff0c;其中的3.2.14版本是2010年发布的&#xff0c;它是基于Sphinx0.9.9搜索引擎的。而4.…

Spring security/Shiro ---登陆成功后返回登陆前界面<页面重定向>

Spring security ---登陆成功后返回登陆前界面<页面重定向>问题&#xff1a;在登陆/退出成功后&#xff0c;我们往往通过http.formLogin().successForwardUrl()和http.logout().logoutSuccessUrl()设定操作成功后的回跳页面。我们现在希望在任意界面跳转到登陆界面后&…

linux下编译的PHP添加soap扩展

# 进入源码cd /opt/php-5.5.17/# 进入扩展cd /ext/soap# PHP之前是编译好的&#xff0c;有phpize&#xff0c;用它生成configure文件。/usr/local/php-5.5.17/bin/phpize# 执行configure&#xff0c;之前编译好的PHP一定要有php-config./configure --with-php-config/usr/local…