1.1 Docker 和集算器結(jié)合概述
創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元東城做網(wǎng)站,已為上家服務(wù),為東城各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
將集算器的群集和 docker 結(jié)合可以進(jìn)行高效的運算、合理的資源分配與管理。結(jié)合以后結(jié)構(gòu)分成兩部分: Server 端和 Client 端; Docker Server 端目前只能在 Linux 中使用。
1.2 Docker 端口
我們需要了解的是 Docker 管理涉及到三個端口:通信端口、映射外部端口及映射內(nèi)部端口。其中,dockerManager 與 dockerServer 之間通過通信端口相互通信;Docker 通過映射外部端口來訪問 esprocs 服務(wù);esprocs 服務(wù)使用的是映射內(nèi)部端口。
1.3 兩個對應(yīng)關(guān)系
1) Docker 機(jī)與集算器群集的節(jié)點機(jī)為一一對應(yīng)關(guān)系, 通過主機(jī)與端口來區(qū)分,docker 映射內(nèi)外端口相同. 因此在同一臺物理機(jī)上,用戶使用的端口要求是沒有被占用而且還是唯一的,Docker 在 Server 端的使用分為一臺物理機(jī)和多臺物理機(jī),我們簡單的把 ip:port 和 docker 理解為 1:1 的對應(yīng)關(guān)系。
2) Server 端分為 dockerManager 與 dockerServer, dockerManager 管理網(wǎng)絡(luò)連接,是網(wǎng)絡(luò)的入口,負(fù)責(zé)用戶的登陸檢驗、其它關(guān)聯(lián) docker 機(jī)的管理(啟動、關(guān)閉)、用戶配置信息復(fù)制到 docker 中;dockerServer 不直接與 client 端通信, 只與 dockerManger 通信,它只負(fù)責(zé) docker 的啟動與關(guān)閉,由 dockerManager 管理,dockerServer 與 dockerManager 是 n:1 關(guān)系.
在 server 端 docker 管理員要對 docker_user.xml, docker_server.xml, unitServer.xml 及用戶使用的資源進(jìn)行管理與分配設(shè)置。
2.1 宿主機(jī)和 docker 容器目錄映射關(guān)系
宿主機(jī)目錄 | Dokcer容器目錄 | 說明 |
/home/docker/share | /share | 全局共享目錄 |
/opt/app/aaa | /app | 用戶主目錄 |
/opt/app/aaa /demo | /demo | 用戶目錄 |
/opt/app/aaa /data | /app/data | 用戶目錄 |
/opt/app/aaa /config | /app/config | 用戶目錄 |
2.2 啟動腳本自動拷貝配置文件
管理員配置宿主機(jī)集算器 esProc/config 目錄下的兩個文件:
raqsoftConfig.xml【授權(quán)配置文件】
unitServer.xml 【分配 ip:port 資源的群集配置文件】
dokcer 啟動腳本在 docker 容器中執(zhí)行如下命令:
cp /app/config/raqsoftConfig.xml ../config
cp /app/config/unitServer.xml ../config,
把宿主機(jī) ${home} /config/(對應(yīng) docker 容器內(nèi) /app/config 目錄)下的兩個配置文件拷貝到 docker 的集算器配置目錄下。
2.3 配置 docker_server 服務(wù)器管理
docker_server.xml 配置示例:
? 192.168.0.186:9001 ?/home/docker/share ?manager ? 192.168.0.186:9001 ?/home/docker/share ?manager
說明:
標(biāo)簽為 client 端訪問 Server 端時的 IP 和端口號,示例如下:
標(biāo)簽為共享目錄
2.4 配置集算器在 docker 中使用的配置文件:
raqsoftConfig.xml 配置示例:
說明:
此處 /share 路徑為標(biāo)簽指定的共享目錄 (映射目錄)
在 docker 啟動時掛載了宿主機(jī)的共享目錄 ${sharePath},映射關(guān)系為:-v ${sharePath}:/share:ro,該目錄掛載到 docker 容器的 /share 目錄,docker 共享目錄 /share 下的文件會自動復(fù)制到 docker 下集算器配置目錄下。
unitServer.xml 配置示例
說明:
標(biāo)簽屬性為 manager 表示此物理機(jī)為入口機(jī)
2.4.1 場景一:一臺物理機(jī)配置一個或多個 docker
配置標(biāo)簽屬性為 manager
2.4.2 場景二:多臺物理機(jī)配置多個 docker
各個物理機(jī)之間要相互通信,所以通信端口 9001(或者為其它端口)要求一致
入口機(jī)配置標(biāo)簽屬性為 manager
其他物理機(jī)無標(biāo)簽
2.5 配置 docker_user.xml 用戶管理
? ? ?aaa ?張三 ?123456 ?500m ?512 ?/opt/app/aaa ?192.168.0.76:8281 ?? 。。。bbb ?李四 ?123456 ?500m ?512 ?/opt/app/bbb ?192.168.0.77:8282,192.168.0.77:8283 ?? ? ?aaa ?張三 ?123456 ?500m ?512 ?/opt/app/aaa ?192.168.0.76:8281 ?? 。。。bbb ?李四 ?123456 ?500m ?512 ?/opt/app/bbb ?192.168.0.77:8282,192.168.0.77:8283 ?
標(biāo)簽為 Client 端訪問 Server 端時的用戶名,要求是唯一的,最好是英文,docker 使用時,不允許同名的用戶名同時使用
標(biāo)簽為 Client 端訪問 Server 端時的密碼
標(biāo)簽為用戶名別名,方便用戶區(qū)分記憶
使用最小為 4M, 需要在參數(shù)后面加上單位 m
為用戶在宿主機(jī)上存儲的位置, 要求可讀寫, 它下面分 config, demo, data 三個目錄,分別對應(yīng)存放配置文件、dfx 文件及數(shù)據(jù)文件.
標(biāo)簽為 docker 映射(內(nèi)外)端口即,Client 端訪問 Server 端的集算器 IP 和端口。
2.5.1 場景一:一臺物理機(jī)配置一個或多個 docker
192.168.0.76:8282,192.168.0.76:8283 192.168.0.76:8282,192.168.0.76:8283
2.5.2 場景二:多臺物理機(jī)配置多個 docker
? 192.168.0.76:8281 192.168.0.77:8282,192.168.0.77:8283 。。。 ? 192.168.0.76:8281 192.168.0.77:8282,192.168.0.77:8283 。。。
3.1 Java 運行軟件包在 server 上的布署
服務(wù)端啟動程序 server.sh 及其相關(guān)的程序目錄相對關(guān)系如下圖:
3.2 鏡像安裝使用:
進(jìn)行 esproc 鏡像文件 esproc.tar.gz 所在的目錄,先解壓再發(fā)布鏡像
tar -zxvf esproc.tar.gz; docker load -i esproc.tar
3.3 鏡像安裝使用:
# ./server.sh
3.4 鏡像安裝使用:
# kill -9 docker_pid
3.5 鏡像安裝使用:
1.docker 日志–容器
docker logs 能夠打印出自容器啟動以來完整的日志,位置存放 /var/lib/docker/containers
$ docker logs [OPTIONS] CONTAINER
Options:
–details 顯示更多的信息
-f, –follow 跟蹤日志輸出,最后一行為當(dāng)前時間戳的日志
–since string 顯示自具體某個時間或時間段的日志
–tail string 從日志末尾顯示多少行日志, 默認(rèn)是 all
-t, –timestamps 顯示時間戳
2.docker 管理服務(wù)日志
Docker daemon 日志的位置,可以根據(jù)不同的系統(tǒng)去查看:
Ubuntu - /var/log/upstart/docker.log
Boot2Docker - /var/log/docker.log
Debian GNU/Linux - /var/log/daemon.log
CentOS - /var/log/daemon.log | grep docker
3.5 鏡像安裝使用:
1.dokcer 端口占用沖突
解決方法:
一,更改端口號;
二,刪除沖突的端口號。
刪除沖突端口如下:
–查看 nat 表所有鏈的規(guī)則:
iptables -t nat -nL –line-number |grep 80 (如 80 端口)
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.2:8080
DNAT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.9:8080
–刪除沖突的端口:
iptables -t nat -D DOCKER 2 刪除 chain docker 中的第二條規(guī)則
2.Docker 僵尸進(jìn)程
–產(chǎn)生原因:子進(jìn)程退出,而父進(jìn)程并沒有調(diào)用 wait 或 waitpid 獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中,這種進(jìn)程稱之為僵尸進(jìn)程。
–宿主機(jī)上 docker 容器卡死,解決方法:
ps -ef|grep defunct
ps -ef|grep -w ‘Z’ #查找僵尸進(jìn)程
僵尸進(jìn)程很難直接 kill 掉,可以試著殺死僵尸進(jìn)程的父進(jìn)程:
ps -e -o ppid,stat |grep Z|awk -F " " ‘{print $1}’|xargs kill -9
–容器內(nèi)的僵尸進(jìn)程
現(xiàn)在有很多人使用 docker,只在容器里面運行一個進(jìn)程。大多數(shù)情況下,這個進(jìn)程并不會有 init 進(jìn)程的行為,不會有 init 進(jìn)程來接管僵尸進(jìn)程,所以在 docker 啟動時添加 init 進(jìn)程,可以用來接收孤兒進(jìn)程。
docker run –init your_image_here
3.dockerServer 失敗問題
dockerserver 失敗問題
a.docker 服務(wù)失敗查看日志
systemctl status docker.service
–詳細(xì)日志
journalctl -xe
–重啟服務(wù)
systemctl daemon-reload
systemctl start docker.service
b. 啟動容器失敗根據(jù)日志查看失敗的原因
docker log
4.docker 沒有正常退出
–查看容器運行狀態(tài)和查看日志
docker ps -a
docker logs CONTAINER
–可能原因:
docker 容器的主線程(dockfile 中 CMD 執(zhí)行的命令)結(jié)束,容器會退出
–建議使用后臺模式和 tty 選項
docker run -dit [CONTAINER_NAME or CONTAINER_ID]
–Docker 容器在后臺以守護(hù)態(tài)(Daemonized)形式運行,可以通過添加 -d 參數(shù)來實現(xiàn),以下例子容器不會沒事干而自殺
sudo docker run -d ubuntu:14.04 /bin/sh -c “while true; do echo hello world; sleep 1; done”
管理員操作幫助文件:
dockerServerzip