您好,登錄后才能下訂單哦!
1.1 Docker 和集算器結合概述
將集算器的群集和 docker 結合可以進行高效的運算、合理的資源分配與管理。結合以后結構分成兩部分: Server 端和 Client 端; Docker Server 端目前只能在 Linux 中使用。
1.2 Docker 端口
我們需要了解的是 Docker 管理涉及到三個端口:通信端口、映射外部端口及映射內部端口。其中,dockerManager 與 dockerServer 之間通過通信端口相互通信;Docker 通過映射外部端口來訪問 esprocs 服務;esprocs 服務使用的是映射內部端口。
1.3 兩個對應關系
1) Docker 機與集算器群集的節點機為一一對應關系, 通過主機與端口來區分,docker 映射內外端口相同. 因此在同一臺物理機上,用戶使用的端口要求是沒有被占用而且還是唯一的,Docker 在 Server 端的使用分為一臺物理機和多臺物理機,我們簡單的把 ip:port 和 docker 理解為 1:1 的對應關系。
2) Server 端分為 dockerManager 與 dockerServer, dockerManager 管理網絡連接,是網絡的入口,負責用戶的登陸檢驗、其它關聯 docker 機的管理(啟動、關閉)、用戶配置信息復制到 docker 中;dockerServer 不直接與 client 端通信, 只與 dockerManger 通信,它只負責 docker 的啟動與關閉,由 dockerManager 管理,dockerServer 與 dockerManager 是 n:1 關系.
在 server 端 docker 管理員要對 docker_user.xml, docker_server.xml, unitServer.xml 及用戶使用的資源進行管理與分配設置。
2.1 宿主機和 docker 容器目錄映射關系
宿主機目錄 | 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 啟動腳本自動拷貝配置文件
管理員配置宿主機集算器 esProc/config 目錄下的兩個文件:
raqsoftConfig.xml【授權配置文件】
unitServer.xml 【分配 ip:port 資源的群集配置文件】
dokcer 啟動腳本在 docker 容器中執行如下命令:
cp /app/config/raqsoftConfig.xml ../config
cp /app/config/unitServer.xml ../config,
把宿主機 ${home} /config/(對應 docker 容器內 /app/config 目錄)下的兩個配置文件拷貝到 docker 的集算器配置目錄下。
2.3 配置 docker_server 服務器管理
docker_server.xml 配置示例:
<?xml?version=_"1.0"_?encoding=_"UTF-8"_?> <Config> ?<Server>192.168.0.186:9001</Server> ?<Share>/home/docker/share</Share> ?<NodeType>manager</NodeType> </Config><?xml?version=_"1.0"_?encoding=_"UTF-8"_?><Config> ?<Server>192.168.0.186:9001</Server> ?<Share>/home/docker/share</Share> ?<NodeType>manager</NodeType></Config>
說明:
標簽為 client 端訪問 Server 端時的 IP 和端口號,示例如下:
標簽為共享目錄
2.4 配置集算器在 docker 中使用的配置文件:
raqsoftConfig.xml 配置示例:
說明:
此處 /share 路徑為標簽指定的共享目錄 (映射目錄)
在 docker 啟動時掛載了宿主機的共享目錄 ${sharePath},映射關系為:-v ${sharePath}:/share:ro,該目錄掛載到 docker 容器的 /share 目錄,docker 共享目錄 /share 下的文件會自動復制到 docker 下集算器配置目錄下。
unitServer.xml 配置示例
說明:
標簽屬性為 manager 表示此物理機為入口機
2.4.1 場景一:一臺物理機配置一個或多個 docker
配置標簽屬性為 manager
2.4.2 場景二:多臺物理機配置多個 docker
各個物理機之間要相互通信,所以通信端口 9001(或者為其它端口)要求一致
入口機配置標簽屬性為 manager
其他物理機無標簽
2.5 配置 docker_user.xml 用戶管理
<?xml?version=_"1.0"_?encoding=_"UTF-8"_?> <Users> ?<User> ?<Name>aaa</Name> ?<Alias>張三</Alias> ?<Pwd>123456</Pwd> ?<Memory>500m</Memory> ?<CPU>512</CPU> ?<Home>/opt/app/aaa</Home> ?<Unit>192.168.0.76:8281</Unit> ?</User> ?<User> ?<Name>bbb</Name> ?<Alias>李四</Alias> ?<Pwd>123456</Pwd> ?<Memory>500m</Memory> ?<CPU>512</CPU> ?<Home>/opt/app/bbb</Home> ?<Unit>192.168.0.77:8282,192.168.0.77:8283</Unit> ?</User> 。。。 <Users><?xml?version=_"1.0"_?encoding=_"UTF-8"_?><Users> ?<User> ?<Name>aaa</Name> ?<Alias>張三</Alias> ?<Pwd>123456</Pwd> ?<Memory>500m</Memory> ?<CPU>512</CPU> ?<Home>/opt/app/aaa</Home> ?<Unit>192.168.0.76:8281</Unit> ?</User> ?<User> ?<Name>bbb</Name> ?<Alias>李四</Alias> ?<Pwd>123456</Pwd> ?<Memory>500m</Memory> ?<CPU>512</CPU> ?<Home>/opt/app/bbb</Home> ?<Unit>192.168.0.77:8282,192.168.0.77:8283</Unit> ?</User>。。。<Users>
標簽為 Client 端訪問 Server 端時的用戶名,要求是唯一的,最好是英文,docker 使用時,不允許同名的用戶名同時使用
標簽為 Client 端訪問 Server 端時的密碼
標簽為用戶名別名,方便用戶區分記憶
使用最小為 4M, 需要在參數后面加上單位 m
為用戶在宿主機上存儲的位置, 要求可讀寫, 它下面分 config, demo, data 三個目錄,分別對應存放配置文件、dfx 文件及數據文件.
標簽為 docker 映射(內外)端口即,Client 端訪問 Server 端的集算器 IP 和端口。
2.5.1 場景一:一臺物理機配置一個或多個 docker
<Unit>192.168.0.76:8282,192.168.0.76:8283</Unit><Unit>192.168.0.76:8282,192.168.0.76:8283</Unit>
2.5.2 場景二:多臺物理機配置多個 docker
<Users> ?<User> <Unit>192.168.0.76:8281</Unit> <User> <User> <Unit>192.168.0.77:8282,192.168.0.77:8283</Unit> <User> 。。。 <Users><Users> ?<User><Unit>192.168.0.76:8281</Unit><User><User><Unit>192.168.0.77:8282,192.168.0.77:8283</Unit><User>。。。<Users>
3.1 Java 運行軟件包在 server 上的布署
服務端啟動程序 server.sh 及其相關的程序目錄相對關系如下圖:
3.2 鏡像安裝使用:
進行 esproc 鏡像文件 esproc.tar.gz 所在的目錄,先解壓再發布鏡像
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 跟蹤日志輸出,最后一行為當前時間戳的日志
–since string 顯示自具體某個時間或時間段的日志
–tail string 從日志末尾顯示多少行日志, 默認是 all
-t, –timestamps 顯示時間戳
2.docker 管理服務日志
Docker daemon 日志的位置,可以根據不同的系統去查看:
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 表所有鏈的規則:
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 中的第二條規則
2.Docker 僵尸進程
–產生原因:子進程退出,而父進程并沒有調用 wait 或 waitpid 獲取子進程的狀態信息,那么子進程的進程描述符仍然保存在系統中,這種進程稱之為僵尸進程。
–宿主機上 docker 容器卡死,解決方法:
ps -ef|grep defunct
ps -ef|grep -w ‘Z’ #查找僵尸進程
僵尸進程很難直接 kill 掉,可以試著殺死僵尸進程的父進程:
ps -e -o ppid,stat |grep Z|awk -F " " ‘{print $1}’|xargs kill -9
–容器內的僵尸進程
現在有很多人使用 docker,只在容器里面運行一個進程。大多數情況下,這個進程并不會有 init 進程的行為,不會有 init 進程來接管僵尸進程,所以在 docker 啟動時添加 init 進程,可以用來接收孤兒進程。
docker run –init your_image_here
3.dockerServer 失敗問題
dockerserver 失敗問題
a.docker 服務失敗查看日志
systemctl status docker.service
–詳細日志
journalctl -xe
–重啟服務
systemctl daemon-reload
systemctl start docker.service
b. 啟動容器失敗根據日志查看失敗的原因
docker log
4.docker 沒有正常退出
–查看容器運行狀態和查看日志
docker ps -a
docker logs CONTAINER
–可能原因:
docker 容器的主線程(dockfile 中 CMD 執行的命令)結束,容器會退出
–建議使用后臺模式和 tty 選項
docker run -dit [CONTAINER_NAME or CONTAINER_ID]
–Docker 容器在后臺以守護態(Daemonized)形式運行,可以通過添加 -d 參數來實現,以下例子容器不會沒事干而自殺
sudo docker run -d ubuntu:14.04 /bin/sh -c “while true; do echo hello world; sleep 1; done”
管理員操作幫助文件:
dockerServerzip
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。