首页 文章 精选 留言 我的

精选列表

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

Mocha BSM基础架构管理——可视化主机进程

业务需求与挑战 • 由于不同操作系统之间的差别较大,以前每个操作系统的维护命令、维护工具都不同,维护成本和维护的难度很高。 • Unix系统管理入门门槛比较高 • Unix管理界面都是通过简单的Telnet,不直观,而且要求对系统命令很熟悉。 • 以前的维护工具不仅使用复杂,而且升级更新较慢,无法跟上操作系统更新的速度,对于操作系统的新特性无法管理。 关键功能与亮点•支持主流主机: - Windows 2000/2003/Professional/XP - Solaris - AIX - Linux •提供主机运行情况动态监控 比如:IP地址、OS、版本、CPU利用率、内存利用率、磁盘利用率、I/O、网络接口传输速率、连接用户数等等。 •提供可视化进程监控 - 监控进程状态、CPU使用情况、内存使用情况、用户、句柄数、线程数、I/O、优先级、总运行时间、最后运行时间等。 - 关键进程跟踪 当进程启动或终止时可以发送报警通知,并记录进程的最后运行时间。 •提供典型服务监控: 如Telnet、HTTP、FTP,还支持Windows“服务一览” •对系统远程管理: 终止进程、调整进程优先级等等。 •产生关键进程启动/终止事件时,以短信、邮件、声光、Mocha Alert多种方式通知管理人员。 •主机配置变更管理 主机可视化管理系统能够自动发现组件,如CPU、内存、分区、网卡的变化。 •自定义监控内容、监控频率: 我们给客户带来什么• 释放维护人员,提高工作效率 以前需要有人定时查看各个主机的关键性能指标,使用各种命令,查看操作系统的各个不同位置,才能确保系统的正常运行。现在只需在一个统一页面就能查看到所有信息。 • 提高IT响应速度 主机监控自动化,无需人工干预,一旦发生问题,系统会自动发送报警通知。 • 可视化监控,一目了然的监控 主机可视化监控提供一目了然的监控,降低对管理员的要求,并且降低了管理员的学习门槛。将主机维护所关注的信息集中到系统中,管理员无需再从操作系统的不同位置查询。 • 深入的监控,协助用户分析问题所在 当系统性能明显降低时,管理员仅通过查看操作系统本身提供的进程列表往往无法准确的判断症结所在,需要通过复杂的命令逐个探查进程的信息,既费时又难以快速定位问题。可视化进程监控在一个屏幕中即可展示出每个进程的各项指标信息。 • 始终保持与客户服务器操作系统同步 除不断支持更多类型的操作系统之外,紧随客户服务器操作系统版本的升级而升级,升级过程简单快捷。 更多相关信息,请点击 [url]http://www.mochabsm.com[/url] 本文转自赖永锋51CTO博客,原文链接:http://blog.51cto.com/mochasoft/86555 ,如需转载请自行联系原作者

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

Android基础之使用Fragment控制切换多个页面[转]

Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序就可以了,不用到处去找。里面分开不同功能,实现了不同的类 今天讲解一下Fragment的控制,主要是切换View和页面替换等操作。还有就是如何获取Fragment的管理对象,以及与Activity的通信方式。 1、管理Fragment要在activity中管理fragment,需要使用FragmentManager. 通过调用activity的getFragmentManager()取得它的实例. •可以通过FragmentManager做一些事情, 包括: 使用findFragmentById()(用于在activity layout中提供一个UI的fragment)或findFragmentByTag()(适用于有或没有UI的fragment)获取activity中存在的fragment。 •将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令)。 •使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener。 2、处理Fragment事务关于在activity中使用fragment的很强的一个特性是:根据用户的交互情况,对fragment进行添加、移除、替换以及执行其他动作。提交给activity的每一套变化被称为一个事务,可以使用在FragmentTransaction中的 API 处理。我们也可以保存每一个事务到一个activity管理的backstack,允许用户经由fragment的变化往回导航(类似于通过 activity往后导航)。 从 FragmentManager 获得一个FragmentTransaction实例: 复制代码代码如下: FragmentManager fragmentManager =getFragmentManager(); FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction(); 每一个事务都是同时要执行的一套变化。可以在一个给定的事务中设置你想执行的所有变化,使用诸如 add()、remove()和 replace()。然后, 要给activity应用事务,必须调用 commit()。 在调用commit()之前,你可能想调用 addToBackStack(),将事务添加到一个fragment事务的backstack。这个back stack由activity管理, 并允许用户通过按下 BACK按键返回到前一个fragment状态。 复制代码代码如下: //创建修改实例 Fragment newFragment = newExampleFragment(); FragmentTransaction transaction =getFragmentManager().beginTransaction(); // Replace whatever is in thefragment_container view with this fragment, // and add the transaction to the backstack transaction.replace(R.id.fragment_container,newFragment); transaction.addToBackStack(null); //提交修改 transaction.commit(); 上面是如何将一个fragment替换为另一个,并在后台堆栈中保留之前的状态。在这个例子中,newFragment替换了当前layout容器中的由R.id.fragment_container标识的fragment。通过调用 addToBackStack(), replace事务被保存到back stack,因此用户可以回退事务,并通过按下BACK按键带回前一个fragment。 如果添加多个变化到事务(例如add()或remove())并调用addToBackStack(),然后在你调用commit()之前的所有应用的变化会被作为一个单个事务添加到后台堆栈,BACK按键会将它们一起回退。添加变化到 FragmentTransaction的顺序不重要, 除以下例外: •必须最后调用 commit() •如果添加多个fragment到同一个容器, 那么添加的顺序决定了它们在view hierarchy中显示的顺序 当执行一个移除fragment的事务时, 如果没有调用 addToBackStack(), 那么当事务提交后,那个fragment会被销毁,并且用户不能导航回到它。有鉴于此,当移除一个fragment时,如果调用了addToBackStack(), 那么fragment会被停止,如果用户导航回来,它将会被恢复。另外,对于每一个fragment事务,你可以应用一个事务动画,通过在提交事务之前调用setTransition()实现。 调用 commit() 并不立即执行事务。恰恰相反,它将事务安排排期, 一旦准备好,就在activity的UI线程上运行(主线程)。如果有必要, 无论如何,你可以从你的UI线程调用executePendingTransactions()来立即执行由commit()提交的事务。但这么做通常不必要,除非事务是其他线程中的任务的一个从属。警告:你只能在activity保存它的状态(当用户离开activity)之前使用commit()提交事务. 3、与Activity通信尽管Fragment被实现为一个独立于Activity的对象,并且可以在多个activity中使用,但一个给定的fragment实例是直接绑定到包含它的activity的。 特别的fragment可以使用 getActivity() 访问Activity实例, 并且容易地执行比如在activity layout中查找一个view的任务。如下面的代码: 复制代码代码如下: View listView =getActivity().findViewById(R.id.list); 同样地,activity可以通过从FragmentManager获得一个到Fragment的引用来调用fragment中的方法,使用findFragmentById() 或 findFragmentByTag()。 复制代码代码如下: ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 4、总结最后需要说一下Fragment的例子,Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序就可以了,不用到处去找。里面分开不同功能,实现了不同的类。可以根据需要查看具体代码。 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/4819045.html ,如需转载请自行联系原作者

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

Ubuntu16.10安装Ocata之1:基础环境配置

使用两个节点手动安装OpenStack的Ocata版本 10.1.1.3controller 10.1.1.15 compute 控制节点配置 1、配置apt源 root@controller:~# apt install software-properties-common root@controller:~# add-apt-repository cloud-archive:ocata Ubuntu Cloud Archive for OpenStack Ocata More info: https://wiki.ubuntu.com/ServerTeam/CloudArchive Press [ENTER] to continue or ctrl-c to cancel adding it Reading package lists... Building dependency tree... Reading state information... The following NEW packages will be installed: ubuntu-cloud-keyring 0 upgraded, 1 newly installed, 0 to remove and 147 not upgraded. Need to get 5,086 B of archives. After this operation, 34.8 kB of additional disk space will be used. Get:1 http://ports.ubuntu.com/ubuntu-ports xenial/universe ppc64el ubuntu-cloud-keyring all 2012.08.14 [5,086 B] Fetched 5,086 B in 0s (5,433 B/s) Selecting previously unselected package ubuntu-cloud-keyring. (Reading database ... 52388 files and directories currently installed.) Preparing to unpack .../ubuntu-cloud-keyring_2012.08.14_all.deb ... Unpacking ubuntu-cloud-keyring (2012.08.14) ... Setting up ubuntu-cloud-keyring (2012.08.14) ... Importing ubuntu-cloud.archive.canonical.com keyring OK Processing ubuntu-cloud.archive.canonical.com removal keyring gpg: /etc/apt/trustdb.gpg: trustdb created OK root@controller:/etc/apt/sources.list.d#cat cloudarchive-ocata.list deb http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/ocata main # deb-src http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/ocata main root@controller:~# apt update && apt dist-upgrade root@controller:~# apt install python-openstackclient -y 2、安装配置MariaDB root@controller:~# apt install mariadb-server python-pymysql -y root@controller:~# cat /etc/mysql/mariadb.conf.d/99-openstack.cnf [mysql] bind-address = 10.1.1.3 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 root@controller:~# service mysql restart root@controller:~# service mysql status 3、安装memacached keystone nova neutron dashboard apt install -y memcached python-memcache keystone glance nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent openstack-dashboard 4、配置Rabbitmq-server服务 root@controller:~# apt install rabbitmq-server -y root@controller:~# rabbitmqctl add_user openstack zoomtech Creating user "openstack" ... root@controller:~# rabbitmqctl set_permissions openstack ".*" ".*" ".*" Setting permissions for user "openstack" in vhost "/" ... 5、配置memcached root@controller:~# vim /etc/memcached.conf -l 10.1.1.3 root@controller:~# service memcached restart root@controller:~# service memcached status 本文转自 OpenStack2015 博客,原文链接:http://blog.51cto.com/andyliu/1902047 如需转载请自行联系原作者

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

docker基础知识之挂载本地目录的方法

Docker可以支持把一个宿主机上的目录挂载到镜像里。docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。现在镜像内就可以共享宿主机里的文件了。默认挂载的路径权限为读写。如果指定为只读可以用:rodocker run -it -v /home/dock/Downloads:/usr/Downloads:roubuntu64 /bin/bashdocker还提供了一种高级的用法。叫数据卷。数据卷:“其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的”。感觉像是由一个容器定义的一个数据挂载信息。其他的容器启动可以直接挂载数据卷容器中定义的挂载信息。看示例:docker run -v /home/dock/Downloads:/usr/Downloads --name dataVol ubuntu64 /bin/bash创建一个普通的容器。用--name给他指定了一个名(不指定的话会生成一个随机的名子)。再创建一个新的容器,来使用这个数据卷。docker run -it--volumes-fromdataVol ubuntu64 /bin/bash--volumes-from用来指定要从哪个数据卷来挂载数据。如何在Docker容器内外互相拷贝数据?从容器内拷贝文件到主机上docker cp <containerId>:/file/path/within/container /host/path/target 从主机上拷贝文件到容器内1.用-v挂载主机数据卷到容器内docker run -v /path/to/hostdir:/mnt $container在容器内拷贝cp /mnt/sourcefile /path/to/destfile2.直接在主机上拷贝到容器物理存储系统A. 获取容器名称或者id :$ docker psB. 获取整个容器的id$ docker inspect -f '``.`Id`' 步骤A获取的名称或者idC. 在主机上拷贝文件:$ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE 或者 $ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root 例子:$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd8e703d7e303 solidleon/ssh:latest /usr/sbin/sshd -D cranky_pare$docker inspect -f '``.`Id`'cranky_pareor $ docker inspect -f '``.`Id`' d8e703d7e303d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e53.用输入输出符docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/ 或者docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/ Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。 譬如我要启动一个CentOS容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: #docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。 貌似简单,其实不然,下面我们来验证一下: 一、容器目录不可以为相对路径 [root@localhost ~]# docker run -it -v /test:soft centos /bin/bash invalid value "/test:soft" for flag -v: soft is not an absolute path See 'docker run --help'. 直接报错,提示soft不是一个绝对路径,所谓的绝对路径,必须以下斜线“/”开头。 二、宿主机目录如果不存在,则会自动生成 如果宿主机中存在/test目录,首先删除它 [root@localhost ~]# rm -rf /test [root@localhost ~]# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 启动容器 [root@localhost ~]#docker run -it -v /test:/soft centos /bin/bash [root@a487a3ca7997 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin soft srv sys tmp usr var 查看宿主机,发现新增了一个/test目录 [root@localhost ~]# ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var 三、宿主机的目录如果为相对路径呢? 这次,我们换个目录名test1试试 # docker run -it -v test1:/soft centos /bin/bash 再到宿主机上查看是否新增了一个/test1目录,结果没有,是不是因为我用的是相对路径,所以生成的test1目录在当前目录下,结果发现还是没有。那容器内的/soft目录挂载到哪里去了?通过docker inspect命令,查看容器“Mounts”那一部分,我们可以得到这个问题的答案。 "Mounts": [ { "Name": "test1", "Source": "/var/lib/docker/volumes/test1/_data", "Destination": "/soft", "Driver": "local", "Mode": "z", "RW": true } ], 可以看出,容器内的/soft目录挂载的是宿主机上的/var/lib/docker/volumes/test1/_data目录 原来,所谓的相对路径指的是/var/lib/docker/volumes/,与宿主机的当前目录无关。 四、如果只是-v指定一个目录,这个又是如何对应呢? 启动一个容器 [root@localhost ~]# docker run -it -v /test2 centos /bin/bash [root@ea24067bc902 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test2 tmp usr var 同样使用docker inspect命令查看宿主机的挂载目录 "Mounts": [ { "Name": "96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a", "Source": "/var/lib/docker/volumes/96256232eb74edb139d652746f0fe426e57fbacdf73376963e3acdb411b3d73a/_data", "Destination": "/test2", "Driver": "local", "Mode": "", "RW": true } ], 可以看出,同3中的结果类似,只不过,它不是相对路径的目录名,而是随机生成的一个目录名。 五、如果在容器内修改了目录的属主和属组,那么对应的挂载点是否会修改呢? 首先开启一个容器,查看容器内/soft目录的属性 [root@localhost ~]# docker run -it -v /test:/soft centos /bin/bash [root@b5ed8216401f /]# ll -d /soft/ drwxr-xr-x 2 root root 6 Sep 24 03:48 /soft/ 查看宿主机内/test目录的属性 [root@localhost ~]# ll -d /test/ drwxr-xr-x 2 root root 6 Sep 24 11:48 /test/ 在容器内新建用户,修改/soft的属主和属组 [root@b5ed8216401f /]# useradd victor [root@b5ed8216401f /]# chown -R victor.victor /soft/ [root@b5ed8216401f /]# ll -d /soft/ drwxr-xr-x 2 victor victor 6 Sep 24 03:48 /soft/ 再来看看宿主机内/test目录的属主和属组是否会发生变化? [root@localhost ~]# ll -d /test/ drwxr-xr-x 2 mycat mycat 6 Sep 24 11:48 /test/ 竟然变为mycat了。。。原来,这个与UID有关系,UID,即“用户标识号”,是一个整数,系统内部用它来标识用户。一般情况下它与用户名是一一对应的。 首先查看容器内victor对应的UID是多少, [root@b5ed8216401f /]#cat /etc/passwd | grep victor victor:x:1000:1000::/home/victor:/bin/bash victor的UID为1000,那么宿主机内1000对应的用户是谁呢? [root@localhost ~]#cat /etc/passwd |grep 1000 mycat:x:1000:1000::/home/mycat:/bin/bash 可以看出,宿主机内UID 1000对应的用户是mycat。 六、容器销毁了,在宿主机上新建的挂载目录是否会消失? 在这里,主要验证两种情况: 一、指定了宿主机目录,即 -v /test:/soft。 二、没有指定宿主机目录,即-v /soft 第一种情况: [root@localhost ~]# rm -rf /test --首先删除宿主机的/test目录 [root@localhost ~]# ls / --可以看到,宿主机上无/test目录 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost ~]#docker run -it --name=centos_test -v /test:/soft centos /bin/bash --启动容器,为了删除方便,我用--name参数指定了容器的名字 [root@82ad7f3a779a /]# exit exit [root@localhost ~]# docker rm centos_test --删除容器 centos_test [root@localhost ~]# ls / --发现 /test目录依旧存在 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var 可以看出,即便容器销毁了,新建的挂载目录不会消失。进一步也可验证,如果宿主机目录的属主和属组发生了变化,容器销毁后,宿主机目录的属主和属组不会恢复到挂载之前的状态。 第二种情况,通过上面的验证知道,如果没有指定宿主机的目录,则容器会在/var/lib/docker/volumes/随机配置一个目录,那么我们看看这种情况下的容器销毁是否会导致相应目录的删除 首先启动容器 [root@localhost ~]#docker run -it --name=centos_test -v /soft centos /bin/bash [root@6b75579ec934 /]# exit exit 通过docker inspect命令查看容器在宿主机上生成的挂载目录 "Mounts": [ { "Name": "b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301", "Source": "/var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301/_data", "Destination": "/soft", "Driver": "local", "Mode": "", "RW": true } ], 对应的是/var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301/_data目录 销毁容器,看目录是否存在 [root@localhost ~]# docker rm centos_test centos_test [root@localhost ~]# ll /var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301 total 0 drwxr-xr-x 2 root root 6 Sep 24 14:25 _data发现该目录依旧存在,即便重启了docker服务,该目录依旧存在 [root@localhost ~]# systemctl restart docker [root@localhost ~]# ll /var/lib/docker/volumes/b53164cb1c9f1917788638692fb22ad11994cf1fbbc2461b6c390cd3e10ea301 total 0 drwxr-xr-x 2 root root 6 Sep 24 14:25 _data 七、挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”。 可通过两种方式解决: 1>关闭selinux。 临时关闭:# setenforce 0 永久关闭:修改/etc/sysconfig/selinux文件,将SELINUX的值设置为disabled。 2> 以特权方式启动容器 指定--privileged参数 如:#docker run -it --privileged -v /test:/soft centos /bin/bash 一、通过docker run命令 1、运行命令:docker run --name test -it -v /home/xqh/myimage:/data ubuntu /bin/bash 其中的-v 标记 在容器中设置了一个挂载点 /data(就是容器中的一个目录),并将主机上的 /home/xqh/myimage 目录中的内容关联到 /data下。 这样在容器中对/data目录下的操作,还是在主机上对/home/xqh/myimage的操作,都是完全实时同步的,因为这两个目录实际都是指向主机目录。 2、运行命令:docker run --name test1 -it -v /data ubuntu /bin/bash 上面-v的标记只设置了容器的挂载点,并没有指定关联的主机目录。这时docker会自动绑定主机上的一个目录。通过docker inspect 命令可以查看到。 xqh@ubuntu:~/myimage$docker inspect test1 [ { "Id": "1fd6c2c4bc545163d8c5c5b02d60052ea41900a781a82c20a8f02059cb82c30c", ............................. "Mounts": [ { "Name": "0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01", "Source": "/var/lib/docker/volumes/0ab0aaf0d6ef391cb68b72bd8c43216a8f8ae9205f0ae941ef16ebe32dc9fc01/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true } ], ........................... 上面 Mounts下的每条信息记录了容器上一个挂载点的信息,"Destination" 值是容器的挂载点,"Source"值是对应的主机目录。 可以看出这种方式对应的主机目录是自动创建的,其目的不是让在主机上修改,而是让多个容器共享。 二、通过dockerfile创建挂载点 上面介绍的通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。 通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。 还有一个区别是,通过 VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。 #test FROM ubuntu MAINTAINER hello1 VOLUME ["/data1","/data2"] 上面的dockfile文件通过VOLUME指令指定了两个挂载点 /data1 和 /data2. 我们通过docker inspect 查看通过该dockerfile创建的镜像生成的容器,可以看到如下信息 "Mounts": [ { "Name": "d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21", "Source": "/var/lib/docker/volumes/d411f6b8f17f4418629d4e5a1ab69679dee369b39e13bb68bed77aa4a0d12d21/_data", "Destination": "/data1", "Driver": "local", "Mode": "", "RW": true }, { "Name": "6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36", "Source": "/var/lib/docker/volumes/6d3badcf47c4ac5955deda6f6ae56f4aaf1037a871275f46220c14ebd762fc36/_data", "Destination": "/data2", "Driver": "local", "Mode": "", "RW": true } ], 可以看到两个挂载点的信息。 三、容器共享卷(挂载点) docker run --name test1 -it myimage /bin/bash 上面命令中的 myimage是用前面的dockerfile文件构建的镜像。 这样容器test1就有了 /data1 和 /data2两个挂载点。 下面我们创建另一个容器可以和test1共享 /data1 和 /data2卷 ,这是在 docker run中使用--volumes-from标记,如: 可以是来源不同镜像,如: docker run --name test2 -it--volumes-fromtest1 ubuntu /bin/bash 也可以是同一镜像,如: docker run --name test3 -it--volumes-fromtest1 myimage /bin/bash 上面的三个容器 test1 , test2 , test3 均有 /data1 和 /data2 两个目录,且目录中内容是共享的,任何一个容器修改了内容,别的容器都能获取到。 四、最佳实践:数据容器 如果多个容器需要共享数据(如持久化数据库、配置文件或者数据文件等),可以考虑创建一个特定的数据容器,该容器有1个或多个卷。 其它容器通过--volumes-from 来共享这个数据容器的卷。因为容器的卷本质上对应主机上的目录,所以这个数据容器也不需要启动。 如: docker run --name dbdata myimage echo "data container" 本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1953035,如需转载请自行联系原作者

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

【Android 基础】Android中全屏或者取消标题栏

先介绍去掉标题栏的方法: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 注意这句一定要写在setContentView()方法的前面,不然会报错的 第二种:在AndroidManifest.xml文件中定义 <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> 可以看出,这样写的话,整个应用都会去掉标题栏,如果只想去掉某一个Activity的标题栏的话,可以把这个属性加到activity标签里面 第三种:这种在一般的应用中不常用,就是在res/values目录下面新建一个style.xml的文件 例如: <?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="notitle"> <item name="android:windowNoTitle">true</item> </style> </resources> 这样,我们就自定义了一个style,就相当于一个主题,然后在AndroidManifest.xml文件中定义 <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/notitle"> 这样也可以达到去掉标题栏的效果 三种去掉标题栏方法的总结 第一种,有的时候我们会看到,会先出现标题栏,然后再消失,因为我们只是在activity的oncreate方法中定义的,第二种相对第一种比较好一些,不会出现这种情况,第三种我个人感觉最好,这样把功能分开,便于维护和扩展 再介绍全屏的方法 第一种: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 第二种: android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 第三种: <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/fullscreem" /> 本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/3907228.html,如需转载请自行联系原作者

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

Android基础---TextView的一些高级显示(转载)

1. 自定义字体 可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体 所以,我们可以在程序中放入TTF字体文件,在程序中使用Typeface来设置字体:第一步,在assets目录下新建fonts目录,把TTF字体文件放到这里。第二步,程序中调用: TextViewtv = (TextView)findViewById(R.id.textView); AssetManagermgr=getAssets();//得到AssetManager Typefacetf=Typeface.createFromAsset(mgr, "fonts/mini.TTF");//根据路径得到Typeface tv.setTypeface(tf);//设置字体 效果如下图所示: 2. 显示多种颜色的字 Android支持html格式的字符串,通过调用Html.fromHtml(str)方法可以转换html格式的字符串str。 示例如下: StringtextStr1 = "<font color=\"#ffff00\">如果有一天,</font><br>"; StringtextStr2 = "<font color=\"#00ff00\">我厌倦了这里,</font><br>"; StringtextStr3 = "<font color=\"#ff00ff\">我会乘着梦,</font><br>"; StringtextStr4 = "<font color=\"#00ffff\">飞向那个属于自己的<br>世界……</font><br>"; tv.setText(Html.fromHtml(textStr1+textStr2+textStr3+textStr4)); 运行后效果如下: 3. 字体加粗 在xml布局文件中使用android:textStyle=”bold”可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:使用TextPaint的仿“粗体”设置setFakeBoldText为true。示例代码如下: tv.getPaint().setFakeBoldText(true); 效果如下: 4. 添加阴影 在xml布局文件中使用一系列android:shadowXXX属性可添加设置阴影。具体为:shadowColor设置阴影颜色;shadowDx设置阴影水平偏移量;shadowDy设置阴影垂直偏移量;shadowRadius设置阴影半径。 示例代码: android:shadowColor="#ffffff" android:shadowDx="15.0" android:shadowDy="5.0" android:shadowRadius="2.5" 显示效果如下: 5. 插入图片 插入图片有两种方法,第一种方法就是用上面说的html格式的字符串,不过转换稍微有些麻烦。需要用到ImageGetter类来对图片的src属性进行转换。示例代码如下: StringimgStr = "<img src=\""+R.drawable.sidai+"\"/>"; Html.ImageGetterimageGetter = new Html.ImageGetter() { public Drawable getDrawable(Stringarg0) { // TODO Auto-generated methodstub int id =Integer.parseInt(arg0); Drawable draw =getResources().getDrawable(id); draw.setBounds(10, 10, 228,300); return draw; } }; tv.append(Html.fromHtml(imgStr,imageGetter,null)); 第二种方法是使用xml布局文件中一系列android:drawableXXX属性来实现插入图片。具体为:drawableBottom是在文本框内文本的底端绘制指定图像;drawableLeft是在文本框内文本的左边绘制指定图像;drawableRight是在文本框内文本的右边绘制指定图像;drawableTop是在文本框内文本的顶端绘制指定图像;drawablePadding设置文本框内文本与图像之间的间距。示例代码: android:drawableBottom=”@drawable/sidai” 插入图片后的显示效果如下: 摘自 北京大学-Google Android实验室 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/archive/2012/12/17/2821407.html如需转载请自行联系原作者 demoblog

资源下载

更多资源
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应用均可从中受益。

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等操作系统。

用户登录
用户注册