系統安裝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 的服務