首页 文章 精选 留言 我的

精选列表

搜索[原生UI],共10000篇文章
优秀的个人博客,低调大师

云原生技术之Docker入门

1. 为什么需要容器? 下图是一个比较传统的软件架构: 做过java的同学可能对上图的架构方式比较了解,我们通常会将一个应用程序生成一个war包,放到一个tomcat容器当中并在一台虚拟机(VM)中启动运行,然后配置nginx的负载均衡策略,将来自用户的请求转发到某个tomcat应用上,这种基于主机或虚拟机部署的应用会存在以下几个问题: 可移植性差 需要事先安装应用所需要的运行环境,比如java应用所需要的jdk或者jre,如果需要重新部署一个应用,就需要重新初始化环境再安装应用,过程繁琐; 另外如果一个应用需要jdk7的运行环境另外一个应用需要jdk8,那在一台主机上就很难满足; 可维护性差 如果tomcat应用本身或者所在的虚拟机操作系统出现问题时,则需要人工干预,比如配置nginx转发规则、执行重启操作等; 可扩展性差 应用的负载有高有低,不够稳定,当前应用负载大的时候,我们需要增加应用的数量,当应用负载降低的时候,我们需要降低应用的数量; 无法资源隔离 如果一台虚拟机部署多个应用,不同的应用或者进程之间会相互影响; ... 我们接下来就来看一下我们是如何一步步的解决这些问题的。 首先是容器化,我们选择的方案是Docker。 Docker将应用程序与该程序的依赖,打包成一个容器镜像,运行这个文件就会生成虚拟容器。程序在这个虚拟容器里运行,就好像运行在真实的物理机上,并且每个容器之间资源互相隔离而且都有自己的文件系统,这样容器之间进程不会相互影响,可以通过下图来进行对比基于虚拟机和基于容器部署应用的区别: 2. Docker介绍 2.1 Docker架构 Docker是客户端-服务器架构的应用,主要由以下部分组成: 服务端是一个名为dockerd守护进程,用来监听REST API请求并管理Docker对象,比如镜像、容器、存储卷及网络等。 命令行客户端(CLI),也就是我们平常在控制台输入的docker命令行,通过调用REST API进行控制Docker daemon或者同其进行集成。 镜像仓库(Docker Registries),镜像仓库用来存储Docker镜像。 以下是Docker的架构示意图: 2.2 Docker对象 IMAGES 镜像一般是通过指令创建的只读文件,用来生成容器。一般一个镜像是基于另外一个镜像并添加一些额外的指令创建的,可以通过一个名为Dockerfile的文件来生成一个镜像,在Dockerfile中的每一行指令会生成一层(layer)。当Dockerfile有改动需要重新生成镜像时,只需要重新生成改变的那些层就可以,这样就可以使得镜像文件更加轻量、快速构建。 CONTAINERS 容器是通过镜像文件生成的运行实例。可以通过REST API或者docker client进行创建、启动、停止、移动或者删除一个容器。 SERVICE 用来管理和扩展多个容器,需要同docker swarm一起工作 2.3 底层技术 Docker采用go语言编写,并且使用了Linux内核中的几个特性来实现其功能,主要有如下: Namespaces Docker通过Namespaces来提供隔离的工作空间(Workspace),当你运行一个容器的时候,Docker为这个容器创建了数个不同类型的Namespaces,主要有以下类型: pid namespace:提供进程隔离功能 net namespace:管理网络接口 ipc namespace:内部资源访问控制 (IPC:Inter Process Communication) mnt namespace:管理文件系统挂载 uts namespace: 内核隔离以及版本识别(UTS:Unix Timesharing System) CGroups(Control Groups) Docker通过CGroup来限定容器只能使用特定的资源。举例来讲,Docker可以限制某个容器只能使用多少cpu及内存资源。 UnionFS(Union File System) 一种文件系统类型,可以运行在其他文件系统上,通过创建不同的层来使得容器文件系统更加轻量和快速。还有其他几种类似的文件系统,包括AUFS、btrfs、vfs和DeviceMapper。 3. Docker的安装部署 以下命令是在Centos7上的命令,其他操作系统会存在一些差异 yum install docker:通过yum下载docker相关的依赖 systemctl enable docker: 开机运行systemctl start docker: 启动docker服务 执行完上述操作,docker服务已经在运行了,可以通过执行 docker version 和 docker info 命令查看docker的版本以及相关的信息。 4. Docker的使用 4.1 Dockerfile文件 我们之前有提到Docker可以将应用程序打包成一个镜像,那么如何生成镜像文件呢?这就需要用到Dockerfile文件。它是一个文本文件,用来配置镜像,Docker根据该文件生成二进制的镜像文件。以下是一个Dockerfile文件示例: # 该镜像文件继承官方的nginx镜像,冒号表示标签,这里标签是latest,表示最新的版本 FROM nginx:latest # 将_book目录下的文件copy至镜像文件的/var/www/public目录 COPY _book /var/www/public/ COPY nginx_app.conf/etc/nginx/conf.d/ nginx_app.conf # 将容器的8080端口暴露出来,允许外部连接这个端口 EXPOSE 8080 # 容器启动后执行 nginx -g daemon off 命令 CMD ["nginx", "-g", "daemon off;"] 4.2 创建镜像文件 有了Dockerfile文件以后,就可以用docker build命令创建镜像文件了。 docker build -t zcloud-document:0.0.1. docker image ls 如果运行成功,就可以看到新生成的镜像文件zcloud-document了。 4.3 生成容器 # 生成容器 docker run -p 8080:8080 -it zcloud-document:0.0.1 docker ps # 重新生成一个新的镜像标签,并指向原来的镜像 docker tag zcloud-document:0.0.1 10.0.0.183:5000/zcloud/zcloud-document:0.0.1 # 推送到私有镜像仓库 docker push 10.0.0.183:5000/zcloud/zcloud-document:0.0.1 关于Docker其他的一些操作命令,大家可以自行查阅,网上介绍的文章也比较多,参考文章:Docker 入门教程(https://docs.docker.com/get-started/)

优秀的个人博客,低调大师

Java原生实现定时器

public static void main(String[] args) { //新加定时器 //这个方法schedule(TimerTask task, Date firstTime, long period) //获得当天的日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); //定义开始时间字符 String timeStr = "15:27:00"; timeStr = sdf.format(date)+" "+timeStr; //获得当天的指定时间的date对象 sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{ date = sdf.parse(timeStr); //判断今天的执行时间是否已经过去,如果过去则改为明天 if(date.getTime() date = new Date(date.getTime()+24*60*60*1000); } }catch(Exception e){ e.printStackTrace(); } Timer timer = new Timer(); //timer.schedule(new testTask(), date, 246060*1000); timer.schedule(new testTask(),date,246060*1000); while(true){ try{ int ch = System.in.read(); if(ch-'c'==0){ timer.cancel(); } } catch(Exception e){ e.printStackTrace(); } } //new roomdhtranSys().commoneMethod(); //System.out.println("结束!"); } package com; import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimerTask; public class testTask extends TimerTask { public void run(){ new roomdhtranSys().commoneMethod(); }}

优秀的个人博客,低调大师

hadoop 原生MapReduce 实现数据连接

其实很简单,输入两个文件,一个作为基础数据(学生信息文件),一个是分数信息文件。 学生信息文件:存放学生数据:包括学号,学生名称 分数信息数据:存放学生的分数信息:包括学号,学科,分数。 我们将通过M/R实现根据学号,进行数据关联,最终结果为:学生名称,学科,分数。 模拟数据 学生数据 [hadoop@hadoop11 student_data]$ cat students.txt 1 Randy 2 Tom 3 kitty 4 Lucy 5 Lily 6 Bruce 7 King 8 Jay 9 Melody 10 Kimy ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 分数数据 [hadoop@hadoop11 student_data]$ cat scores.txt 1 English 89 2 English 77 3 English 54 4 English 98 5 English 83 6 English 99 7 English 30 8 English 76 9 English 56 10 English 88 1 Math 79 2 Math 37 3 Math 65 4 Math 88 5 Math 89 6 Math 59 7 Math 60 8 Math 86 9 Math 56 10 Math 68 1 China 89 2 China 67 3 China 84 4 China 68 5 China 43 6 China 89 7 China 70 8 China 96 9 China 56 10 China 78 /////////////////////////////////////////////////////////////////////////////////////////////////////// 实现 1)两个文本解析器,分别解析两个文本文件。 本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/1565697,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册