作者:劉賓, thomas_liub@hotmail.com
請尊重作者著作權,轉載請注明出處,謝謝!
一 創(chuàng)建Docker Swarm網絡
Docker Swarm網絡由管理節(jié)點和工作節(jié)點組成,通常情況需要最小3個管理節(jié)點和任意多個工作節(jié)點。同時,可以設置管理節(jié)點是否接受任務,從而使管理節(jié)點隔離出來只負責Docker集群工作。
1. 創(chuàng)建Manager節(jié)點
在28服務器上創(chuàng)建一個管理節(jié)點。
docker swarm init --advertise-addr 192.168.1.28
2. 創(chuàng)建工作節(jié)點
在27和29兩個docker host上創(chuàng)建工作節(jié)點。
docker swarm join --token SWMTKN-1-4v9u5pahl5nfne1v88nw6hhe01n3994jzpiq68vmt3eskk0n8a-687qzxnn98c58cv0nw99t0drk 192.168.1.28:2377
3. 創(chuàng)建Overlay網絡
Overlay網絡用來連接跨主機容器。
docker network create --driver overlay --subnet 10.0.9.0/24 mycloud
4. 確認狀態(tài)
最后查詢節(jié)點狀態(tài),查詢網絡狀態(tài),查詢服務狀態(tài)。
docker node ls
docker network ls
docker service ls
二 微服務部署-Docker Swarm
1. 編寫Dockerfile
將應用程序和platform-client庫拷貝到容器內,開放內部8090 HTTP端口,供內部REST訪問。
Dockerfile:
FROM ubuntu:14.05
RUN mkdir /source
WORKDIR /source
ADD ./asset-conn/ /source/
RUN rm /source/pl_lib
RUN mkdir /source/pl_lib
ADD ./platform-client/ /source/pl_lib/
RUN apt-get update
RUN apt-get install -y python-pip python-dev build-essential python-psycopg2
RUN pip install -r requirements.txt
USER root
RUN cp /usr/share/zoneinfo/PRC /etc/localtime
EXPOSE 8090
CMD python main.py
2. 構建Docker Image
Docker build:
docker build -t xxxx:nnnn/test/asset-conn .
3. push到企業(yè)庫
推送構建好的image到企業(yè)容器庫,方便其他節(jié)點部署。
docker login https://xxxx:nnnn
username: "admin"; password: "admin"
docker push xxxx:nnnn/test/asset-conn:latest
4. 在所有worker node上pull image
docker login https:/xxxx:nnnn
username: "admin"; password: "admin"
docker pull xxxx:nnnn/test/asset-conn:latest
5. 在lead node上創(chuàng)建服務
可以指定服務需要啟動的應用實例個數,實例占用CPU,內存資源。注意,服務名字是云平臺上服務間訪問的唯一方式,一定要指定正確。
docker service create --replicas 1 --network mycloud --name asset-conn xxxx:nnnn/test/asset-conn:latest
6. 確認服務正確啟動
在Lead節(jié)點上,運行如下命令:
docker service ls
docker service ps asset-conn
docker service inspect asset-conn
7. 查看log
兩種方式:
- 登錄容器,訪問log文件 /source/logs/*.log
- 查詢容器所在節(jié)點,在該節(jié)點查詢容器log
- docker service ps xxx
- 登錄到該docker host
- docker ps, 找到該容器
- docker logs -f 容器id