1 服務編排概念
-
微服務架構的應用系統中一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,維護的工作量會很大。
- 要從Docker build image 或者去 Docker Hub拉取image。
- 要創建多個container。
- 要管理這些container(啟動、停止、刪除等)。
-
服務編排:按照一定的業務規則批量管理容器。
2 Docker Compose概念
- Docker Compose是一個編排多容器分布式部署的工具,提供命令管理容器化應用的完整開發周期,包括服務創建構建、啟動和停止。
- 使用步驟如下:
- ①利用Dockerfile定義運行環境鏡像。
- ②使用docker-compose.yml定義組成應用的各個服務。
- ③運行docker-compose up啟動應用。
3 Docker Compose的安裝和卸載
3.1 Docker Compose的安裝
# Compose目前已經完全支持Linux、Mac OS和Windows,在我們安裝Compose之前,需要先安裝Docker。下面我 們以編譯好的二進制包方式安裝在Linux系統中。
curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 國內的地址
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 設置文件可執行權限
chmod 777 /usr/local/bin/docker-compose
# 創建軟鏈接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 查看版本信息
docker-compose -version
3.2 Docker Compose的卸載
# 二進制包方式安裝的,刪除二進制文件即可
rm /usr/local/bin/docker-compose
4 Docker Compose的應用示例
- 新建一個SpringBoot項目,隨便建。
- 編寫Dockerfile文件。
# 指定基礎鏡像,在其上進行定制
FROM java:8
#這里的 /tmp 目錄就會在運行時自動掛載為匿名卷,任何向 /tmp 中寫入的信息都不會記錄進容器存儲層
VOLUME /tmp
# 指定在創建容器后,終端默認登陸進來的工作目錄,一個落腳點
WORKDIR /
#復制上下文目錄下的/target/demo-1.0.jar到容器里,並將文件名稱修改為demo.jar
ADD /target/demo-1.0.jar demo.jar
#bash方式執行,使robot.jar可訪問
#RUN新建立一層,在其上執行這些命令,執行結束后, commit 這一層的修改,構成新的鏡像。
RUN bash -c "touch /demo.jar"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務
EXPOSE 8080
#指定容器啟動程序及參數 <ENTRYPOINT> "<CMD>"tail
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
- 使用docker build構建鏡像。
docker build -t demo
- 新建/var/nginx/nginx.conf.d目錄,並新建nginx.conf配置文件:
server {
listen 80;
server_name 192.168.64.100;
location / {
proxy_pass http://app:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 編寫docker-compose.yml。
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
links:
- app
volumes:
- "/var/nginx/nginx.conf.d:/etc/nginx/conf.d"
app:
image: demo
- 使用如下命令啟動:
docker-compose up -d