当前位置: 首页 > 编程笔记 >

Docker 运行多个Springboot的详细教程

赫连卓
2023-03-14
本文向大家介绍Docker 运行多个Springboot的详细教程,包括了Docker 运行多个Springboot的详细教程的使用技巧和注意事项,需要的朋友参考一下

docker 运行多个Springboot

第一个:端口映射
第二个:指定内存大小
第三个:读取、写入物理文件
第四个:日志文件
第五个:多个容器内部网络访问
第六个:遇到的问题

第一个:端口映射

Nginx使用的是转发,那么这个是最简单的。

[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -p 8093:8093 guides-collect
 
将物理的端口映射为虚拟的端口即可,这个很简单

第二个:指定内存大小

-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
样例:
 
[hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -m 1G --memory-swap 4G -p 8093:8093 guides-collect

第三个:读取物理文件、写入物理文件

上面两个情况启动时就加载,但是运行时需要不断读取本地文件该怎么办嘞 ?

[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:

$ 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参数:

$ docker run -d \
 --name=nginxtest \
 -v /usr/local/web:/usr/share/nginx/html \
 nginx:latest

 具体内容请参考:Docker数据存储之Bind mounts详解

第四个:日志文件

第一步:先获取运行容器的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

参考信息:

命令格式:

$ docker logs [OPTIONS] CONTAINER
 Options:
    --details    显示更多的信息
  -f, --follow     跟踪实时日志
    --since string  显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
    --tail string  从日志末尾显示多少行日志, 默认是all
  -t, --timestamps   显示时间戳
    --until string  显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

例子:

查看指定时间后的日志,只显示最后100行:

$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分钟的日志:

$ docker logs --since 30m CONTAINER_ID

查看某时间之后的日志:

$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

查看某时间段日志:

$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

第五个:宿主机与容器网络交互

问题描述:当你docker内运行的springboot想访问宿主机的Redis、获取其他容器的MySQL时,朋友你是否傻眼了

解决方案:需要查询到宿主机容器的软连接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

例如:
[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个小时

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

到此这篇关于Docker 运行多个Springboot的详细教程的文章就介绍到这了,更多相关Docker 运行多个Springboot内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍详解SpringBoot整合MyBatis详细教程,包括了详解SpringBoot整合MyBatis详细教程的使用技巧和注意事项,需要的朋友参考一下 1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web、JDBC API、MySQL Driver 然后导入以下整合依赖 2. 连接数据库 数据库代码: 然后IDEA连接数据库 打开我们创建的数据库sp

  • 本文向大家介绍IDEA 通过docker插件发布springboot项目的详细教程,包括了IDEA 通过docker插件发布springboot项目的详细教程的使用技巧和注意事项,需要的朋友参考一下 一、编写Dockerfile文件 (1)右键项目名,新建一个文本文件,把名字改成Dockerfile,不用后缀。放在项目根目录下。 (2)填写Dockerfile内容 FROM openjdk:8 

  • 本文向大家介绍Linux Docker运行springboot项目的步骤详解,包括了Linux Docker运行springboot项目的步骤详解的使用技巧和注意事项,需要的朋友参考一下 简介: Docker 运行springboot项目其实配置非常简单,跟咱们直接到Linux上运行springboot是一样一样的。开始 一:咱们首先要有一个运行Docker环境 第一步:使用 yum 安装(Cen

  • 问题内容: 我正在使用在3个不同的docker上运行的应用程序: 第一个是可通过REST API调用的服务器HTTP 第二个是rabbitmq 第三个是工人 整个应用程序使用 真的很简单:) 我想使其具有可伸缩性,并且独立于其他应用程序运行整个应用程序的多个实例(3个docker映像),然后放置一个负载平衡器,例如它将重定向到其中一个应用程序。 我看到我可以使用它,但是问题是可以缩放容器,但是我真

  • 本文向大家介绍docker安装ElasticSearch:7.8.0集群的详细教程,包括了docker安装ElasticSearch:7.8.0集群的详细教程的使用技巧和注意事项,需要的朋友参考一下 ElasticSearch集群支持动态请求的方式搭建集群和静态配置文件搭建集群 关于集群的动态连接方式官方的文档:https://www.elastic.co/guide/en/elasticsear

  • 本文向大家介绍docker-compose部署配置jenkins的详细教程,包括了docker-compose部署配置jenkins的详细教程的使用技巧和注意事项,需要的朋友参考一下 docker-compose部署配置jenkins  一、docker-compose文件 root@zpl:/opt/jenkins# docker-compose up -d 然后ip+端口访问 二、解锁jenk