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基本上是一個三步過程:
docker-compose.yml主要結構:
注意:每次修改任一配置文件后,都要使用 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 扒网站_扒网站工具,看好哪个网
- 下一篇: java-String类