精华内容
下载资源
问答
  • 什么不建议把数据库部署在Docker容器内?
    千次阅读
    2021-01-26 22:08:40

    近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?

    这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,小编整理了一些数据库不适合容器化的原因供大家参考,同时也希望大家在使用时能够谨慎一点。

    目前为止将数据库容器化是非常不合理的,但是容器化的优点相信各位开发者都尝到了甜头,希望随着技术的发展能够更加完美的解决方案出现。

    Docker不适合部署数据库的7大原因

    1、数据安全问题

    不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。

    即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。Docker volumes 的设计围绕 Union FS 镜像层提供持久存储,但它仍然缺乏保证。

    使用当前的存储驱动程序,Docker 仍然存在不可靠的风险。如果容器崩溃并数据库未正确关闭,则可能会损坏数据。

    2、性能问题

    大家都知道,MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。

    在一次Docker应用的十大难点专场上,某国有银行的一位架构师也曾提出过:“数据库的性能瓶颈一般出现在IO上面,如果按 Docker 的思路,那么多个docker最终IO请求又会出现在存储上面。现在互联网的数据库多是share nothing的架构,可能这也是不考虑迁移到 Docker 的一个因素吧”。

    针对性能问题有些同学可能也有相对应的方案来解决:

    (1)数据库程序与数据分离

    如果使用Docker 跑 MySQL,数据库程序与数据需要进行分离,将数据存放到共享存储,程序放到容器里。如果容器有异常或 MySQL 服务异常,自动启动一个全新的容器。另外,建议不要把数据存放到宿主机里,宿主机和容器共享卷组,对宿主机损坏的影响比较大。

    (2)跑轻量级或分布式数据库

    Docker 里部署轻量级或分布式数据库,Docker 本身就推荐服务挂掉,自动启动新容器,而不是继续重启容器服务。

    (3)合理布局应用

    对于IO要求比较高的应用或者服务,将数据库部署在物理机或者KVM中比较合适。目前TX云的TDSQL和阿里的Oceanbase都是直接部署在物理机器,而非Docker 。

    3、网络问题

    要理解 Docker 网络,您必须对网络虚拟化有深入的了解。也必须准备应付好意外情况。你可能需要在没有支持或没有额外工具的情况下,进行 bug 修复。

    我们知道:数据库需要专用的和持久的吞吐量,以实现更高的负载。我们还知道容器是虚拟机管理程序和主机虚拟机背后的一个隔离层。然而网络对于数据库复制是至关重要的,其中需要主从数据库间 24/7 的稳定连接。未解决的 Docker 网络问题在1.9版本依然没有得到解决。

    把这些问题放在一起,容器化使数据库容器很难管理。我知道你是一个顶级的工程师,什么问题都可以得到解决。但是,你需要花多少时间解决 Docker 网络问题?将数据库放在专用环境不会更好吗?节省时间来专注于真正重要的业务目标。

    4、状态

    在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。但是数据库呢?将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。

    知识点在 Docker 中水平伸缩只能用于无状态计算服务,而不是数据库。

    Docker 快速扩展的一个重要特征就是无状态,具有数据状态的都不适合直接放在 Docker 里面,如果 Docker 中安装数据库,存储服务需要单独提供。

    目前,TX云的TDSQL(金融分布式数据库)和阿里云的Oceanbase(分布式数据库系统)都直接运行中在物理机器上,并非使用便于管理的 Docker 上。

    5、资源隔离

    资源隔离方面,Docker 确实不如虚拟机KVM,Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。

    需要的隔离级别越多,获得的资源开销就越多。相比专用环境而言,容易水平伸缩是Docker的一大优势。然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。

    我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢?

    6、云平台的不适用性

    大部分人通过共有云开始项目。云简化了虚拟机操作和替换的复杂性,因此不需要在夜间或周末没有人工作时间来测试新的硬件环境。当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境?

    这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。因为数据不匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

    7、运行数据库的环境需求

    常看到 DBMS 容器和其他服务运行在同一主机上。然而这些服务对硬件要求是非常不同的。

    数据库(特别是关系型数据库)对 IO 的要求较高。一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。因为你需要为该实例配置大量额外的资源。在公有云,当你需要 34G 内存时,你启动的实例却必须开 64G 内存。在实践中,这些资源并未完全使用。

    怎么解决?您可以分层设计,并使用固定资源来启动不同层次的多个实例。水平伸缩总是比垂直伸缩更好。

    总结

    针对上面问题是不是说数据库一定不要部署在容器里吗?

    答案是:并不是

    我们可以把数据丢失不敏感的业务(搜索、埋点)就可以数据化,利用数据库分片来来增加实例数,从而增加吞吐量。

    docker适合跑轻量级或分布式数据库,当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务。

    数据库利用中间件和容器化系统能够自动伸缩、容灾、切换、自带多个节点,也是可以进行容器化的。

    更多相关内容
  • Tomcat应用部署

    千次阅读 2021-11-25 13:17:20
    概述:Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat...

    一、Tomcat介绍

    概述:Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器

    Apache与Tomcat的比较

    相同点:
    1、两者都是Apache组织开发的
    2、两者都有HTTP服务的功能
    3、两者都是免费的

    不同点:
    1、Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而TomcatApache组织在符合Java EEJSPServlet标准下开发的一个JSP服务器.
    2、Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat
    3、Apache侧重于HTTPServer ,Tomcat侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想
    4、ApacheWeb服务器,Tomcat是应用(Java)服务器,它只是一个ServletJSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行

    Tomcat同类产品:

    1、Resin 服务器
    ResinCaucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持HTMLWeb服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建

    2、Jetty 服务器
    Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty作为Eclipse基金会的一部分,是一个自由和开源项目

    3、JBoss服务器
    JBoss是一个种遵从JavaEE规范的、开放源代码的、纯JavaEJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含ServletJSPWeb容器,不过它可以和Tomcat完美结合

    4、WebSphere 服务器
    WebSphereIBM公司的产品,可进一步细分为 WebSphere Performance PackCache ManagerWebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理InternetIntranet Web应用程序

    5、WebLogic 服务器
    WebLogic ORACLE公司的产品,可进一步细分为 WebLogic Server、WebLogic EnterpriseWebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择

    二、Tomcat与jdk

    JDK是开发人员开发使用,jre是用来运行java程序,就是java程序的运行环境,jvm是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为class的类文件,这种类文件可以在虚拟机上执行
    JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹binlib,在这里可以认为bin里的就是jvmlib中则是jvm工作所需要的类库,而jvm lib和起来就称为jrejdkjava语言编写的,用来给java程序调用的,jvm因为与平台进行交互,是用c/c++和汇编语言编写的;
    jdkjava运行和编译的,tomcatweb项目的运行容器,java没有jdk没办法编译运行,java运行必须依赖jdk的环境,所以安装tomcat前必须要安装jdk环境

    下载位置
    Tomcat下载地址:Apache Tomcat® - Apache Tomcat 9 Software Downloads
    jdk下载地址:Java 归档文件下载 - Java SE 8 (oracle.com)

    解释:

    Java SE(Java Platform,Standard Edition):Java SE 是做电脑上运行的软件
    Java EE(Java Platform,Enterprise Edition):Java EE 是用来做网站的(我们常见的JSP技术)
    Java ME(Java Platform,Micro Edition):Java ME 是做手机软件的

    对应关系:

     三、Tomcat内部工作原理及模型协议

     tomcat整体架构:

    组件关联:
    1、Tomcat 的心脏是两个组件:ConnectorContainerConnector 组件是可以被替换,这样显得更加灵活,一个 Container 可以选择对应多个 Connector。多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了。所以整个 Tomcat 的生命周期由 Server 控制
    2、我们将 Tomcat Connector、Container 作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 BoyContainer 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是Service 将它们连接在一起,共同组成一个家庭。当然要组成一个家庭还要很多其它的元素说白了,Service 只是在 Connector Container 外面多包一层,把它们组装在一起,向外面提供服务,一个 Service 可以设置多个 Connector,但是只能有一个 Container 容器

    Engine:负责处理所有请求,处理后,将结果返回给service,而connector是作为serviceengine的中间媒介出现的。 作为交流者;一个engine下可以配置一个默认主机,每个虚拟主机都有一个域名。当engine获得一个请求时,它把该请求匹配到虚拟主机host上,然后把请求交给该主机来处理。 Engine有一个默认主机,当请求无法匹配到任何一个虚拟主机时,将交给默认host来处理。Engine以线程的方式启动Host
    Host:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。 每个虚拟主机下都可以部署一个或多个web应用,每个web应用对应于一个context,有一个context path。 当Host获得一个请求时,将把该请求匹配到某个Context上;
    Wrapper: 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了

    Tomcat Coyote支持的IO 模型与协议

    应用层 应用层协议 说明
    НТТP/1.1 这是大部分Web应用采用的访问协议
    AJP 用于和WX集成(如Apache) ,以实现对静态资源的优化以及集群部署,当前支持AJP/1.3
    HТIP/2HTTP 2.0大幅度的提升了Web性能。下一代HTTP协议, 自8.5以及9.0版本之后支持 
    传输层 IO模型 说明
    NIO 非阻塞I/O,采用Java NIO类库实现非阻塞I/O,采用Java NIO类库实现
    NIO2 NIO2 异步I/O,采用JDK 7最新的NIO2类库实现
    APR 采用Apache可移植运行库实现,是C/C++编写的本地库。如果选择该方案,需要单独安装APR

    应用层默认协议:HTTP/1.1
    传输层默认IO模型:NIO

    四、 tomcat配置说明

    Tomcat的目录:

    目录说明
    bin存放启动和关闭tomcat脚本
    conf存放不同的配置文件(server.xml和web.xml)
    doc存放Tomcat文档
    lib/japser/common存放Tomcat运行需要的库文件(JARS)
    logs存放Tomcat执行时的LOG文件
    src存放Tomcat的源代码
    webappsTomcat的主要Web发布目录(包括应用程序示例)
    work存放jsp编译后产生的class文件
    conf目录中配置文件说明
    server.xmlTomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息
    web.xml遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息
    tomcat-user.xmlRealm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户  指定角色等将通过编辑此文件实现
    catalina.policyJava相关的安全策略配置文件,在系统资源级别上提供访问控制的能力
    catalina.propertiesTomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置
    logging.propertiesTomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组  件级别以及日志文件的存在位置等
    context.xml所有host的默认配置信息

    tomcat请求过程:

    tomcat server处理一个HTT请求的过程

     

    ​tomcat中支持两种协议的连接器:HTTP/1.1与AJP/1.3
    HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问tomcat服务器用的就是这个连接器,默认监听的是8080端口
    AJP/1.3协议负责和其他HTTP服务器建立连接,监听的是8009端口,比如tomcatapache或者iis集成时需要用到这个连接器

    五、构建Tomcat

    系统机器名称ip服务
    CentOS Linux release 7.4.1708c7--10192.168.2.10/24Tomcat

     先上传安装包  apache-tomcat-10.0.13.tar.gz  jdk-8u91-linux-x64.tar.gz

    [root@C7-10 ~]# ls
    apache-tomcat-10.0.13.tar.gz  jdk-8u91-linux-x64.tar.gz
    

    (一)、安装jdk,部署java环境 

    [root@C7-10 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz 
    ..........
    .....
    ..
    jdk1.8.0_91/jre/README
    jdk1.8.0_91/README.html
    
    
    [root@C7-10 ~]# mv jdk1.8.0_91/ /usr/local/java
    [root@C7-10 ~]# ls /usr/local/java/
    bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
    COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
    
    ----下面直接复制粘贴
    
    cat <<END>>/etc/profile
    export JAVA_HOME=/usr/local/java
    export PATH=\$PATH:/usr/local/java/bin
    END
    
    ----
    
    [root@C7-10 ~]# source /etc/profile
    [root@C7-10 ~]# java -version                                   #查看java版本
    java version "1.8.0_91"
    Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
    Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
    

    (二)、安装Tomcat软件程序

     这里安装的是tomcat 10.0.13版本

    注意: 如要做下面的项目二尽量安装版本低一点的

    [root@C7-10 ~]# tar zxvf apache-tomcat-10.0.13.tar.gz 
    ................
    ..........
    ....
    apache-tomcat-10.0.13/bin/startup.sh
    apache-tomcat-10.0.13/bin/tool-wrapper.sh
    apache-tomcat-10.0.13/bin/version.sh
    
    [root@C7-10 ~]# mv apache-tomcat-10.0.13 /usr/local/tomcat
    
    [root@C7-10 ~]# ls /usr/local/tomcat/
    bin           conf             lib      logs    README.md      RUNNING.txt  webapps
    BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
    
    [root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh                        #启动apache-tomcat服务
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/java
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@C7-10 ~]# netstat -auptn|grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      14366/java   
    

    访问页面测试

     安装mariadb数据库,提供数据库服务

    方法一:本地yum也安装

    [root@C7-10 ~]# yum install mariadb-server mariadb
    ...................
    ..........
    .....
    
    [root@C7-10 ~]# systemctl start mariadb
    [root@C7-10 ~]# mysqladmin -uroot password 123
    [root@C7-10 ~]# mysql -uroot -p123
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 2
    Server version: 5.5.68-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> quit
    Bye
    

    方法二:可以使用网络yum进行安装

    [root@C7-10 ~]# ping www.biadu.com         #查看是否可以ping通外网
    PING www.biadu.com (47.254.33.193) 56(84) bytes of data.
    64 bytes from 47.254.33.193 (47.254.33.193): icmp_seq=1 ttl=50 time=185 ms
    
    [root@C7-10 ~]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
    [root@C7-10 ~]# yum install mariadb-server mariadb    #安装
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    
    mariadb数据库的相关命令是:
    
    systemctl start mariadb    #启动MariaDB
    
    systemctl stop mariadb     #停止MariaDB
    
    systemctl restart mariadb  #重启MariaDB
    
    systemctl enable mariadb   #设置开机启动
    [root@C7-10 ~]# systemctl start mariadb
    [root@C7-10 ~]# mysqladmin -uroot password 123
    [root@C7-10 ~]# mysql -uroot -p123
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 4
    Server version: 5.5.68-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    
    MariaDB [(none)]> quit
    Bye
    

    项目一:配置tomcat的manager管理界面

    [root@C7-10 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
    
    ..............
    .........
    ..
    -->
    <role rolename="manager-gui"/>                                     #添加定义的角色
    <user username="tomcat" password="123" roles="manager-gui"/>       #账户名:tomcat  密码:123
    </tomcat-users>                                                    #默认在最后有
    
    
    保存
    
    
    [root@C7-10 ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
    ............
    .......
     21   <Valve className="org.apache.catalina.valves.RemoteAddrValve"
     22          allow="^.*$" />          #修改    解释:允许其他所有主机访问
    ...
    .
    
    注意:allow默认是:127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1
    
    [root@C7-10 ~]# /usr/local/tomcat/bin/shutdown.sh      #关闭
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/java
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:    
    [root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh      #启动
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/java
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    

    进行测试:客户端访问manager管理界面(客户端启用停止项目、测试服务端状态查看)

     输入之前设置的   用户名 :tomcat    密码:123

     显示出:Tomcat Web 应用程序管理者就说明项目一实验成功了

     如果提示我们403 拒绝访问

     解决方案:添加manage.xml文件

    [root@C7-10 ~]# vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
      
    <Context privileged="true" antiResourceLocking="false"   
             docBase="${catalina.home}/webapps/manager">
        <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
    </Context>
    
    
    保存  添加以上内容
    
    [root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh 
    ......
    ...
    [root@C7-10 ~]# /usr/local/tomcat/bin/shutdown.sh
    ....
    ..
    
    在进行访问测试

    注意:如果出现401 说明你用户密码输入错误只要输入正确就可以了

     项目二:城市订单管理系统,手动上线(创建项目中的数据库或者导入数据库文件),并进行授权

    注意:此次使用  apache-tomcat-8.5.16.tar.gz   版本

    上传文件smbms_db.sql

    [root@C7-10 ~]# ls
    smbms_db.sql
    
    [root@C7-10 ~]# mysql -uroot -p123<smbms_db.sql         #导入数据库中
    
    [root@C7-10 ~]# mysql -uroot -p123
    .......
    ....
    ...
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | smbms              |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    MariaDB [(none)]> grant all on smbms.* to 'aaa'@'192.168.2.10'  identified by "123";                          #给项目数据库授权
    Query OK, 0 rows affected (0.01 sec)                 
    
    MariaDB [(none)]> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    MariaDB [(none)]> use smbms;                  
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [smbms]>  show tables;                   
    +-----------------+
    | Tables_in_smbms |
    +-----------------+
    | smbms_address   |
    | smbms_bill      |
    | smbms_provider  |
    | smbms_role      |
    | smbms_user      |
    +-----------------+
    5 rows in set (0.00 sec)
    
    MariaDB [smbms]> select * from smbms_user;                #查看项目中的管理员账户
    +----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
    | id | userCode  | userName        | userPassword | gender | birthday   | phone       | address                                            | userRole | createdBy | creationDate        | modifyBy | modifyDate          |
    +----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
    |  1 | admin     | 系统管理员      | 1234567      |      1 | 1983-10-10 | 13688889999 | 北京市海淀区成府路207号                            |        1 |         1 | 2013-03-21 16:52:07 |     NULL | NULL                |
    |  2 | liming    | 李明           | 0000000      |      2 | 1983-12-10 | 13688884457 | 北京市东城区前门东大街9号                           |        2 |         1 | 2014-12-31 19:52:09 |     NULL | NULL                |
    .................
    ...........
    
    MariaDB [smbms]> exit
    Bye
    

    城市订单管理系统项目上线

    [root@C7-10 ~]# cd /usr/local/tomcat/webapps/
    [root@C7-10 webapps]# mkdir /root/webapps.bak
    [root@C7-10 webapps]# mv * /root/webapps.bak/
    [root@C7-10 webapps]# ls                 #上传  WebRoot  文件
    WebRoot
    
    [root@C7-10 webapps]# vim /usr/local/tomcat/webapps/WebRoot/WEB-INF/classes/database.properties
    
    driver=com.mysql.jdbc.Driver
    #在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
    url=jdbc:mysql://192.168.2.10:3306/smbms?useUnicode=true&characterEncoding=utf-8   #修改地址为自己的192.168.2.10
    user=aaa                                                           #设置为之前在数据库授权的用户名 aaa
    password=123                                                       #设置为之前在数据库授权的密码   123
    
    保存退出
    
    
    [root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh
    .....
    [root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh 
    .....
    

     测试客户端访问项目二:http://192.168.2.10:8080/WebRoot

    登录后如若访问不了,可以尝试重启tomcat

     注意:如果出现用户名密码错误说明连接不上数据库需要查看数据库是否给用户aaa授权

    部署tomcat的虚拟主机

     准备网页

    [root@C7-10 ~]# cd /usr/local/tomcat/webapps/
    [root@C7-10 webapps]# mkdir benet biii
    
    [root@C7-10 webapps]# vim benet/index.jsp
    <%@ page language="java" contentType="text/html;charset=utf-8"
        pageEncoding="utf-8"%>
    <h1>192.168.2.10 www.benet.com 今天特别冷</h1>
    
    保存
    
    [root@C7-10 webapps]# vim biii/index.jsp
    <%@ page language="java" contentType="text/html;charset=utf-8"
        pageEncoding="utf-8"%>
    <h1>www.biii.com 今天我没有看电视</h1>
    
    保存
    
    

    修改server.xml文件

    [root@C7-10 webapps]# vim /usr/local/tomcat/conf/server.xml
    ........
    ....
        </Host>
    
           <Host name="www.benet.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
               <Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true"/>
           </Host>
           <Host name="www.biii.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
               <Context docBase="/usr/local/tomcat/webapps/biii" path="" reloadable="true"/>
           </Host>
        </Engine>
    
    ........
    ....
    
        保存  
    

    注意:在文件最后添加内容的</Engine>上面添加

    ---##########----     HOST容器  介绍
    
    ---#####<Host name="www.benet.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" >
    name="www.benet.com"  :虚拟主机的名称,Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处理
    appBase="webapps"     :此 Host 的 webapps目录,即指定存放 web 应用程序的目录的路径,默认指向 ROOT 目录下的 index.jsp
    unpackWARs="true"     :在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true
    autoDeploy="true"     :在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 部署,默认为 true ;开启自动部署
    
    ---#####<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true"/>
    docBase="/usr/local/tomcat/webapps/benet"  :设置项目存放路径
    path=""               :tomcat把web应用程序映射为root URI路径(相对路径)
    reloadable="true"     :在Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用,但是开启会加重服务器的负载(建议设置为false关闭),默认值为false,我们在调用可以打开,发布后再关闭;如果要更新可以更新完重启tomcat服务
    
    
    [root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh
    
    [root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh

     中本机中修改hosts文件 192.168.2.10 www.benet.com www.biii.com

     c7--10上修改hosts文件

    [root@C7-10 webapps]# vim /etc/hosts
    
    192.168.2.10 www.benet.com www.biii.com

    测试访问:www.benet.com  www.biii.com

    如果出现乱码解决方法

    (1)HTML页面中:

    <head>
    ......
        <meta http-equiv=Content-Type content="text/html;charset=utf-8">
    ......
    </head>

    (2)JSP页面中:

    <%@ page language="java" contentType="text/html;charset=utf-8"
        pageEncoding="utf-8"%>
    展开全文
  • 容器技术在分布式系统应用

    千次阅读 多人点赞 2020-05-29 16:14:30
    容器屏蔽了底层的代码细节,抽象出了不同类型的应用的通用模式。不止容器的封装特性所带来的天然对象化,在更高层对容器的编排技术也能体现这种思想。从火热的容器编排(k8s)中的各类 API 对象我们处处都能看到"对象...


    容器凭借着良好的外部隔离性,非常适合作为分布式系统的基本"对象"。容器屏蔽了底层的代码细节,抽象出了不同类型的应用的通用模式。不止容器的封装特性所带来的天然对象化,在更高层对容器的编排技术也能体现这种思想。从火热的容器编排(k8s)中的各类API对象我们处处都能看到"对象"思想的落地。

    容器化应用PaaS云关键技术

    主要通过引进Docker、Kubernetes等技术和搭建微服务架构模式来减少对现有应用的影响,即将应用程序分割成更小的相互关联的服务,并采用容器化技术进行微服务的封装、部署、管控。这些服务围绕业务能力构建并且可独立部署,方便地为不同类型的微服务提供差异化的管理策略。以容器技术为核心的支撑技术框架,既满足当前业务支撑系统发展的实际需求,又具有支撑未来业务高速发展的技术先进性。

    应用拆分和服务部署方式

    PaaS云平台引入微服务架构,并采用容器化技术进行微服务设计、编排、授权和配置,解除应用间的紧耦合和依赖。针对IT支撑系统多种多样的应用及业务,根据使用频次、服务调用开销不同,采用不同策略进行划分和分布式部署。几种应用拆分方式介绍如下:

    1. 针对HTTP/soap应用,采用开源缓存集群部署,将应用和MySQL数据库放在一个镜像(image)中,将会话(session)数据放在第三方缓存,实现快速的水平扩张,可满足类似电渠查询类业务的高峰值交易量需求。
    2. 针对纯计算类应用,如不涉及数据库的DCC应用模块,通过容器化提供大量计算能力,并通过对主控端(master)的多节点部署保障其高可用性。
    3. 针对MySQL类集群进行容器化改造,通过主从复制及共享存储备份解决数据服务的高可靠和安全性,并且可达到裸机的性能和更好的高可用性。拆分后的微服务粒度小,轻便灵活,可实现复杂多种应用场景的敏捷交付。通过容器技术进行服务设计、编排、授权、配置,可解除应用间的紧耦合和依赖,为业务系统升级和扩展提供了良好的技术基础,极大地提高运维效率和系统性能。

    容器技术背景

    技术特点

    云计算本质是资源的按需分配和动态调度,从而提高资源利用率,降低使用成本。容器技术的出现进一步满足了云计算的本质要求,其技术特点决定了容器有可能成为下一代云计算基础设施的基石,容器的技术特点如下所示。

    1. 轻量级容器运行占用资源少,单机可以同时运行上百个容器,相比较传统虚拟化对物理机资源的消耗,容器自身的资源消耗可以忽略不计,其应用装填密度10倍于虚拟机。
    2. 快速启停容器启动速度快,启动时间在零点几秒到数秒之间,这一特性保证了动态调度的实时性,在保证应用正常运行的前提下,可以更加高效地调度和调整资源。
    3. 高性能容器没有传统guestOS层次,直接通过内核访问物理机资源,各方面性能接近裸机,从而可以进一步提高系统资源的利用率。
    4. 标准化采用标准化的容器控制接口和镜像打包格式,各类管理平台可以方便地调用统一接口,实现对容器资源的纳管。
    5. 镜像管理容器采用分层文件系统保存镜像,通过镜像仓库提供镜像文件的保存和分发,实现了容器镜像的一键式部署和快速复制,保证了开发测试生产环境的一致性和应用快速复制的高效性。
    6. 集群化容器往往使用集群方式部署和调度,通过集群系统自带的负载分发和服务发现等机制实现了大规模资源的按需分配、动态调度,保证了应用的快速部署和弹性扩展。另外,容器技术的代表——Docker公司从开始就将Docker完全开源,推动了整个容器技术生态的开源化发展。目前产业界各类主流容器解决方案基本采用全开源软件构建,大大降低了后进者的学习门槛和开发成本,从而保证容器技术生态圈迅速发展壮大。

    技术体系

    容器技术核心体系主要包括了三大部件,分别是容器引擎、镜像仓库和容器管理,在其周边还有一些网络、存储等方面的辅助部件,构成了完整的容器技术栈,如图所示
    在这里插入图片描述

    容器引擎

    容器引擎是整个容器技术栈的核心,负责容器的创建、运行和管理,为容器挂载存储和网络资源,并对外提供轻量级的容器管理接口。容器引擎在操作系统上引入一个抽象层,封装了与底层系统内核交互的内容,屏蔽不同Linux发行版的差异性,使得容器具备跨OS移植的能力。目前主流的开源容器引擎包括Docker公司的Docker、Ubuntu的LXC/LXD和CoreOS团队的Rocket。

    镜像仓库

    镜像仓库打包了应用软件、运行环境和依赖库,采用分层结构构建,镜像可以像积木一样层层堆叠。容器镜像存储在镜像仓库中,镜像仓库管理容器镜像的迭代版本、依赖关系和其他相关的元数据,对外提供镜像管理接口,以支持镜像的上传、下载和检验。目前主流的开源镜像仓库包括Docker公司的Registry和VMware公司的Harbor。

    容器管理

    由一系列分布在多个主机的控制节点和计算节点组成。为了支撑分布式系统的复杂工作负载,让众多跨主机的容器协同工作,需要有相应的框架和解决方案来支撑容器集群的服务编排、资源调度和服务发现,保证整个集群能够可靠、高效、合理地运转。目前主流的开源容器集群框架包括Docker公司的Swarm、Google公司的Kubernete和Mesosphere公司的Mesos。

    展开全文
  • 前言Docker不适合部署数据库的7大原因1、数据安全问题2、性能问题3、网络问题4、状态5、资源隔离6、云平台的不适用性7、运行数据库的环境需求总结前言近...,各位开发者恨不得把所有的应用、软件都部署在Docker容器中...

    前言

    Docker不适合部署数据库的7大原因1、数据安全问题

    2、性能问题

    3、网络问题

    4、状态

    5、资源隔离

    6、云平台的不适用性

    7、运行数据库的环境需求

    总结

    前言

    近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?

    这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,小编整理了一些数据库不适合容器化的原因供大家参考,同时也希望大家在使用时能够谨慎一点。

    目前为止将数据库容器化是非常不合理的,但是容器化的优点相信各位开发者都尝到了甜头,希望随着技术的发展能够更加完美的解决方案出现。

    Docker不适合部署数据库的7大原因

    1、数据安全问题

    不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。

    即使你要把 Docker 数据放在主机来存储 ,它依然不能保证不丢数据。Docker volumes 的设计围绕 Union FS 镜像层提供持久存储,但它仍然缺乏保证。

    使用当前的存储驱动程序,Docker 仍然存在不可靠的风险。如果容器崩溃并数据库未正确关闭,则可能会损坏数据。

    2、性能问题

    大家都知道,MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。

    在一次Docker应用的十大难点专场上,某国有银行的一位架构师也曾提出过:“数据库的性能瓶颈一般出现在IO上面,如果按 Docker 的思路,那么多个docker最终IO请求又会出现在存储上面。现在互联网的数据库多是share nothing的架构,可能这也是不考虑迁移到 Docker 的一个因素吧”。

    针对性能问题有些同学可能也有相对应的方案来解决:

    (1)数据库程序与数据分离

    如果使用Docker 跑 MySQL,数据库程序与数据需要进行分离,将数据存放到共享存储,程序放到容器里。如果容器有异常或 MySQL 服务异常,自动启动一个全新的容器。另外,建议不要把数据存放到宿主机里,宿主机和容器共享卷组,对宿主机损坏的影响比较大。

    (2)跑轻量级或分布式数据库

    Docker 里部署轻量级或分布式数据库,Docker 本身就推荐服务挂掉,自动启动新容器,而不是继续重启容器服务。

    (3)合理布局应用

    对于IO要求比较高的应用或者服务,将数据库部署在物理机或者KVM中比较合适。目前TX云的TDSQL和阿里的Oceanbase都是直接部署在物理机器,而非Docker 。

    3、网络问题

    要理解 Docker 网络,您必须对网络虚拟化有深入的了解。也必须准备应付好意外情况。你可能需要在没有支持或没有额外工具的情况下,进行 bug 修复。

    我们知道:数据库需要专用的和持久的吞吐量,以实现更高的负载。我们还知道容器是虚拟机管理程序和主机虚拟机背后的一个隔离层。然而网络对于数据库复制是至关重要的,其中需要主从数据库间 24/7 的稳定连接。未解决的 Docker 网络问题在1.9版本依然没有得到解决。

    把这些问题放在一起,容器化使数据库容器很难管理。我知道你是一个顶级的工程师,什么问题都可以得到解决。但是,你需要花多少时间解决 Docker 网络问题?将数据库放在专用环境不会更好吗?节省时间来专注于真正重要的业务目标。

    4、状态

    在 Docker 中打包无状态服务是很酷的,可以实现编排容器并解决单点故障问题。但是数据库呢?将数据库放在同一个环境中,它将会是有状态的,并使系统故障的范围更大。下次您的应用程序实例或应用程序崩溃,可能会影响数据库。

    **知识点:**在 Docker 中水平伸缩只能用于无状态计算服务,而不是数据库。

    Docker 快速扩展的一个重要特征就是无状态,具有数据状态的都不适合直接放在 Docker 里面,如果 Docker 中安装数据库,存储服务需要单独提供。

    目前,TX云的TDSQL(金融分布式数据库)和阿里云的Oceanbase(分布式数据库系统)都直接运行中在物理机器上,并非使用便于管理的 Docker 上。

    5、资源隔离

    资源隔离方面,Docker 确实不如虚拟机KVM,Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。

    需要的隔离级别越多,获得的资源开销就越多。相比专用环境而言,容易水平伸缩是Docker的一大优势。然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。

    我们没有看到任何针对数据库的隔离功能,那为什么我们应该把它放在容器中呢?

    6、云平台的不适用性

    大部分人通过共有云开始项目。云简化了虚拟机操作和替换的复杂性,因此不需要在夜间或周末没有人工作时间来测试新的硬件环境。当我们可以迅速启动一个实例的时候,为什么我们需要担心这个实例运行的环境?

    这就是为什么我们向云提供商支付很多费用的原因。当我们为实例放置数据库容器时,上面说的这些便利性就不存在了。因为数据不匹配,新实例不会与现有的实例兼容,如果要限制实例使用单机服务,应该让 DB 使用非容器化环境,我们仅仅需要为计算服务层保留弹性扩展的能力。

    7、运行数据库的环境需求

    常看到 DBMS 容器和其他服务运行在同一主机上。然而这些服务对硬件要求是非常不同的。

    数据库(特别是关系型数据库)对 IO 的要求较高。一般数据库引擎为了避免并发资源竞争而使用专用环境。如果将你的数据库放在容器中,那么将浪费你的项目的资源。因为你需要为该实例配置大量额外的资源。在公有云,当你需要 34G 内存时,你启动的实例却必须开 64G 内存。在实践中,这些资源并未完全使用。

    怎么解决?您可以分层设计,并使用固定资源来启动不同层次的多个实例。水平伸缩总是比垂直伸缩更好。

    总结

    针对上面问题是不是说数据库一定不要部署在容器里吗?

    答案是:并不是

    我们可以把数据丢失不敏感的业务(搜索、埋点)就可以数据化,利用数据库分片来来增加实例数,从而增加吞吐量。

    docker适合跑轻量级或分布式数据库,当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务。

    数据库利用中间件和容器化系统能够自动伸缩、容灾、切换、自带多个节点,也是可以进行容器化的。

    展开全文
  • 随着信息技术的快速发展,企业应用规模也在迅速扩大,客户对应用的服务... 双活包含网络双活和应用双活,在应用层面上分为“同城双活”和“异地双活”,宏观策略基本上都是将应用服务分散部署在不同的软硬件环境中,...
  • 容器容器

    2018-02-26 18:25:10
    讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),以及一切皆...
  • 本文技术涉及基于Docker容器的移动端双系统实现系统及方法,所述系统包括相互连接的内核层及应用程序层,其中,应用程序层包括Docker模块以及Docker模块根据Docker创建的多个容器,所述内核层包括LSM模块,所述LSM...
  • 正文 前言 近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署容器中吗? 这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,...
  • 讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),以及一切皆...
  • 虚拟机和容器什么不同

    千次阅读 多人点赞 2020-07-20 23:00:06
    虚拟机的好处受欢迎的虚拟机提供商什么是容器容器种类集装箱的好处受欢迎的集装箱供应商虚拟机使用与容器使用虚拟机与容器有什么不同 虚拟机和容器都可以充分利用计算机硬件和软件资源。容器是新兴的事物,但是...
  • 暑期实习期间,所在的技术中台—效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发...如何快速高质量的应用容器化迁移1. 上节回顾2. 容器化交付流程阶段划分3. DockerFile入门及基本语法4. DockerFile.
  • 2013年至今Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署容器中吗?这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,小编整理...
  • 讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),以及一切皆...
  • 容器docker装在虚拟机上吗

    千次阅读 2021-08-07 11:32:54
    容器无论是虚拟机还是物理机,都是硬件/基础设施的一种交付方式,本质上是一个层次的;而容器主要要解决以软件为中心的系列问题(开发、测试、部署、发布、运行)。在虚拟机中运行容器,已经成为一种实践中的惯例,...
  • 然而,大范围控制容器部署也会有一些并发症。容器肯定是跟资源相匹配的。这些挑战会导致集群管理和编排的并发需求。  集群管理工具是一个通过图形界面或者通过命令行来帮助你管理一组集群的软件程序。有了这个工具...
  • Docker+容器容器

    2017-11-03 11:19:34
    讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),以及一切皆...
  • 容器原理架构详解

    千次阅读 2021-01-23 17:42:26
    1 容器原理架构:容器与虚拟化、容器应用/引擎架构、Namespace与Cgroups、镜像原理 2 K8S原理架构:K8S主要功能、K8S 系统架构、Pod原理与调度 3 K8S存储方案:容器存储类型、PVC与PV、PV创建与挂载 4 K8S网络...
  • 精通容器容器

    2018-05-08 07:13:31
    讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),...
  • 腾讯打造了一个功能完备的边缘计算PaaS平台TMEC,提供了高精确度定位、视频处理、无线网络QoS控制和5G切片等多种特色业务能力,很好地支撑了车路协同、5G云游戏、视频直播等应用。本文是腾讯云技术专家杨勇&何猛...
  • 讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署容器云(Compose、Machine、Swarm、Fleet)、专注应用支撑的容器云(Flynn、Deis),...
  • 该方法综合考虑物理节点CPU、内存、磁盘、网络带宽空闲率和已部署容器应用个数等因素,利用模糊层次分析法(fuzzy analytic hierarchy process,FAHP)自动建模求解容器应用多维资源权重参数。实验表明,新的调度...
  • 近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署容器中吗? 这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,小编整理了...
  • web应用程序的部署

    千次阅读 2017-06-03 14:35:25
    一个Web容器可以运行多个web应用程序,每个web应用程序都有一个唯一的上下文根。对于Tomcat来说,%CATALINA_HOME(安装路径)%\webapps目录下的每一个子目录都是一个独立的Web应用程序,这个子目录的名字就是这个Web...
  • 近两年,容器已经随着 Docker 技术的传播火遍全球,现在已经有越来越多的企业用户在开发、测试甚至生产环境中开始采用 Docker 等容器技术。然而,目前主流的 Docker 管理平台,比如 K8S,当企业想构建一套网络方案,...
  • 本讲是从Docker系列讲解课程,单独抽离出来的一个小节,主要介绍容器间内部相互访问和外部访问容器的一些方法,它和前面两篇:容器五种(3+2)网络模式、容器之间单/双向通信 |--link /自定义网络知识点互补。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,218
精华内容 14,887
关键字:

容器部署是什么层次的应用