首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

Mocha BSM基础架构管理——LINUX主机监控

业务需求与挑战 随着Linux系统的逐步发展,功能及稳定性逐步得到了大多数用户的认可,Linux系统在一个企业的IT环境中起着越来越重要的作用。 虽然Linux系统相对商业化的UNIX系统维护相对简单,但是Linux系统在日常的维护管理中还有存在着一些难题: 发行版本众多,各厂商的产品之间存在着一定的差异。如SUSE、RedHat、RedFlag等,他们虽然都是基于标准的内核版本开发,但是在一些系统维护、软硬件管理、网络管理等方面还是有很多区别的。而且作为一个大型的企业内部往往是不仅有一种Linux的发行版本在使用,因此管理员需要去学习多种系统的维护。 数量多,管理的工作量巨大。在一些企业的IT环境中,往往会采用集群式的Linux部署架构,因为采用Linux系统总体的成本低,采用分布式的架构既可以满足企业应用对性能的高要求又可以降低总拥有成本。这样一来管理员往往需要维护数量众多的Linux主机,而当主机的数目达到了几十台甚至上百台,完全通过人工来管理几乎是不可能完成的任务,会降低整个应用系统的运行效率。 关键功能与亮点 提供最完善的Linux监控提供商之一,包括以下: • Red Hat Advanced Server • SUSE Linux • Novell Open Server • 红旗(Red Flag) Linux • Ubuntu Linux • FreeBSD • Cent OS 提供了Agent和Agentless两种监控方式,满足不同用户的要求。Agent式监控允许从系统采集更多的性能指标,而Agentless提供更容易和方便的部署与安装。 监控指标覆盖面广泛,涉及到CPU、内存、磁盘、分区和网络等方面,为管理员提供具有针对性的指标数据。 灵活的策略管理,不仅可以针对不同的系统设定不同的监控策略(监控频度、指标阈值、报警方式),还可以对同一个系统的不同子资源设定不同的监控策略,例如具有多个CPU、网络适配器的系统。 多种多样的报警方式,Mocha BSM支持邮件、短信、语音拨号和桌面报警等多种方式,确保管理员可以随时随地掌握系统的运行情况。 直观的可视化监控,提供给管理员一个可视化、动态的、全面的展示页面,降低管理员的技术门槛。 提供宕机的根本原因分析,帮助管理员更快解决问题,使最终用户得到更高品质的应用服务。 我们给客户带来什么 通过我们Mocha BSM可以帮助企业达到以下效果: 提供最完善Linux监控与管理 由于Linux发布版本比较多,要找一个监控软件支持这么多版本比较难,所以很多企业只能选择投资多个监控软件或者放弃监控部分Linux主机。现在,通过Mocha BSM支持的多个Linux平台,这个问题获得很有效的解决。 降低管理员日常维护和管理的难度 Linux有很多发行版本,针对Linux管理难度比较高。管理员不用再去学习众多发行厂商产品的操作和使用方法,只需要通过统一的监控展现页面就可以全面的掌握每个Linux系统的性能情况。 降低维护人员的工作量 Linux主机可以随着业务需要增加,但是维护人员人数可以保持不变。 实现统一的监控和管理 可以从整体上掌握整个应用系统的性能情况,为企业提供有针对性的数据报表,帮助企业有针对性的进行系统的扩容改造。 更多相关信息,请点击 [url]http://www.mochabsm.com[/url] 本文转自赖永锋51CTO博客,原文链接:http://blog.51cto.com/mochasoft/86449 ,如需转载请自行联系原作者

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

Android学习笔记(二)基础知识(1)

更改文字颜色 文字色: TextView.setTextColor(Color.***); 背景色: Resources resources = getBaseContext().getResources(); Drawable HippoDrawable = resources.getDrawable(R.drawable.white); TextView.setBackgroundDrawable(HippoDrawable); 获取手机分辨率 import android.util.DisplayMetrics DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); String x,y; x=dm.widthPixels; y=dm.heightPixels; 页面转换 在Android应用中,是通过setContentView来实现页面的转换处理的,也就是在不同的layout之间进行切换。 setContentView(R.layout.****); 例子: package com.example.test4; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.support.v4.app.NavUtils; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b1=(Button)findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub jumpToMylayout(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void jumpToMylayout(){ setContentView(R.layout.mylayout); Button b2 = (Button)findViewById(R.id.button1); b2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub jumpToLayout(); } }); } public void jumpToLayout(){ setContentView(R.layout.activity_main); Button b1=(Button)findViewById(R.id.button1); b1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub jumpToMylayout(); } }); } } 调用其他Activity 与上面在不同layout之间转换不同,这里我们需要移交主权到另外一个Activity。 //一个Activity Intent intent=new Intent(); intent.setClass(MainActivity.this,replace.class); startActivity(intent); MainActivity.this.finish(); //另外一个Activity Intent intent=new Intent(); intent.setClass(replace.this, MainActivity.class); startActivity(intent); replace.this.finish(); 不同Activity之间的数据转换 利用Android.os.Bundle对象封装数据的能力,将欲传递的数据或参数,通过Bundle来传递不同Intent之间的数据。 发送: Intent intent=new Intent(); intent.setClass(MainActivity.this,display.class); Bundle bundle = new Bundle(); bundle.putString("num",et1.getText().toString()); bundle.putString("name",et2.getText().toString()); intent.putExtras(bundle); startActivity(intent); 接收: Bundle bundle = this.getIntent().getExtras(); String num = bundle.getString("num"); String name = bundle.getString("name"); 返回数据到前一个Activity 唤起一个Activity: startActivityForResult(intent,0) 重载onActivityResult: protected voidonActivityResult(int requestCode,int resultCode,Intent data){ switch(resultCode){ case RESULT_OK: Bundle bundle=data.getExtras(); //code there break; default: break; } } 返回数据: input.this.setResult(RESULT_OK, intent); 部分代码: //main_activity package com.example.test7; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.support.v4.app.NavUtils; public class MainActivity extends Activity { TextView tx; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bt=(Button)findViewById(R.id.button1); tx=(TextView)findViewById(R.id.textView1); bt.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClass(MainActivity.this, input.class); startActivityForResult(intent,0); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch(resultCode){ case RESULT_OK: Bundle bundle=data.getExtras(); String str=bundle.getString("str").toString(); tx.setText(str); break; default: break; } } } /** * input.java */ package com.example.test7; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class input extends Activity { Intent intent; Bundle bundle; EditText et; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.input); Button bt=(Button)findViewById(R.id.button1); et=(EditText)findViewById(R.id.editText1); intent = this.getIntent(); bundle= new Bundle(); bt.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub bundle.putString("str", et.getText().toString()); intent.putExtras(bundle); input.this.setResult(RESULT_OK, intent); input.this.finish(); } }); } } 本文转自cococo点点博客园博客,原文链接:http://www.cnblogs.com/coder2012/archive/2013/05/13/3075259.html,如需转载请自行联系原作者

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

docker中如何制作自己的基础镜像

一.本地镜像 举个例子:现在把自己的开发环境打包,取名为centos6-base.tar,然后在docker中,以centos6-base.tar作为基准镜像。 1.创建自己的镜像,放置于/root目录下: #tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar / 需要注意的是,文件打包支持的类型只有(.tar, .tar.gz, .tgz, .bzip, .tar.xz, or .txz)这几种。 2.将制作的centos导入,并命令为:centos6-base: #cat centos6-base.tar | docker import - centos6-base 3.现在可以运行它了(测试查看内核): #docker run -i -t centos6-base cat /etc/redhat-release 二.本地目录 假设你把centos-base.tar放在/opt目录里,则这条命令可以为(未验证): $ sudo tar -c . | docker import - /opt 二.远程镜像 操作比较简单: $ sudo docker import http://example.com/exampleimage.tgz 本文转自 yntmdr 51CTO博客,原文链接:http://blog.51cto.com/yntmdr/1693806,如需转载请自行联系原作者

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

学习笔记-Linux系统基础知识2

shell GUI :graphic User Interface x-window CS架构 Gnome KDE Xface CLI: Command Line Interface sh bash csh ksh zsh tcsh dll: Dynamic Link Library .so: shared object login: 用户名:用户ID 认证机制: Authentication 授权:Authorization 审计:Audition(日志) prompt:命令提示符 命令: magic number:魔数 标识二进制命令执行的格式 Linux上的Shebang符号(#!) #!/bin/bash # command option arguments 短选项 - 长选择 -- arguments 作用对象 option 执行方式 有些选项可以带参数 目录:文件,路径映射 路径:从指定起始点到目的地所经过的路径 层次化文件管理的机制 File System Filesystem Hierarchy Standard(文件系统层次化标准)FHS FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录, 同时还给出了例外处理与矛盾处理 最顶级的/ ls:列出list pwd:Print Working Directory 文件类型: -:普通文件 d:目录文件 c:字符设备文件(character) b:块设备文件(block) l:符号连接文件(sysbolic link file)软连接 p:命令管道(pipe) s:套接字文件(socket) Xshell 远程登录工具 文件权限:9位 每3位一组,rwx 文件硬链接的次数 文件的属主(owner) 文件的属组(group) 文件大小(size) 单位是字节 时间戳(timestamp)最近一次被修改的时间(共有3个时间戳) 访问(access) 修改(modify)文件的内容发生了改变 改变(change),metadata,元数据,文件的属性 ls 指令 -h(human人类识别) :做单位转换 -a(all)显示以.开头的隐藏文件 (蓝色表示目录) -A :除..和.外的所有文件 -d : 显示目录自身属性 -i : 显示文件的索引节点号 index node(inode) -r : 逆序显示 -R :递归(recursive)显示 cd: change directory 家目录,主目录,home directory cd ~ 回到家目录 cd ~USERNAME 进入指定用户的家目录 cd - :当前目录和前一次所在的目录之间来回切换 命令类型: 内置命令(shell内置) 外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件 环境变量:命名的内存空间 printenv 显示环境变量 PATH :使用冒号隔开的一堆路径 type:显示指定属于哪种类型 hash(hash表,键值对):缓存,记录缓存记录使用过的命令,次数和路径 o(1)速度级别 缓冲是实现系统加速的 本文转自飞行萌51CTO博客,原文链接:http://blog.51cto.com/8527508/1937448 ,如需转载请自行联系原作者

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

理解Docker(1):Docker 安装和基础用法

本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 1. 安装 1.1 在 Ubuntu 14.04 上安装 Docker 前提要求: 内核版本必须是3.10或者以上 依次执行下面的步骤: sudo apt-get update sudo apt-get install apt-transport-https ca-certificates sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 编辑/etc/apt/sources.list.d/docker.list 文件,添加deb https://apt.dockerproject.org/repo ubuntu-trusty main sudo apt-getupdate sudo apt-getpurge lxc-docker apt-cachepolicy docker-engine apt-get upgrade sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual sudo apt-get install docker-engine 至此,安装过程完成。 运行sudo service dockerstart 启动 Docker 守护进程。 运行 docker version 查看 Docker 版本 root@devstack:/home/sammy# docker --version Docker version 1.12.1, build 23cf638 启动第一个容器: 启动第一个Docker 容器 docker run hello-world root@devstack:/home/sammy# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. 它的运行成功也表明前面的安装步骤都运行正确了。 以上内容参考自 Docker 官网:https://docs.docker.com/engine/installation/linux/ubuntulinux/ 1.2 Docker 到目前(2016/09/16)为止的版本历史 版本号 发布日期 发布经理 Docker 1.12.1 08/18/2016 Docker 1.12.0 07/28/2016 Docker 1.11.0 04/12/2016 @mlaventure Docker 1.10.0 02/04/2016 @thaJeztah Docker 1.9.0 10/29/2015 @tiborvass Docker 1.8.0 08/11/2015 @calavera 2. Docker 的基本操作 2.1 Docker 容器的状态机 (图片来源) 一个容器在某个时刻可能处于以下几种状态之一: created:已经被创建 (使用 docker ps -a 命令可以列出)但是还没有被启动 (使用 docker ps 命令还无法列出) running:运行中 paused:容器的进程被暂停了 restarting:容器的进程正在重启过程中 exited:上图中的 stopped 状态,表示容器之前运行过但是现在处于停止状态(要区别于 created 状态,它是指一个新创出的尚未运行过的容器)。可以通过 start 命令使其重新进入 running 状态 destroyed:容器被删除了,再也不存在了 你可以在 docker inspect 命令的输出中查看其详细状态: "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4597, "ExitCode": 0, "Error": "", "StartedAt": "2016-09-16T08:09:34.53403504Z", "FinishedAt": "2016-09-16T08:06:44.365106765Z" } 2.2 Docker 命令概述 我们可以把Docker 的命令大概地分类如下: 镜像操作: build Build an image from a Dockerfile commit Create a new image from a container's changes images List images load Load an image from a tar archive or STDIN pull Pull an image or a repository from a registry push Push an image or a repository to a registry rmi Remove one or more images search Search the Docker Hub for images tag Tag an image into a repository save Save one or more images to a tar archive (streamed to STDOUT by default) history 显示某镜像的历史 inspect 获取镜像的详细信息 容器及其中应用的生命周期操作: create Create a new container (创建一个容器) kill Kill one or more running containers inspect Return low-level information on a container, image or task pause Pause all processes within one or more containers ps List containers rm Remove one or more containers (删除一个或者多个容器) rename Rename a container restart Restart a container run Run a command in a new container (创建并启动一个容器) start Start one or more stopped containers (启动一个处于停止状态的容器) stats Display a live stream of container(s) resource usage statistics (显示容器实时的资源消耗信息) stop Stop one or more running containers (停止一个处于运行状态的容器) top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers wait Block until a container stops, then print its exit code attach Attach to a running container exec Run a command in a running container port List port mappings or a specific mapping for the container logs 获取容器的日志 容器文件系统操作: cp Copy files/folders between a container and the local filesystem diff Inspect changes on a container's filesystem export Export a container's filesystem as a tar archive import Import the contents from a tarball to create a filesystem image Docker registry 操作: login Log in to a Docker registry. logout Log out from a Docker registry. Volume 操作 volume Manage Docker volumes 网络操作 network Manage Docker networks Swarm 相关操作 swarm Manage Docker Swarm service Manage Docker services node Manage Docker Swarm nodes 系统操作: version Show the Docker version information events Get real time events from the server (持续返回docker 事件) info Display system-wide information (显示Docker 主机系统范围内的信息) 比较有意思的几个命令: (1)容器从生到死整个生命周期 root@devstack:/home/sammy# docker create --name web31 training/webapp python app.py #创建名字为 web31 的容器 7465f4cb7c49555af32929bd1bc4213f5e72643c0116450e495b71c7ec128502 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' web31 #其状态为 created created root@devstack:/home/sammy# docker start web31 #启动容器 web31 root@devstack:/home/sammy# docker exec -it web31 /bin/bash #在容器中运行 bash 命令 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' web31 #其状态为 running running root@devstack:/home/sammy# docker pause web31 #暂停容器 web31 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' web31 paused root@devstack:/home/sammy# docker unpause web31 #继续容器 web31 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' web31 running root@devstack:/home/sammy# docker rename web31 newweb31 #重命名 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' newweb31 running root@devstack:/home/sammy# docker top newweb31 #在容器中运行 top 命令 UID PID PPID C STIME TTY TIME CMD root 5009 4979 0 16:28 ? 00:00:00 python app.py root@devstack:/home/sammy# docker logs newweb31 #获取容器的日志 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) root@devstack:/home/sammy# docker stop newweb31 #停止容器 newweb31 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' newweb31 exited root@devstack:/home/sammy# docker rm newweb31 #删除容器 newweb31 root@devstack:/home/sammy# docker inspect --format='{{.State.Status}}' newweb31 Error: No such image, container or task: newweb31 (2) docker stop 和 docker kill 在docker stop 命令执行的时候,会先向容器中PID为1的进程发送系统信号 SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间(默认为 10秒,用户可以指定特定超时时长),会继续发送SIGKILL的系统信号强行kill掉进程。在容器中的应用程序,可以选择忽略和不处理SIGTERM信号,不过一旦达到超时时间,程序就会被系统强行kill掉,因为SIGKILL信号是直接发往系统内核的,应用程序没有机会去处理它。 比如运行docker stop web5 -t 20 命令后: 2016-09-16T16:01:18.206540853+08:00 container kill b3256ef1400a7f6a6f242e377a77af5e25d3b12237c4ee7c2e9b31a5f6437868 (image=training/webapp, name=web5, signal=15) 2016-09-16T16:01:38.212352224+08:00 container kill b3256ef1400a7f6a6f242e377a77af5e25d3b12237c4ee7c2e9b31a5f6437868 (image=training/webapp, name=web5, signal=9) 2016-09-16T16:01:38.235021315+08:00 container die b3256ef1400a7f6a6f242e377a77af5e25d3b12237c4ee7c2e9b31a5f6437868 (exitCode=137, image=training/webapp, name=web5) 能看到: 首先 docker 向容器发出SIGTERM 信号(signal=15) 等待20秒 (01:18 到01:38) 再发送SIGKILL 系统信号 (signal = 9) 然后容器被杀掉了 (die) 而 docker kill 命令会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。运行 docker kill web5 命令后: 2016-09-16T16:06:44.351086471+08:00 container kill b3256ef1400a7f6a6f242e377a77af5e25d3b12237c4ee7c2e9b31a5f6437868 (image=training/webapp, name=web5, signal=9) 2016-09-16T16:06:44.365116100+08:00 container die b3256ef1400a7f6a6f242e377a77af5e25d3b12237c4ee7c2e9b31a5f6437868 (exitCode=137, image=training/webapp, name=web5) 可见直接发出的是 SIGKILL 信号,容器立马就被杀掉了。 (3)使用 docker cp 在 host 和 container 之间拷贝文件或者目录 root@devstack:/home/sammy# docker cp /home/sammy/mydockerbuild/Dockerfile web5:/webapp #从 host 拷贝文件到 container 里面 root@devstack:/home/sammy# root@devstack:/home/sammy# docker cp web5:/webapp/Dockerfile /home/sammy/Dockerfile #从 container 里面拷贝文件到 host 上 root@devstack:/home/sammy# ls /home/sammy chroot devstack Dockerfile mongodbdocker mydockerbuild webapp (4)docker export 和 import docker export:将一个容器的文件系统打包为一个压缩文件 root@devstack:/home/sammy# docker export web5 -o ./web5 root@devstack:/home/sammy# ls chroot devstack Dockerfile mongodbdocker mydockerbuild web5 webapp docker import:从一个压缩文件创建一个镜像 root@devstack:/home/sammy# docker import web5 web5img -m "imported on 0916" sha256:745bb258be0a69a517367667646148bb2f662565bb3d222b50c0c22e5274a926 root@devstack:/home/sammy# docker history web5img IMAGE CREATED CREATED BY SIZE COMMENT 745bb258be0a 6 seconds ago 324 MB imported on 0916 (5) 当在 docker 中执行某 bash 命令时,可能会返回 command not found。其原因是你所使用的镜像往往是最小镜像,未安装你所需要的命令。比如基于 ubuntu 镜像启动一个容器,运行 ping 命令会提示该错误。此时,需要手工安装该工具。 apt-get update apt-get install iputils-ping #会安装 ping 命令apt-get install net-tools #会安装 ifconfig 命令 2.3 docker run 命令 docker run 命令会创建一个容器并启动它,它也是包含很多的参数,按照用途将它们分类如下: cgroups 和 namespace 相关: --blkio-weight value Block IO (relative weight), between 10 and 1000 --blkio-weight-device value Block IO weight (relative device weight) (default []) --cgroup-parent string Optional parent cgroup for the container --cpu-percent int CPU percent (Windows only) --cpu-period int Limit CPU CFS (Completely Fair Scheduler) period --cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota -c, --cpu-shares int CPU shares (relative weight) --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) --device-read-bps value Limit read rate (bytes per second) from a device (default []) --device-read-iops value Limit read rate (IO per second) from a device (default []) --device-write-bps value Limit write rate (bytes per second) to a device (default []) --device-write-iops value Limit write rate (IO per second) to a device (default []) --ipc string IPC namespace to use -m, --memory string Memory limit --memory-reservation string Memory soft limit --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap --memory-swappiness int Tune container memory swappiness (0 to 100) (default -1) --kernel-memory string Kernel memory limit -u, --user string Username or UID (format: <name|uid>[:<group|gid>]) --userns string User namespace to use --uts string UTS namespace to use -h, --hostname string Container host name --pid string PID namespace to use --pids-limit int Tune container pids limit (set -1 for unlimited) --isolation string Container isolation technology --io-maxbandwidth string Maximum IO bandwidth limit for the system drive (Windows only) --io-maxiops uint Maximum IOps limit for the system drive (Windows only) linux process capabilities 相关参数: --cap-add value Add Linux capabilities (default []) --cap-drop value Drop Linux capabilities (default []) 容器运行模式和环境相关: -d, --detach Run container in background and print container ID -e, --env value Set environment variables (default []) --env-file value Read in a file of environment variables (default []) DNS 相关: --dns value Set custom DNS servers (default []) --dns-opt value Set DNS options (default []) --dns-search value Set custom DNS search domains (default []) 健康检查相关: --health-cmd string Command to run to check health --health-interval duration Time between running the check --health-retries int Consecutive failures needed to report unhealthy --health-timeout duration Maximum time to allow one check to run --no-healthcheck Disable any container-specified HEALTHCHECK IP 和端口: --ip string Container IPv4 address (e.g. 172.30.100.104) --ip6 string Container IPv6 address (e.g. 2001:db8::33) -p, --publish value Publish a container's port(s) to the host (default []) -P, --publish-all Publish all exposed ports to random ports --expose value Expose a port or a range of ports (default []) --mac-address string Container MAC address (e.g. 92:d0:c6:0a:29:33) --add-host value Add a custom host-to-IP mapping (host:ip) (default []) Volume 相关: -v, --volume value Bind mount a volume (default []) --volume-driver string Optional volume driver for the container --volumes-from value Mount volumes from the specified container(s) (default []) --storage-opt value Storage driver options for the container (default []) Network 有关: --network string Connect a container to a network (default "default") --network-alias value Add network-scoped alias for the container (default []) --link value Add link to another container (default []) --link-local-ip value Container IPv4/IPv6 link-local addresses (default []) 日志有关: --log-driver string Logging driver for the container --log-opt value Log driver options (default []) 交互性有关: -a, --attach value Attach to STDIN, STDOUT or STDERR (default []) -i, --interactive Keep STDIN open even if not attached OOM 有关: --oom-kill-disable Disable OOM Killer --oom-score-adj int Tune host's OOM preferences (-1000 to 1000) 其它(待更进一步分类): --cidfile string Write the container ID to the file --detach-keys string Override the key sequence for detaching a container --device value Add a host device to the container (default []) --disable-content-trust Skip image verification (default true) --entrypoint string Overwrite the default ENTRYPOINT of the image --group-add value Add additional groups to join (default []) --help Print usage -l, --label value Set meta data on a container (default []) --label-file value Read in a line delimited file of labels (default []) --name string Assign a name to the container --privileged Give extended privileges to this container --read-only Mount the container's root filesystem as read only --restart string Restart policy to apply when a container exits (default "no") --rm Automatically remove the container when it exits --runtime string Runtime to use for this container --security-opt value Security Options (default []) --shm-size string Size of /dev/shm, default value is 64MB --sig-proxy Proxy received signals to the process (default true) --stop-signal string Signal to stop a container, SIGTERM by default (default "SIGTERM") --sysctl value Sysctl options (default map[]) --tmpfs value Mount a tmpfs directory (default []) -t, --tty Allocate a pseudo-TTY --ulimit value Ulimit options (default []) -w, --workdir string Working directory inside the container 具体的内容以后会有专门文件分析。 3. Doker 平台的基本构成 Docker 平台基本上由三部分组成: 客户端:用户使用 Docker 提供的工具(CLI 以及 API 等)来构建,上传镜像并发布命令来创建和启动容器 Docker 主机:从 Docker registry 上下载镜像并启动容器 Docker registry:Docker 镜像仓库,用于保存镜像,并提供镜像上传和下载 后面的文章会具体分析。 本文转自SammyLiu博客园博客,原文链接:http://www.cnblogs.com/sammyliu/p/5875470.html,如需转载请自行联系原作者

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

Hadoop基础入门学习笔记(基本概念)

一、数据块(blck) HDFS(Hadp Distributed File System)默认的最基本的存储单位是64M的数据块。 和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。 二、元数据节点(Namende)和数据节点(datande) 元数据节点用来管理文件系统的命名空间 其将所有的文件和文件夹的元数据保存在一个文件系统树中。 这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit lg) 其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在系统启动的时候从数据节点收集而成的。 数据节点是文件系统中真正存储数据的地方。 客户端(client)或者元数据信息(namende)可以向数据节点请求写入或者读出数据块。 其周期性的向元数据节点回报其存储的数据块信息。 从元数据节点(secndary namende) 从元数据节点并不是元数据节点出现问题时候的备用节点,它和元数据节点负责不同的事情。 其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。这点在下面会详细叙述。 合并过后的命名空间镜像文件也在从元数据节点保存了一份,以防元数据节点失败的时候,可以恢复。 1、 元数据节点文件夹结构 VERSIN文件是java prperties文件,保存了HDFS的版本号。 layutVersin是一个负整数,保存了HDFS的持续化在硬盘上的数据结构的格式版本号。 namespaceID是文件系统的唯一标识符,是在文件系统初次格式化时生成的。 cTime此处为0 strageType表示此文件夹中保存的是元数据节点的数据结构。 1 2 3 4 namespaceID=1232737062 cTime=0 strageType=NAME_NDE layutVersin=-18 2、文件系统命名空间映像文件及修改日志 当文件系统客户端(client)进行写操作时,首先把它记录在修改日志中(edit lg) 元数据节点在内存中保存了文件系统的元数据信息。在记录了修改日志后,元数据节点则修改内存中的数据结构。 每次的写操作成功之前,修改日志都会同步(sync)到文件系统。 fsimage文件,也即命名空间映像文件,是内存中的元数据在硬盘上的checkpint,它是一种序列化的格式,并不能够在硬盘上直接修改。 同数据的机制相似,当元数据节点失败时,则最新checkpint的元数据信息从fsimage加载到内存中,然后逐一重新执行修改日志中的操作。 从元数据节点就是用来帮助元数据节点将内存中的元数据信息checkpint到硬盘上的 checkpint的过程如下: 从元数据节点通知元数据节点生成新的日志文件,以后的日志都写到新的日志文件中。 从元数据节点用http get从元数据节点获得fsimage文件及旧的日志文件。 从元数据节点将fsimage文件加载到内存中,并执行日志文件中的操作,然后生成新的fsimage文件。 从元数据节点将新的fsimage文件用http pst传回元数据节点 元数据节点可以将旧的fsimage文件及旧的日志文件,换为新的fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,写入此次checkpint的时间。 这样元数据节点中的fsimage文件保存了最新的checkpint的元数据信息,日志文件也重新开始,不会变的很大了。 3、从元数据节点的目录结构 4、数据节点的目录结构 数据节点的VERSION文件格式如下: 1 2 3 4 5 namespaceID=1232737062 storageID=DS-1640411682-127.0.1.1-50010-1254997319480 cTime=0 storageType=DATA_NODE layoutVersion=-18 blk_<id>保存的是HDFS的数据块,其中保存了具体的二进制数据。 blk_<id>.meta保存的是数据块的属性信息:版本信息,类型信息,和checksum 当一个目录中的数据块到达一定数量的时候,则创建子文件夹来保存数据块及数据块属性信息。 本文转自南非蚂蚁51CTO博客,原文链接:http://blog.51cto.com/ixdba/1428278 ,如需转载请自行联系原作者

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

最简单android的下拉列表_基础

我们看看,如何去构成, //声明Spinner对象 privateSpinnerspinner=null; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //通过ID,得到Spinner对象 spinner=(Spinner)findViewById(R.id.spinnerId); List<String>list=newArrayList<String>(); list.add("test1"); list.add("test2"); //调用ArrayAdapter的构造函数来创建ArrayAdapter对象 //第一个参数是指上下文对象 //第二个参数指定了下拉菜单当中每一个条目的样式 //第三个参数指定了TextView控件的ID //第四个参数为整个列表提供数据 ArrayAdapteradapter=newArrayAdapter(this,R.layout.item,R.id.textViewId,list); //通过createFromResource方法创建一个ArrayAdapter对象 //第一个参数是指上下文对象 //第二参数引用了在strings.xml文件当中定义的String数组 //第三个参数是用来指定Spinner的样式,是一个布局文件ID,该布局文件由Android系统提供,也可替换为自己定义的布局文件 /*ArrayAdapter<CharSequence>adapter=ArrayAdapter.createFromResource( this,R.array.planets_array, android.R.layout.simple_spinner_item); *///设置Spinner当中每个条目的样式,同样是引用一个Android系统提供的布局文件 //adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setPrompt("测试"); //为spinner对象绑定监听器 spinner.setOnItemSelectedListener(newSpinnerOnSelectedListener()); } //这个监听器主要用来监听用户选择列表的动作 classSpinnerOnSelectedListenerimplementsOnItemSelectedListener{ //当用户选定了一个条目时,就会调用该方法 @Override publicvoidonItemSelected(AdapterView<?>adapterView,Viewview,intposition, longid){ Stringselected=adapterView.getItemAtPosition(position).toString(); System.out.println(selected); } @Override publicvoidonNothingSelected(AdapterView<?>adapterView){ //TODOAuto-generatedmethodstub System.out.println("nothingSelected"); } 附件:http://down.51cto.com/data/2357528 本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/487641,如需转载请自行联系原作者

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

Android Map开发基础知识学习笔记

注册Android地图API密钥 运行:keytool -list -keystore ~/.android/debug.keystore 用得到的MD5码到http://code.google.com/intl/zh-CN/android/maps-api-signup.html注册API密钥。参考: http://www.cnblogs.com/feisky/archive/2010/01/17/1650083.html 注册完成后会得到如下的网页: 您的密钥是: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 此密钥适用于所有使用以下指纹所对应证书进行验证的应用程序: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX 下面是一个xml格式的示例,帮助您了解地图功能: <com.google.android.maps.MapView android:layout_width="fill_parent" android:layout_height="fill_parent"android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" /> 模拟器设置 建立一个"Google Inc.:Google APIs:3"的模拟器。 手机终端需要支持Google Add-ons 作为与Google合作的手机终端的制造商,如果想在自己的Android终端中集成Google的一些应用,例如map,market,picasa,sync等,需要和Google签约,这样Google会有专人帮你将这一系列服务整合到你的平台中来。 作为没有和Google合作的手机终端的制造商,我们可以使用破解的方法将Add-ons中的运行库整合到自己的framework中来(build到手机终端的system.img中)。操作如下: 1.在Android中,额外支持GoogleAdd-ons(Google Maps),需要将如下档案(从标准的SDK中pull出来的,也可以从GPhone中pull出来)打包进System.img。GoogleAdd-ons只需要1--2,Goolge Maps(Google的地图程序)需要1--5: 1)system/frameworkcom.google.android.maps.jar 2)system/etc/permissionscom.google.android.maps.xml 3)system/frameworkcom.google.android.gtalkservice.jar 4)system/etc/permissionscom.google.android.gtalkservice.xml 5)system/appMaps.apk (Google Maps v3.0) 2.源码:Android Cupcake Release(经测试,在donut平台同样适用。) 1)编译源码(为了生成out/target目录中Android最原始的东西) 2)将以上文件加入out/target/product/generic相应目录,在源码根目录使用make snod打包,获得新的system.img 权限和Maps库设置 在manifest.xml中设置全相应的权限,比如: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> 在manifest.xml中加上要用的maps库: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.package.name"> ... <application android:name="MyApplication"> <uses-library android:name="com.google.android.maps"/> ... </application> ... </manifest> Maps库分析 Maps库提供了十几个类,具体可以参考这里http://code.google.com/intl/ja/android/add-ons/google-apis/reference/index.html,包括Mapview,MapController,MapActivity等。 (1)MapController 控制地图移动,伸缩,以某个GPS坐标为中心,控制MapView中的view组件,管理Overlay,提供View的基本功能。使用多种地图模式(地图模式(某些城市可实时对交通状况进行更新),卫星模式,街景模式)来查看Google Map。 常用方法:animateTo(GeoPoint point)setCenter(GeoPoint point)setZoom(int zoomLevel)等。 (2)MapView Mapview是用来显示地图的view,它派生自android.view.ViewGroup。当MapView获得焦点,可以控制地图的移动和缩放。 地图可以以不同的形式来显示出来,如街景模式,卫星模式等,通过setSatellite(boolean)setTraffic(boolean), setStreetView(boolean)方法。 MapView只能被MapActivity来创建,这是因为mapview需要通过后台的线程来连接网络或者文件系统,而这些线程要由mapActivity来管理。 需要特别说明的一点是,android 1.5中,map的zoom采用了built-in机制,可以通过setBuiltInZoomControls(boolean)来设置是否在地图上显示zoom控件。 常用方法:getController()getOverlays()setSatellite(boolean)setTraffic(boolean),setStreetView(boolean)setBuiltInZoomControls(boolean)等。 (3)MapActivity 管理Activity的生命周期,为mapview建立及取消对map service的连接。 MapActivity是一个抽象类,任何想要显示MapView的activity都需要派生自MapActivity。并且在其派生类的onCreate()中,都要创建一个MapView实例,可以通过MapViewconstructor (然后添加到View中ViewGroup.addView(View))或者通过layout XML来创建。 (4)Overlay Overlay是覆盖到MapView的最上层,可以扩展其ondraw接口,自定义在MapView中显示一些自己的东西。MapView通过MapView.getOverlays()对Overlay进行管理。 除了Overlay这个基类,Google还扩展了2个比较有用的Overlay 1)MylocationOverlay—集成了Android.location中接收当前坐标的接口,集成SersorManager中CompassSensor的接口 我们只需要enableMyLocation(),enableCompass就可以让我们的程序拥有实时的MyLocation以及Compass功能(Activity.onResume()中)。 2)ItemlizedOverlay—管理一个OverlayItem链表,用图片等资源在地图上作风格相同的标记。 (5)Projection:MapView中GPS坐标与设备坐标的转换(GeoPoint和Point)。 一个简单的小例子 用一个小程序来演示一下android中地图功能的开发。主要功能是实现了地图的缩放,添加了菜单,从而可以手动选择地图的显示模式等。 Step1:新建一个android project,注意这里要选择的buildtarget为"GoogleAPIs" Step 2:修改menifest文件: <?xmlversion="1.0"encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.map.prac" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/icon"android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" /> <activity android:name=".MapViewPrac2" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3" /> </manifest> Step 3:修改layout文件,main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.google.android.maps.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="???????????????????????????????????" /> </LinearLayout> 这里需要将api key中的????????????改成你自己申请到的api key. Step4:修改代码: package feisky.navigation; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends MapActivity { // 地图显示控制相关变量定义 private MapView map=null; private MapController mapCon; // 菜单项 final private int menuMode=Menu.FIRST; final private int menuExit=Menu.FIRST+1; private int chooseItem=0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取MapView map=(MapView)findViewById(R.id.map); // 设置显示模式 map.setTraffic(true); map.setSatellite(false); map.setStreetView(true); // 设置可以缩放 map.setBuiltInZoomControls(true); // 设置初始地图的中心位置 GeoPoint geoBeijing=new GeoPoint((int)(39.95*1000000), (int)(116.37*1000000)); mapCon=map.getController(); mapCon.setCenter(geoBeijing); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 建立菜单 menu.add(0,menuMode,0,"地图模式"); menu.add(0, menuExit, 1, "退出"); return super.onCreateOptionsMenu(menu); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case menuExit: finish(); break; case menuMode: Dialog dMode=new AlertDialog.Builder(this) .setTitle("地图模式设置") .setSingleChoiceItems(R.array.MapMode, chooseItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { chooseItem=which; } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: map.setSatellite(true); //map.setTraffic(false); //map.setStreetView(false); break; case 1: //map.setSatellite(false); map.setTraffic(true); //map.setStreetView(false); break; case 2: //map.setSatellite(false); //map.setTraffic(false); map.setStreetView(true); break; default: break; } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create(); dMode.show(); break; default: break; } return super.onMenuItemSelected(featureId, item); } @Override protected boolean isRouteDisplayed() { return false; } } 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/01/20/1652230.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

Sublime Text

Sublime Text

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

用户登录
用户注册