docker 运行多个Springboot
第一个:端口映射
第二个:指定内存大小
第三个:读取、写入物理文件
第四个:日志文件
第五个:多个容器内部网络访问
第六个:遇到的问题
第一个:端口映射
Nginx使用的是转发,那么这个是最简单的。
?
1
2
3
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -p 8093:8093 guides-collect
将物理的端口映射为虚拟的端口即可,这个很简单
第二个:指定内存大小
?
1
2
3
4
5
6
7
-m,–memory 内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M
–memory-swap 内存+交换分区大小总限制。格式同上。必须比-m设置的大
–memory-reservation 内存的软性限制。格式同上
–oom-kill-disable 是否阻止 OOM killer 杀死容器,默认没设置
–oom-score-adj 容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
–memory-swappiness 用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
–kernel-memory 核心内存限制。格式同上,最小为 4M
?
1
2
3
样例:
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -m 1G –memory-swap 4G -p 8093:8093 guides-collect
第三个:读取物理文件、写入物理文件
上面两个情况启动时就加载,但是运行时需要不断读取本地文件该怎么办嘞 ?
?
1
2
3
4
5
6
7
[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容器的启动相当于是先从把镜像内的文件地址,映射到物理机器上的地址;如
镜像地址:/springboot/wechat
物理地址:/home/hn-docker/docker/wechat
Bind mounts
Bind mounts模式和Volumes非常相似,不同点在于Bind mounts模式是将宿主机上的任意文件或文件夹挂载到容器,而Volumes本质上是将Docker服务管理的一块区域(默认是/var/lib/docker/volumes下的文件夹)挂载到容器。
Bind mounts的使用和Volumes类似,也是通过-v或–mount参数将宿主机文件挂载容器中。下面是一个例子:
使用–mount参数时,需要指定type=bind:
?
1
2
3
4
$ docker run -d \
–name=nginxtest \
–mount type=bind,source=/usr/local/web,destination=/usr/share/nginx/html \
nginx:latest
上面的例子将宿主机上的/usr/local/web文件夹挂载到容器中的/usr/share/nginx/html文件夹。
或者使用-v参数:
?
1
2
3
4
$ docker run -d \
–name=nginxtest \
-v /usr/local/web:/usr/share/nginx/html \
nginx:latest
具体内容请参考:Docker数据存储之Bind mounts详解
第四个:日志文件
?
1
2
3
4
5
6
7
8
第一步:先获取运行容器的ID:da3199e9d032
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da3199e9d032 guides-collect “java -Djava.secur…” 2 hours ago Up 2 hours 0.0.0.0:8093->8093/tcp sharp_mirzakhani
第二步:查询运行日志 – 搞定
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker logs -f 51c384b8afee
参考信息:
命令格式:
?
1
2
3
4
5
6
7
8
$ docker logs [OPTIONS] CONTAINER
Options:
–details 显示更多的信息
-f, –follow 跟踪实时日志
–since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
–tail string 从日志末尾显示多少行日志, 默认是all
-t, –timestamps 显示时间戳
–until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
?
1
$ docker logs -f -t –since=”2018-02-08″ –tail=100 CONTAINER_ID
查看最近30分钟的日志:
?
1
$ docker logs –since 30m CONTAINER_ID
查看某时间之后的日志:
?
1
$ docker logs -t –since=”2018-02-08T13:23:37″ CONTAINER_ID
查看某时间段日志:
?
1
$ docker logs -t –since=”2018-02-08T13:23:37″ –until “2018-02-09T12:23:37” CONTAINER_ID
第五个:宿主机与容器网络交互
问题描述:当你docker内运行的springboot想访问宿主机的Redis、获取其他容器的MySQL时,朋友你是否傻眼了
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
解决方案:需要查询到宿主机容器的软连接ip,使用内网ip访问就ok了
docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} xxxid (容器id)
例如:
[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abe77b60254a assistant “java -Djava.secur…” 6 minutes ago Up 6 minutes 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect “java -Djava.secur…” 30 hours ago Up 30 hours 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 message “java -Djava.secur…” 3 days ago Up 3 days 0.0.0.0:8092->8092/tcp reverent_galileo
比如要查:abe77b60254a 这个容器的网络地址
[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} abe77b60254a
172.17.0.4
这个时候:
abe77b60254a 这个容器的IP地址就是:172.17.0.4
想访问就走内网地址 172.17.0.4 即可
同时也可得知宿主机的IP就应该是 172.17.0.1
第六个:你会遇到的坑
一:镜像启动失败,然后怎么看日志
启动失败后,需要知道是哪个镜像的ID、然后用日志去查:docker logs -f 镜像id
?
1
2
3
4
5
6
7
8
9
例如:
[yn@iZbp1gp1t778obaz5m8vk8Z logs]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abe77b60254a assistant “java -Djava.secur…” 6 minutes ago Up 6 minutes 0.0.0.0:9304->8091/tcp nostalgic_albattani
37c6dd777636 collect “java -Djava.secur…” 30 hours ago Up 30 hours 0.0.0.0:8093->8093/tcp silly_poincare
4dcb9fcae281 message “java -Djava.secur…” 3 days ago Up 3 days 0.0.0.0:8092->8092/tcp reverent_galileo
查这个容器日志最新的10行
[yn@iZbp1gp1t778obaz5m8vk8Z ~]$ docker logs -f -t –tail 10 abe77b60254a
二:日志时间或者数据存储至数据库比实际时间小8个小时
?
1
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai >/etc/timezone
到此这篇关于Docker 运行多个Springboot的详细教程的文章就介绍到这了,更多相关Docker 运行多个Springboot内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/yexiaomodemo/article/details/110263394
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。