[精讚] [會員登入]
634

在docker裡跑spring boot+mongo(一)

系統安裝docker ce centos7 + docker ce https://docs.docker.com/in

分享此文連結 //n.sfs.tw/14567

分享連結 在docker裡跑spring boot+mongo(一)@igogo
(文章歡迎轉載,務必尊重版權註明連結來源)
最後編修
2020-03-10 11:06:25 By igogo
 

 

系統安裝docker ce

centos7 + docker ce

 

https://docs.docker.com/install/linux/docker-ce/centos/

#yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2


#yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

#yum install docker-ce docker-ce-cli containerd.io


#systemctl start docker

#systemctl enable docker

 

Docker的歡念是一個container 一個用途,   所以本文件會建立兩個container, 一個是mongo, 一個是spring boot提供服務的web

接下來,我先拉一個 mongo 的 官方 image 回來

https://hub.docker.com/

 

docker pull mongo

 

 

建立服務

docker run -d --name mongo mongo

 

由上圖可知, 我們順利啟動了一個命名為mogo 的container

 

接下來我們利用spring boot 寫一個簡單連接mongo 並傳回rest 值的服務, 要注意的是

在連接mongo 時, 我們將container 命名為mongo, 所以在 application.properties 的mongo host 需指向 mongo

 

 

因為mongodb 的server 指向的是另一個container, 所以在編譯時需要跳過, 否則會錯誤

-Dmaven.test.skip=true

 

部份程式碼

Entity

public class Coffee {
    @Id
    public String name;

    public Integer price;

    public Coffee(String name, Integer price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }



    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }
}

 

CoffeeRepository

public interface CoffeeRepository extends MongoRepository<Coffee, String> {
}

 

IndexController

@RestController
public class Index {

    @Autowired
    CoffeeRepository coffeeRepository;

    @RequestMapping("/")
    public List<Coffee> index(){

        return coffeeRepository.findAll();
    }
}

 

Application

@SpringBootApplication
public class MongoApplication implements CommandLineRunner {


    @Autowired
    CoffeeRepository coffeeRepository;

    public static void main(String[] args) {
        SpringApplication.run(MongoApplication.class, args);
    }


    @Override
    public void run(String... args) throws Exception {
        System.out.println("hello");


        coffeeRepository.save(new Coffee("Americano", 60));
        coffeeRepository.save(new Coffee("Latte", 90));


        List<Coffee> coffees = coffeeRepository.findAll();


        coffees.forEach(coffee -> System.out.println(coffee.name));


    }
}

 

 

建立web服務

使用openjdk 官方images

 

 

docker pull openjdk:8-slim

 

 

將編好的jar 檔放到 /app/web.jar ,   並與container 連接,   日後更新jar檔  再重啟container 即可

 

docker run -it -d -p 8080:8080 -v /app:/app --link mongo:mongo --name web openjdk:8-slim

 

--link 與另一個名為mongo的 container 連接, 使用mongo 資料庫

-v /app:/app  與host的 /app連接

-p 與host的8080連接

 

 

進入web 的container 執行jar 檔啟動服務, 此時web container 的8080 port 是對應到主机的 8080

docker exec -it web bash

 

 

成功啟動畫面

 

連上host ip 8080 port

 

除錯

如果在web的 container 可利用telnet, mongo  指令確認是否能連上mongo

telnet mongo 27017

 

 

如果連不上, 表示兩個container 並不相連, 無法使用mongo container 的服務

 

 

END

你可能感興趣的文章

shell scirpt 批次建立samba使用者 建立一csv檔, 兩個欄位如下 5101,532 5102,592 5103,321 第一欄為帳號使用班級加座號, 第二

vim 特定範圍行數開頭加上# 註解 vim 特定範圍行數開頭加上# 註解

臺中市雲端校務系統與Windows AD帳號整合(5) 安裝java環境

如何在docker 的nginx 做另一個container的反向代理 環境 docker 中一container 跑 nginx 對外服務80 port, http://server 另一c

openldap資料移到 docker 拉docker 上的 image 回來 docker pull osixia/openldap 在正在運行的openld

proxmox lxc 救援 今天突然接到一名強者我朋友的臨時求援 他說他把pve 從5.1升到5.2後, kvm的虛擬机器都沒問題 , 但是lxc的

隨機好文

tmux 將終端機切割成多個視 窗 tmux, multiple terminal

javascript 陣列 javascript 陣列可以放各种型別的元素 let data = [1,2,"john",tru

網站無障礙規範 https://accessibility.ncc.gov.tw/News/Detail/3238?Category=4

keycloak 透過java client lib新增user 使用keycloak-admin-client lib maven <dependency> <gro

管理Google共用雲端硬碟 管理Google共用雲端硬碟