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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker运行springboot项目的实现

    简介: Docker 运行springboot项目其实配置非常简单,跟咱们直接到Linux上运行springboot是一样一样的.开始 一:咱们首先要有一个运行Docker环境 第一步:使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 [root@iZbp1gp1t778obaz5m8vk8Z ~]# uname

  • 详解SpringBoot项目docker环境运行时无限重启问题

    可能是我开始处理问题的思路不对,现在描述问题可能也有点乱,但是里面可能的处理方式希望能帮到遇到我这个坑的人 描述:springboot项目,docker镜像里面运行,看docker的日志,项目启动成功后,隔了一分钟左右他就自动重新启动,然后造成网站接口访问的时候nginx报502 gateway啥的,有两台服务器,一个是文件服务器,运行了很简单的上传下载文件的代码以及验证token,另一台运行了java应用,两台服务器都在一次更新项目的镜像,运行过后遇到了这个问题,很奇怪. 然后我将项目弄成ja

  • 如何在docker中运行springboot项目过程图解

    一.IDEA中点击下方的Terminal 输入mvn clean install 出现如下图时表示成功(前提是本地必须安装了maven且配置了maven的环境变量) 打好的jar包在target目录下 二.然后新建个Dockerfile文件,内容如下 三.构建镜像:将Dockerfile和项目jar包放在服务器同一目录下,然后进入该目录 输入:docker build -t app . (注意后面有个点,app为自定义镜像名)构建镜像 查看镜像是否存在: docker images 四.运行刚才

  • Docker 运行多个Springboot的详细教程

    docker 运行多个Springboot 第一个:端口映射 第二个:指定内存大小 第三个:读取.写入物理文件 第四个:日志文件 第五个:多个容器内部网络访问 第六个:遇到的问题 第一个:端口映射 Nginx使用的是转发,那么这个是最简单的. [hn@iZbp1gp1t778obaz5m8vk8Z guides]$ docker run -d -p 8093:8093 guides-collect 将物理的端口映射为虚拟的端口即可,这个很简单 第二个:指定内存大小 -m,--memory 内存限

  • 使用Docker+jenkins+python3环境搭建超详细教程

    前言: 自动化写好后需要在服务器上每日定时运行遇到,这样的一个问题,Jenkins容器是在docker中安装的 ,然后从git上拉取代码 发现代码在jenkins容器的目录当中,运行的时候提示没有安装python环境还第三方库. 解决方法有3种: 第一种:启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现)Pass 第二种:在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(在本机上使用比较方便,但是局限性比较小) 第三种:重新封装jenkins镜像,

  • docker nginx + https 子域名配置详细教程

    今天刚好要帮朋友的服务器搬家,因此把服务器的基础设备都配置了一次, 但在配置的时候遇到了一些问题.原来现在的 google chrome / safari 是会 强制性把http转换成为https . 刚开始的时候并不知道什么回事,还将域名的记录重新设置了一遍.而且在 ping 的时候域名是能够成功被解析出服务器地址的,因此把矛头转向了 http -> https的过程中 ,我用微信的内置的浏览器发现是能够访问http的域名.因此要设置一下证书. 这边我使用的证书也是免费的 acme.sh 在g

  • 使用docker部署hadoop集群的详细教程

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群 准备: 首先要有一台内存8G以上的centos7机器,我用的是阿里云主机. 其次将jdk和hadoop包上传到服务器中. 我安装的是hadoop2.7.7.包给大家准备好了,链接:https://pan.baidu.com/s/15n

  • Armbian5.9.0安装docker及部署可视化portainer的详细教程

    目录 安装 docker 如何查看 docker 是否安装成功? 如何启动docker? 如何安装可视化portainer 安装英文版本 安装中文版 什么是docker?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续

  • kali安装docker及搭建漏洞环境的详细教程

    目录 前言: docker的简介 安装docker 1. 在kail环境下搭建docker,kali版本要在3.10以上,使用命令查看kali内核 2. 添加添加Docker官方的GPG密钥 3.,然后更新源 4. 然后导入证书 5.安装docker 6.检查安装是否成功 docker的简单使用 1. 启动docker 2. 查看镜像 3.搭建漏洞环境 前言: 言归正传,下面开始学习了.本文仅供学习参考,严禁用于一切违法行为,否则后果自负. docker的简介 Docker 是一个开源的应用容器

  • 使用pycharm运行flask应用程序的详细教程

    在flask更新到1.0之后的版本,官方推荐使用flask run的方式运行程序,可是作为开发,如果没有了pycharm的断点调试,这可太难受了. 所以,本篇博客主要讲述如何在pycharm中运行flask程序,并开启Debug模式. 首先你的使用pycharm创建你的第一个app. 然后,你会有一个基本的应用程序了.没错就是那个hello world. 接下来我们开始配置pycharm. 点击红色下拉框,选择"Edit Configurations"会弹出一个配置窗口. 下图的配置窗

  • IDEA连接远程服务器Docker部署Spring Boot项目的详细教程

    开始前的准备工作 拥有一台云服务器,我的是腾讯云服务器(CentOS7) 腾讯云服务器安装Docker,我的版本是Docker 19.03.9,关于安装和配置镜像加速器可以查阅我的另一篇博文:https://www.jb51.net/article/188048.htm,其中有详细的讲解 Windows上有安装IDEA 正式开始工作 第一步:配置Docker,开启远程访问(注:仅供学习参考,实际生产环境万万不可,会产生很大的安全风险),默认端口是2375,也可以修改为其他端口 1.修改/lib/

  • VMware中安装CentOS7(设置静态IP地址)并通过docker容器安装mySql数据库(超详细教程)

    一位读大二的学弟问我怎么安装配置这些,我简单的整了一个教程,这里记录一下,并分享给需要的朋 安装过程学习使用足够,实际工作中有些繁琐的配置略过了! 打开VM虚拟机,菜单栏[文件]-->选择[新建虚拟机],选择"o自定义(高级)"-->[下一步] 默认一直点[下一步]到选择安装盘的位置,选择自己已经下载好的官方DVD镜像文件(不要整别的镜像,避免走不必要 的坑) [下一步]设置虚拟机名称(取一个合适的名称,设置合适的路径) 处理器设置默认,安装好虚拟centos后可以根据情况

  • 搭建基于Docker的PHP开发环境的详细教程

    现在很多开发者都使用Vagrant来管理他们的虚拟机开发环境,Vagrant确实很酷, 不过也有不少缺点(最主要的是它占用太多的资源).在容器技术.Docker和更多类Docker技术出现后,解决这个问题就变得简单了. 免责声明 由于boot2docker的工作方式,本文所述的方法在你的环境中可能无法正常运行.如果需要在非Linux环境下共享文件夹到Docker容器,还需要注意更多额外的细节.后续我会写篇文章专门来介绍实际遇到的问题. 怎样才算是好的开发环境 首先,我们得知道什么才是好的开发环境

随机推荐