Docker 運(yùn)行多個(gè)Springboot的詳細(xì)教程
docker 運(yùn)行多個(gè)Springboot
第一個(gè):端口映射第二個(gè):指定內(nèi)存大小第三個(gè):讀取、寫入物理文件第四個(gè):日志文件第五個(gè):多個(gè)容器內(nèi)部網(wǎng)絡(luò)訪問第六個(gè):遇到的問題
第一個(gè):端口映射
Nginx使用的是轉(zhuǎn)發(fā),那么這個(gè)是最簡(jiǎn)單的。
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -p 8093:8093 guides-collect 將物理的端口映射為虛擬的端口即可,這個(gè)很簡(jiǎn)單
第二個(gè):指定內(nèi)存大小
-m,--memory 內(nèi)存限制,格式是數(shù)字加單位,單位可以為 b,k,m,g。最小為 4M--memory-swap內(nèi)存+交換分區(qū)大小總限制。格式同上。必須比-m設(shè)置的大--memory-reservation 內(nèi)存的軟性限制。格式同上--oom-kill-disable 是否阻止 OOM killer 殺死容器,默認(rèn)沒設(shè)置--oom-score-adj 容器被 OOM killer 殺死的優(yōu)先級(jí),范圍是[-1000, 1000],默認(rèn)為 0--memory-swappiness 用于設(shè)置容器的虛擬內(nèi)存控制行為。值為 0~100 之間的整數(shù)--kernel-memory 核心內(nèi)存限制。格式同上,最小為 4M
樣例: [hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -m 1G --memory-swap 4G -p 8093:8093 guides-collect
第三個(gè):讀取物理文件、寫入物理文件
上面兩個(gè)情況啟動(dòng)時(shí)就加載,但是運(yùn)行時(shí)需要不斷讀取本地文件該怎么辦嘞 ?
[hn-docker@iZbp1gp1t778obaz5m8vk8Z ~]$ docker run -d -m 1G --memory-swap 4G -p 8092:8092 -v /home/hn-docker/docker/wechat:/springboot/wechat guides-message message容器的啟動(dòng)相當(dāng)于是先從把鏡像內(nèi)的文件地址,映射到物理機(jī)器上的地址;如鏡像地址:/springboot/wechat物理地址:/home/hn-docker/docker/wechat
Bind mounts
Bind mounts模式和Volumes非常相似,不同點(diǎn)在于Bind mounts模式是將宿主機(jī)上的任意文件或文件夾掛載到容器,而Volumes本質(zhì)上是將Docker服務(wù)管理的一塊區(qū)域(默認(rèn)是/var/lib/docker/volumes下的文件夾)掛載到容器。
Bind mounts的使用和Volumes類似,也是通過(guò)-v或--mount參數(shù)將宿主機(jī)文件掛載容器中。下面是一個(gè)例子:
使用--mount參數(shù)時(shí),需要指定type=bind:
$ docker run -d --name=nginxtest --mount type=bind,source=/usr/local/web,destination=/usr/share/nginx/html nginx:latest
上面的例子將宿主機(jī)上的/usr/local/web文件夾掛載到容器中的/usr/share/nginx/html文件夾。
或者使用-v參數(shù):
$ docker run -d --name=nginxtest -v /usr/local/web:/usr/share/nginx/html nginx:latest
具體內(nèi)容請(qǐng)參考:Docker數(shù)據(jù)存儲(chǔ)之Bind mounts詳解
第四個(gè):日志文件
第一步:先獲取運(yùn)行容器的ID:da3199e9d032 [hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESda3199e9d032 guides-collect 'java -Djava.secur...' 2 hours ago Up 2 hours 0.0.0.0:8093->8093/tcp sharp_mirzakhani 第二步:查詢運(yùn)行日志 - 搞定[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker logs -f 51c384b8afee
參考信息:
命令格式:
$ docker logs [OPTIONS] CONTAINER Options: --details 顯示更多的信息 -f, --follow 跟蹤實(shí)時(shí)日志 --since string 顯示自某個(gè)timestamp之后的日志,或相對(duì)時(shí)間,如42m(即42分鐘) --tail string 從日志末尾顯示多少行日志, 默認(rèn)是all -t, --timestamps 顯示時(shí)間戳 --until string 顯示自某個(gè)timestamp之前的日志,或相對(duì)時(shí)間,如42m(即42分鐘)
例子:
查看指定時(shí)間后的日志,只顯示最后100行:
$ docker logs -f -t --since='2018-02-08' --tail=100 CONTAINER_ID
查看最近30分鐘的日志:
$ docker logs --since 30m CONTAINER_ID
查看某時(shí)間之后的日志:
$ docker logs -t --since='2018-02-08T13:23:37' CONTAINER_ID
查看某時(shí)間段日志:
$ docker logs -t --since='2018-02-08T13:23:37' --until '2018-02-09T12:23:37' CONTAINER_ID
第五個(gè):宿主機(jī)與容器網(wǎng)絡(luò)交互
問題描述:當(dāng)你docker內(nèi)運(yùn)行的springboot想訪問宿主機(jī)的Redis、獲取其他容器的MySQL時(shí),朋友你是否傻眼了
解決方案:需要查詢到宿主機(jī)容器的軟連接ip,使用內(nèi)網(wǎng)ip訪問就ok了 docker inspect -f ’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ xxxid (容器id) 例如:[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker ps -aCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESabe77b60254a assistant 'java -Djava.secur...' 6 minutes ago Up 6 minutes 0.0.0.0:9304->8091/tcp nostalgic_albattani37c6dd777636 collect 'java -Djava.secur...' 30 hours ago Up 30 hours 0.0.0.0:8093->8093/tcp silly_poincare4dcb9fcae281 message 'java -Djava.secur...' 3 days ago Up 3 days 0.0.0.0:8092->8092/tcp reverent_galileo 比如要查:abe77b60254a 這個(gè)容器的網(wǎng)絡(luò)地址[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker inspect -f ’{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ abe77b60254a172.17.0.4 這個(gè)時(shí)候:abe77b60254a 這個(gè)容器的IP地址就是:172.17.0.4想訪問就走內(nèi)網(wǎng)地址 172.17.0.4 即可同時(shí)也可得知宿主機(jī)的IP就應(yīng)該是 172.17.0.1
第六個(gè):你會(huì)遇到的坑
一:鏡像啟動(dòng)失敗,然后怎么看日志
啟動(dòng)失敗后,需要知道是哪個(gè)鏡像的ID、然后用日志去查:docker logs -f 鏡像id
例如:[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker ps -aCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESabe77b60254a assistant 'java -Djava.secur...' 6 minutes ago Up 6 minutes 0.0.0.0:9304->8091/tcp nostalgic_albattani37c6dd777636 collect 'java -Djava.secur...' 30 hours ago Up 30 hours 0.0.0.0:8093->8093/tcp silly_poincare4dcb9fcae281 message 'java -Djava.secur...' 3 days ago Up 3 days 0.0.0.0:8092->8092/tcp reverent_galileo 查這個(gè)容器日志最新的10行[yn@iZbp1gp1t778obaz5m8vk8Z ~]$ docker logs -f -t --tail 10 abe77b60254a
二:日志時(shí)間或者數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫(kù)比實(shí)際時(shí)間小8個(gè)小時(shí)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ’Asia/Shanghai’ >/etc/timezone
到此這篇關(guān)于Docker 運(yùn)行多個(gè)Springboot的詳細(xì)教程的文章就介紹到這了,更多相關(guān)Docker 運(yùn)行多個(gè)Springboot內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
