系統安裝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 回來

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 的服務
