首页 文章 精选 留言 我的

精选列表

搜索[快速入门],共10000篇文章
优秀的个人博客,低调大师

Q#语言入门0 命名空间namespace

做为一门新语言,要理解他 我们尽量使用其他大众语言的概念和他类比。 Q#编写的程序以.qs结尾。 一个最简单的Q#程序也要包含命名空间namespace。 C#里也有namespace,而java里用的类似概念是package。 有在Q#里引用其他命名空间的定义,需要使用open: namespace Example { open Microsoft.Quantum.Primitive; // ... } java里用的是import. C#好像是using。 在命名空间内,开发者可以定义任何操作、方法、自定义类型等。 后面我们会逐渐学习这些概念。

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

Docker 从入门到放弃(三)镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从Docker Hub公共镜像源下载。 下面我们来学习: 1、管理和使用本地 Docker 主机镜像 2、创建镜像 一、列出镜像列表 可以使用docker images来列出本地主机上的镜像。 root@iZ235mi4a64Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest f2a91732366c 2 weeks ago 1.85kB ubuntu 15.10 9b9cb95443b5 16 months ago 137MB training/webapp latest 6fae60ef3446 2 years ago 349MB 各个选项说明: REPOSITORY:表示镜像的仓库源 TAG:镜像的标签 IMAGE ID:镜像ID CREATED:镜像创建时间 SIZE:镜像大小 说明:同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 所以,如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下: root@iZ235mi4a64Z:~# docker run -t -i ubuntu:15.10 /bin/bash root@f18d3ddc9088:/# cat /etc/issue Ubuntu 15.10 \n \l 如果要使用版本为16.04的ubuntu系统镜像来运行容器时,命令如下: root@iZ235mi4a64Z:~# docker run -t -i ubuntu:16.04 /bin/bash root@f97b97868115:/# cat /etc/issue Ubuntu 16.04.3 LTS \n \l 注意:如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。 二、获取一个新的镜像 当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用docker pull命令来下载它。 下载完成后,我们可以直接使用这个镜像来运行容器。 docker run -t -i ubuntu:13.10 /bin/bash 三、查找镜像 我们可以从Docker Hub网站来搜索镜像,Docker Hub网址为:https://hub.docker.com/ 我们也可以使用docker search命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过docker search命令搜索httpd来寻找适合我们的镜像。 root@iZ235mi4a64Z:~# docker search httpd NAME DESCRIPTION STARS OFFICIAL AUTOMATED httpd The Apache HTTP Server Project 1367 [OK] hypriot/rpi-busybox-httpd Raspberry Pi compatible Docker Image with a … 39 centos/httpd 15 [OK] armhf/httpd The Apache HTTP Server Project 8 centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 5 macadmins/netboot-httpd use in combination with bruienne/bsdpy 4 [OK] lolhens/httpd Apache httpd 2 Server 2 [OK] salim1983hoop/httpd24 Dockerfile running apache config 2 [OK] rgielen/httpd-image-php5 Docker image for Apache httpd with PHP 5 bas… 1 [OK] rgielen/httpd-image-simple Docker image for simple Apache httpd based o… 1 [OK] lead4good/httpd-fpm httpd server which connects via fcgi proxy h… 1 [OK] antoineco/httpd-mod_cluster Apache HTTP Server with JBoss mod_cluster 1 [OK] dockerpinata/httpd 0 trollin/httpd 0 tplatform/aws-linux-httpd24-php70 aws-linux-httpd24-php70 0 [OK] manasip/httpd 0 jbpt/httpd 0 [OK] antoineco/httpd Extra OS variants for the official HTTPd ima… 0 [OK] ppc64le/httpd The Apache HTTP Server Project 0 publici/httpd httpd:latest 0 [OK] efrecon/httpd A micro-sized httpd. Start serving files in … 0 [OK] sbutler/pie-httpd PIE httpd server 0 camptocamp/os-wp-httpd Wordpress httpd 0 [OK] openbucks/httpd 0 manageiq/httpd Container with httpd, built on CentOS for Ma… 0 [OK] NAME:镜像仓库源的名称 DESCRIPTION:镜像的描述 OFFICIAL:是否docker官方发布 四、拖取镜像 我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。 下载完成后,我们就可以使用这个镜像了 docker run httpd 五、创建镜像 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。 从已经创建的容器中更新镜像,并且提交这个镜像 使用Dockerfile指令来创建一个新的镜像 六、更新镜像 更新镜像之前,我们需要使用镜像来创建一个容器。(创建容器必须先进入镜像啊!) root@iZ235mi4a64Z:~# docker run -t -i ubuntu:15.10 /bin/bash root@4301b57638b7:/# 在运行的容器内使用 apt-get update 命令进行更新。 在完成操作之后,输入exit命令来退出这个容器。 此时ID为4301b57638b7的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。 root@iZ235mi4a64Z:~# docker commit -m="has update" -a="Tinywan" 4301b57638b7 Tinywan/ubuntu:v2 sha256:680b98860b7d1b338df06947ddb89df0243b2d51af414955a6a85d3cd35e1984 各个参数说明: -m:提交的描述信息 -a:指定镜像作者 e218edb10161:容器ID Tinywan/ubuntu:v2:指定要创建的目标镜像名 我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2: root@iZ235mi4a64Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tinywan/ubuntu v2 344de7f9ce0f 11 seconds ago 137MB hello-world latest f2a91732366c 2 weeks ago 1.85kB ubuntu 16.04 20c44cd7596f 2 weeks ago 123MB ubuntu 15.10 9b9cb95443b5 16 months ago 137MB training/webapp latest 6fae60ef3446 2 years ago 349MB 使用我们的新镜像 runoob/ubuntu 来启动一个容器 root@iZ235mi4a64Z:~# docker run -t -i tinywan/ubuntu:v2 /bin/bash root@a6938bce244e:/# cat /etc/issue Ubuntu 15.10 \n \l 构建镜像 我们使用命令docker build, 从零开始来创建一个新的镜像。为此,我们需要创建一个Dockerfile文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。 root@iZ235mi4a64Z:/home/www/docker# cat Dockerfile FROM ubuntu:14.04 MAINTAINER Fisher "756684177@qq.com" RUN /bin/echo 'tinywan:123456' |chpasswd RUN useradd tinywan RUN /bin/echo 'tinywan:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。 FROM:指定使用哪个镜像源(基于哪个镜像) MAINTAINER : 镜像创建者 RUN:指令告诉 docker 在镜像内执行命令,安装了什么...(安装软件用) CMD:container(容器)启动时执行的命令,但是一个Dockerfile中只能有一条CMD命令,多条则只执行最后一条CMD 然后,我们使用Dockerfile文件,通过docker build命令来构建一个镜像: root@iZ235mi4a64Z:/home/www/docker# docker build -t tinywan/ubuntu:14.04 . Sending build context to Docker daemon 2.048kB Step 1/7 : FROM ubuntu:14.04 ---> d6ed29ffda6b Step 2/7 : MAINTAINER Fisher "756684177@qq.com" ---> Using cache ---> 89d1dd5723ac Step 3/7 : RUN useradd tinywan ---> Running in 2241d8c9a59e Removing intermediate container 2241d8c9a59e ---> 7d64f7cf63e7 Step 4/7 : RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local ---> Running in d90a9513959f Removing intermediate container d90a9513959f ---> bd375fb5a38c Step 5/7 : EXPOSE 22 ---> Running in 2bca5bbc5e32 Removing intermediate container 2bca5bbc5e32 ---> 1566f7bdb2ac Step 6/7 : EXPOSE 80 ---> Running in 15819d4ecc8f Removing intermediate container 15819d4ecc8f ---> 1865484d9bf5 Step 7/7 : CMD /usr/sbin/sshd -D ---> Running in 9647aa30dd56 Removing intermediate container 9647aa30dd56 ---> d918b7bb73d8 Successfully built d918b7bb73d8 Successfully tagged tinywan/ubuntu:14.04 参数说明: -t:指定要创建的目标镜像名 .:Dockerfile文件所在目录,可以指定Dockerfile的绝对路径 使用docker images 查看创建的镜像已经在列表中存在,镜像ID为d918b7bb73d8 root@iZ235mi4a64Z:/home/www/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tinywan/ubuntu 14.04 d918b7bb73d8 45 seconds ago 221MB tinywan/ubuntu v2 344de7f9ce0f About an hour ago 137MB hello-world latest f2a91732366c 2 weeks ago 1.85kB ubuntu 16.04 20c44cd7596f 2 weeks ago 123MB ubuntu 14.04 d6ed29ffda6b 2 weeks ago 221MB ubuntu 15.10 9b9cb95443b5 16 months ago 137MB training/webapp latest 6fae60ef3446 2 years ago 349MB 错误???? chpasswd: (user tinywan) pam_chauthtok() failed, error: Authentication token manipulation error 我们可以使用新的镜像来创建容器 root@iZ235mi4a64Z:/home/www/docker# docker run -t -i tinywan/ubuntu:14.04 /bin/bash root@61f9f166405b:/# cat /etc/issue Ubuntu 14.04.5 LTS \n \l root@61f9f166405b:/# id tinywan uid=1000(tinywan) gid=1000(tinywan) groups=1000(tinywan) root@61f9f166405b:/# 从上面看到新镜像已经包含我们创建的用户tinywan 设置镜像标签 我们可以使用docker tag命令,为镜像添加一个新的标签。 root@iZ235mi4a64Z:/home/www/docker# docker tag d918b7bb73d8 tinywan/ubuntu:develop root@iZ235mi4a64Z:/home/www/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tinywan/ubuntu 14.04 d918b7bb73d8 5 minutes ago 221MB tinywan/ubuntu develop d918b7bb73d8 5 minutes ago 221MB tinywan/ubuntu v2 344de7f9ce0f About an hour ago 137MB hello-world latest f2a91732366c 2 weeks ago 1.85kB ubuntu 16.04 20c44cd7596f 2 weeks ago 123MB ubuntu 14.04 d6ed29ffda6b 2 weeks ago 221MB ubuntu 15.10 9b9cb95443b5 16 months ago 137MB training/webapp latest 6fae60ef3446 2 years ago 349MB docker tag镜像ID,这里是 d918b7bb73d8,用户名称、镜像源名(repository name)和新的标签名(tag)。 使用 docker images 命令可以看到,ID为d918b7bb73d8的镜像多一个标签。

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

swift:入门知识之函数与闭包

1、swift中使用关键字func来声明和定义一个函数。调用函数使用它的名字加上小括号中的参数列表。 2、swift使用->方向符号分隔参数的名字和返回值类型 3、swift使用元组(tuple)来返回多个值 4、函数可以接收可变参数个数,手机到一个数组中 5、函数可以嵌套。内嵌函数可以访问其定义的所在函数的变量。使用内嵌函数组织代码,可以避免过长和过于复杂 6、函数是第一类型的,这意味着函数可以作为返回值返回 7、函数还可以作为另一个函数的参数使用 8、闭包,闭包相当于一个匿名函数(匿名函数做函数的参数),所有传函数参数的地方都可以使用闭包 9、有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。此时,可以为参数设置外部形参名。 具体举例如下: 定义一个有参数的函数,返回值为Int型函数,使用->类型来返回值 //定义一个有参数的函数 func sum(a:Int,b:Int)->Int{ return a+b } //函数调用 sum(10, 20) //30 使用元组来返回多个值,通过元组名.0获取第一个值,剩下的值依次可以获取 //使用元组来返回多个值的函数 func getGasprices()->(Double,Double,Double){ return (1.0,2.0,3.0) } //函数调用 getGasprices() //(.0 1.0, .1 2.0, .2 3.0) 通过一个类型...的方式定义可变参数的函数,参数个数根据你调用函数时传递的参数而定 //定义可变参数的函数 func sumOfArr(numbers:Int...)->Int{ var sum = 0 for temp in numbers{ sum += temp } return sum } //函数调用 sumOfArr(2,4,6,1,7,8) //28 在函数内部嵌套定义另一个函数 //函数内部嵌套定义函数 func returnFunc()->Int{ var y = 10 func add(){ y += 5 } add() return y } //函数调用 returnFunc() //15 可以将函数作为一个返回值返回 //从函数内部函数返回一个函数 func makeIncrement()->(Int->Int){ func addOne(number: Int)->Int { return 1 + number } return addOne } //接收一个返回的addOne函数 var increment = makeIncrement() //调用这个返回的函数 increment(7) //8 函数可以作为参数使用 //函数做参数使用 func search(Array:[Int],Condition:Int->Bool)->Bool{ for num in Array{ if Condition(num){ return true } } return false } func equalTen(num:Int)->Bool{ return num == 10 } var arr:[Int] = [23,15,7,9,10]//将equalTen函数作为search函数的参数 search(arr, equalTen) //true 闭包的使用,其实闭包就是一个匿名的函数,它被当做参数传递给函数,类似Objective-C中的block函数 //闭包,闭包相当于一个匿名函数(匿名函数做函数的参数) //所有传函数参数的地方都可以使用闭包 //实例一:number.map({...})是系统定义好的一个闭包函数 var numbers = [2,4,5,1,6] numbers.map({(number:Int)->Int in return number * number }) //实例二:自定义的一个闭包函数 func search2(arr:[Int],Condition:(Int)->Bool)->Bool { for num in arr{ if Condition(num){ return true } } return false } var arr2 = [3,5,6,9,2] search(arr2, {(number:Int)->Bool in return number == 6 }) 参数外部名的使用: 兴趣来了,给大家分享一个超前的知识,使用swift创建一个按钮蛮好玩的 //创建按钮 var button:UIButton = UIButton( frame: CGRectMake(0, 0, 100, 100)) button.backgroundColor = UIColor.redColor() button.setTitle("open", forState:UIControlState.Normal) 截图: 函数形参名知识拓展:有时给参数设置一个外部名,在调用函数时可以明确知道所传参数的意思.避免含糊不清.... 普通的参数名格式: 外部形参名格式: 使用外部形参名有很大的好处,可以很明确的表达函数的意思,避免含糊不清。例如: //调用这个函数时,所传的意思比较模糊: //给它设置一个外部名,传参数时意思就一目了然了。 外部参数名称速记 如果你想为一个函数提供一个外部形参名,然而本地形参名已经使用了一个合适的名称了,那你就不需要两次书写该形参的名称。相反,你可以写一次名字,并用一个hash符号(#)作为名称的前缀。这就告诉Swift使用名称相同的本地行参名称和外部形参名称。 默认形参值 你可以为任何形参定义默认值以作为函数定义的一部分。如果已经定义了默认值,那么调用函数时就可以省略该行参。 注意:请在函数形参列表的末尾放置带默认值的形参。这将确保所有函数调用都使用顺序相同的无默认值实参,并让在每种情况下清晰地调用相同的函数。 有默认值的外部形参名 在大多数情况下,为所有形参提供一个带默认值的外部名是非常有用的(因此要求)。如果在调用函数的时候提供了一个值,那么这将确保形参对应的实参有着明确的目的。 为了使这个过程更容易,当你自己没有提供外部名称时,Swift将为你定义的任何默认形参提供一个自动外部名。这个自动外部名和本地名一样,就像你已经在本地名前添加了hash符号(#)一样。 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 分类: Swift开发技术 本文转自当天真遇到现实博客园博客,原文链接: http://www.cnblogs.com/XYQ-208910/p/4902973.html,如需转载请自行联系原作者

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

TensorFlow实现神经网络入门

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 如果你一直关注数据科学/机器学习,你就不能错过深度学习和神经网络的热潮。互联网公司正在寻找这方面的人,而且从竞赛到开源项目,都有巨额奖金。 如果你对深度学习所提供的前景感到兴奋,但是还没有开始,在这里或许是你开始的第一步。 在这篇文章中,我将介绍TensorFlow。阅读本文后,你将能够理解神经网络的应用,并使用TensorFlow解决现实生活中的问题,本文中的代码是用Python编写的,Python最近的火爆也和深度学习有关。 1:何时使用神经网络? 有关神经网络和深度学习的更详细的解释,请看这里。其“更深”版本正在图像识别,语音和自然语言处理等诸多领域取得巨大突破。 现在的主要问题是何时使用神经网络?关于这点,你必须记住一些事情: 1.1:神经网

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

OpenStack入门修炼之云主机创建(14)

1.知识回顾与端口总结 service 功能 MySQL 为各个服务提供数据存储 RabbitMQ 为各个服务之间通信提供交通枢纽 Keystone 为各个服务器之间通信提供认证和服务注册 Glance 为虚拟机提供镜像管理 Nova 为虚拟机提供计算资源 Neutron 为虚拟机提供网络资源 各服务端口列表 服务 端口 MySQL 3306 Memcached 11211 Glance-api 9292 Glance-registry 9191 RabbitMQ 15672、5672 Libvirt Dnsmasq 53 Novncproxy 6080 Nova-api 8774、8775 Kesytone(admin) 35357 Kesytone(user) 5000 Neutron 9696 Cinder-api 8776 2.确保以下三项结果是正常,才能进行创建虚拟机 [root@linux-node1 ~]# openstack image list +--------------------------------------+-----------------+--------+ | ID | Name | Status | +--------------------------------------+-----------------+--------+ | 5aa6e9a1-4aea-467c-a684-51080c326887 | Centos-7-x86_64 | active | | 51e1e125-dbe3-49c6-a3d5-55c89f195f55 | cirros | active | +--------------------------------------+-----------------+--------+ [root@linux-node1 ~]# nova service-list +----+------------------+-------------+----------+---------+-------+----------------------------+-----------------+ | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +----+------------------+-------------+----------+---------+-------+----------------------------+-----------------+ | 1 | nova-consoleauth | linux-node1 | internal | enabled | up | 2017-12-12T04:39:01.000000 | - | | 2 | nova-conductor | linux-node1 | internal | enabled | up | 2017-12-12T04:39:06.000000 | - | | 3 | nova-scheduler | linux-node1 | internal | enabled | up | 2017-12-12T04:39:07.000000 | - | | 6 | nova-compute | linux-node2 | nova | enabled | up | 2017-12-12T04:39:06.000000 | - | +----+------------------+-------------+----------+---------+-------+----------------------------+-----------------+ [root@linux-node1 ~]# neutron agent-list +--------------------------------------+--------------------+-------------+-------------------+-------+----------------+---------------------------+ | id | agent_type | host | availability_zone | alive | admin_state_up | binary | +--------------------------------------+--------------------+-------------+-------------------+-------+----------------+---------------------------+ | 308df597-c196-40e8-9894-b35f423ce9e4 | Linux bridge agent | linux-node2 | | :-) | True | neutron-linuxbridge-agent | | 598023d4-52a2-44d5-92fe-61376efa941e | Metadata agent | linux-node1 | | :-) | True | neutron-metadata-agent | | a824342c-ad84-4c05-a4a9-80f5025d6ae5 | Linux bridge agent | linux-node1 | | :-) | True | neutron-linuxbridge-agent | | e116c29d-ce28-4d84-8433-214590e97c69 | DHCP agent | linux-node1 | nova | :-) | True | neutron-dhcp-agent | +--------------------------------------+--------------------+-------------+-------------------+-------+----------------+---------------------------+ 3.云主机创建 (1)创建网络 [root@linux-node1 ~]# openstack network create --share \ --provider-physical-network public \ --provider-network-type flat public [root@linux-node1 ~]# neutron net-list +--------------------------------------+--------+------------------------------------------------------+ | id | name | subnets | +--------------------------------------+--------+------------------------------------------------------+ | c39c1348-5a8f-4291-9772-b03a22b085df | public | df82f43f-97fe-41d0-bdbd-933565102598 192.168.56.0/24 | +--------------------------------------+--------+------------------------------------------------------+ (2)创建子网 [root@linux-node1 ~]# openstack subnet create --network public \ --allocation-pool start=192.168.56.100,end=192.168.56.200 \ --dns-nameserver 192.168.56.2 --gateway 192.168.56.2 \ --subnet-range 192.168.56.0/24 public-subnet [root@linux-node1 ~]# neutron subnet-list +--------------------------------------+---------------+-----------------+------------------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+---------------+-----------------+------------------------------------------------------+ | df82f43f-97fe-41d0-bdbd-933565102598 | public-subnet | 192.168.56.0/24 | {"start": "192.168.56.100", "end": "192.168.56.200"} | +--------------------------------------+---------------+-----------------+------------------------------------------------------+ (3)创建m1.nano类型 默认的最小规格的主机需要512 MB内存。对于环境中计算节点内存不足4 GB的,我们推荐创建只需要64 MB的m1.nano规格的主机。若单纯为了测试的目的,请使用m1.nano规格的主机来加载CirrOS镜像 [root@linux-node1 ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano (4)生成一个键值对 大部分云镜像支持 :term:public key authentication而不是传统的密码登陆。在启动实例前,你必须添加一个公共密钥到计算服务。 生成的公钥上传到openstack,会自动把这个公钥放入虚拟机,之后登陆无需密码。 [root@linux-node1 ~]# source demo-openstack [root@linux-node1 ~]# ssh-keygen -q -N "" Enter file in which to save the key (/root/.ssh/id_rsa): [root@linux-node1 ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey 验证公钥添加: [root@linux-node1 ~]# openstack keypair list +-------+-------------------------------------------------+ | Name | Fingerprint | +-------+-------------------------------------------------+ | mykey | e4:ce:48:da:e7:03:b3:a9:85:c6:7a:11:bf:a0:8f:85 | +-------+-------------------------------------------------+ (5)增加安全组规则 默认情况下,default安全组适用于所有实例并且包括拒绝远程访问实例的防火墙规则。对诸如CirrOS这样的Linux镜像,我们推荐至少允许ICMP (ping) 和安全shell(SSH)规则。 •添加规则到default安全组,会去修改iptables规则 允许ping [root@linux-node1 ~]# openstack security group rule create --proto icmp default 允许安全shell(SSH)的访问 [root@linux-node1 ~]# openstack security group rule create --proto tcp --dst-port 22 default (6)确定实例选项 ①在控制节点上,获得 admin 凭证来获取只有管理员能执行的命令的访问权限: [root@linux-node1 ~]# source demo-openstack ②一个实例指定了虚拟机资源的大致分配,包括处理器、内存和存储。 列出可用类型: [root@linux-node1 ~]# openstack flavor list ③列出可用镜像 [root@linux-node1 ~]# openstack image list ④列出可用网络 [root@linux-node1 ~]# openstack network list ⑤列出可用的安全组 [root@linux-node1 ~]# openstack security group list (7)启动实例 [root@linux-node1 ~]# openstack server create --flavor m1.nano --image cirros \ --nic net-id=c39c1348-5a8f-4291-9772-b03a22b085df \ --security-group default \ --key-name mykey demo-instance 检查实例状态,当构建过程完全成功后,状态会从BUILD变为ACTIVE [root@linux-node1 ~]# openstack server list (8)使用虚拟控制台访问实例 获取你实例的 Virtual Network Computing (VNC) 会话URL并从web浏览器访问它: [root@linux-node1 ~]# openstack console url show demo-instance 在宿主机上使用ssh登陆: 问题总结: 问题现象:ping云主机网络不通,从VNC上看到系统一直停留在GRUB,无法进入系统,导致无法正常创建云主机 问题原因:libvirtd、qemu与内核版本不兼容 解决方案:降低内核版本 降低CentOS 7.3的内核版本执行过程: 查看当前内核版本: [root@linux-node1 ~]# uname -r 3.10.0-514.2.2.el7.x86_64 查看当前发行版本: [root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 降低内核版本方法: (1)解压安装镜像,获取内核软件包: kernel-3.10.0-327.el7.x86_64.rpm kernel-tools-3.10.0-327.el7.x86_64.rpm kernel-tools-libs-3.10.0-327.el7.x86_64.rpm centos-release-7-2.1511.el7.centos.2.10.x86_64.rpm (2)先安装这2个包: [root@linux-node1 ~]# rpm -ivh kernel-tools-3.10.0-327.el7.x86_64.rpm [root@linux-node1 ~]# rpm -ivh kernel-tools-libs-3.10.0-327.el7.x86_64.rpm (3)再安装kernel-3.10.0-327.el7.x86_64.rpm [root@linux-node1 ~]# rpm -ivh --force kernel-3.10.0-327.el7.x86_64.rpm (4)可以查看到安装的2个版本的内核: [root@linux-node1 ~]# rpm -qa|grep -i kernel-3.10.0- kernel-3.10.0-327.el7.x86_64.rpm kernel-3.10.0-514.2.2.el7.x86_64 (5)把7.3的内核卸载: [root@linux-node1 ~]# rpm -ev kernel-3.10.0-514.2.2.el7.x86_64 这时候只能查看一个结果: [root@linux-node1 ~]# rpm -qa|grep -i kernel-3.10.0- kernel-3.10.0-327.el7.x86_64.rpm 再用rpm -ea 或者 yum remove命令卸载其他内核相关的包 rpm -ea kernel-tools-libs-3.10.0-514.2.2.el7.x86_64 rpm -ea kernel-tools-3.10.0-514.2.2.el7.x86_64 降低发行版本: [root@linux-node1 ~]# rpm -ivh centos-release-7-2.1511.el7.centos.2.10.x86_64.rpm--force Preparing... ################################# [100%] Updating / installing... 1:centos-release-7-2.1511.el7.cento################################# [100%] (1)可以查看到安装的2个发行版本: [root@linux-node1 ~]# rpm -qa|grep -i centos-release-7- centos-release-7-3.1611.el7.centos.x86_64 centos-release-7-2.1511.el7.centos.2.10.x86_64 (2)把7.3的发行版本卸载: [root@linux-node1 ~]# rpm -ev centos-release-7-3.1611.el7.centos.x86_64 Preparing packages... centos-release-7-3输出.1611.el7.centos.x86_64 (3)这时候只能查看一个结果: [root@controller ~]# rpm -qa|grep -i centos-release-7- centos-release-7-2.1511.el7.centos.2.10.x86_64 验证: 查看此时的内核版本: [root@controller ~]# uname -r 3.10.0-514.2.2.el7.x86_64 查看此时的发行版本: [root@controller ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 重启: [root@controller ~]# reboot 版权声明:原创作品,谢绝转载。否则将追究法律责任 本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049709

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

OpenStack入门修炼之OpenStack的架构(2)

1.OpenStack 架构 中间菱形是虚拟机,围绕 VM 的那些长方形代表 OpenStack 不同的模块(OpenStack 叫服务,后面都用服务这个术语),下面来分别介绍。 Nova:管理 VM 的生命周期,是 OpenStack 中最核心的服务。 Neutron:为 OpenStack 提供网络连接服务,负责创建和管理L2、L3 网络,为 VM 提供虚拟网络和物理网络连接。 Glance:管理 VM 的启动镜像,Nova 创建 VM 时将使用 Glance 提供的镜像。 Cinder:为 VM 提供块存储服务。Cinder 提供的每一个 Volume 在 VM 看来就是一块虚拟硬盘,一般用作数据盘。 Swift:提供对象存储服务。VM 可以通过 RESTful API 存放对象数据。作为可选的方案,Glance 可以将镜像存放在 Swift 中;Cinder 也可以将 Volume 备份到 Swift 中。 Keystone:为 OpenStack 的各种服务提供认证和权限管理服务。简单的说,OpenStack 上的每一个操作都必须通过 Keystone 的审核。 Ceilometer:提供 OpenStac k监控和计量服务,为报警、统计或计费提供数据。 Horizon:为 OpenStack 用户提供一个 Web 的自服务 Portal。 2.OpenStack的核心服务 Nova 管理计算资源,是核心服务。 Neutron 管理网络资源,是核心服务。 Glance 为 VM 提供 OS 镜像,属于存储范畴,是核心服务。 Cinder 提供块存储,VM怎么也得需要数据盘吧,是核心服务。 Swift 提供对象存储,不是必须的,是可选服务。 Keystone 认证服务,没它 OpenStack 转不起来,是核心服务。 Ceilometer 监控服务,不是必须的,可选服务。 Horizon 大家都需要一个操作界面吧。 在 Logical Architecture 中,可以看到每个服务又由若干组件组成。 以 Neutron 为例,包含 Neutron Server、Neutron plugins 和 Neutron agents Network provider 消息队列 Queue 数据库 Neutron Database 上面是 Logical Architecture,描述的是 Neutron 服务各个组成部分以及各组件之间的逻辑关系。 而在实际的部署方案上,各个组件可以部署到不同的物理节点上。 OpenStack 本身是一个分布式系统,不但各个服务可以分布部署,服务中的组件也可以分布部署。 这种分布式特性让 OpenStack 具备极大的灵活性、伸缩性和高可用性。 本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049831

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

Android开发入门必知:应用界面组成

屏幕是简化的窗口,在Android中,常常使用的就是这种简单的“窗口”。屏幕和屏幕中的内容是Android中UI构建的主要内容。这两个方面包括: 屏幕:活动(android.app.Activity); 屏幕中的内容:视图(android.view.View)。 Android中屏幕及其中内容的程序结构如图2-1所示。 ▲图2-1 Android中屏幕及其中内容的程序结构 如图2-1所示,android.app包中的Activity和android.view包中的View分别用于表示一个屏幕和一个视图的基类。 Android用户界面的基本构建方法分成以下几个步骤: 继承默认Activity实现自己的屏幕; 使用View的继承者作为屏幕中的内容; 响应屏幕及其内容中的事件。 屏幕(活动Activity) android.app.Activity类是Android中的活动,是Android四种组件中用来表示UI方面的组件。一个Activity中最主要的内容就是一个视图(View),此外,这个类还包含了标题栏、菜单、对话框附属功能。 活动的生命周期如图2-2所示。 ▲图2-2 活动的生命周期 在应用程序中实现自己的活动的时候,通常需要继承一个Activity类,并主要实现Activity中的以下几个protected的方法: protected void onCreate (Bundle savedInstanceState) // 创建时调用 protected void onStart () // 开始时调用 protected void onResume () // 恢复时调用 protected void onPause () // 停止时调用 protected void onStop () // 完全停止时调用 protected void onRestart () // 重新开始时调用 protected void onDestroy () // 销毁时调用 这些以on为开头的方法用于指定一个活动的状态机转换时刻的行为,将在一个活动生命周期中运行的不同阶段被调用。 在一个Activity中,提供了以下一些接口来设置其中的内容: public void setContentView(int layoutResID) // 以布局文件的方式来设置 public void setContentView(View view) // 以视图类的方式来设置 public void setContentView(View view, ViewGroup.LayoutParams params) setContentView()用于将一个视图(View)设置到活动中,通常在所实现Activity的onCreate()阶段被调用。 屏幕中的内容(视图View) android.view.View表示可见的视图内容,它表现为界面上的可视内容,也可以接收事件。在程序中具体使用的类一般是View的继承者。各种View的继承者可以在布局文件中被描述。 View的主要标识是它的id,查找子View的方法。 public final View findViewById(int id) View的事件主要由其中的监听者(Listener)来获得,在View类中具有setOn{XXX}Listener()系列方法,内容如下所示: public void setOnClickListener(View.OnClickListener l); public void setOnLongClickListener(View.OnLongClickListener l); public void setOnFocusChangeListener(View.OnFocusChangeListener l); public void setOnKeyListener(View.OnKeyListener l); public void setOnTouchListener(View.OnTouchListener l); public void setOnCreateContextMenuListener(View.OnCreateContextMenuListener l) 这些方法的参数分别为android.view包中的几个接口,如表2-1所示。 表2-1 事件处理接口 监听者功能监 听 类接口中的方法 单击OnClickListenervoid onClick(View v) 长按OnLongClickListenerboolean onLongClick(View v) 焦点变化OnFocusChangeListenervoid onFocusChange(View v, boolean hasFocus) 按键OnKeyListenerboolean onKey(View v, int keyCode, KeyEvent event) 触摸OnTouchListenerboolean onTouch(View v, MotionEvent event) 上下文菜单OnCreateContextMenuListenervoid onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 这些接口通常需要被用户程序实现。需要实现的方法中,均以View为第一个参数,当这些方法被调用的时候,传入的第一个参数通常就是发生事件的View。 二者的结合 View及其继承者通常可以设置到Activity中,作为其中的内容来使用。设置的方法通常是使用Activity的setContentView()方法。 例如使用如下的方法将一个布局文件设置到活动当中。 setContentView(R.layout.mylayout); 布局文件可以转化成View类。这是需要使用的是android.view包中的LayoutInflater类。此时主要使用类中的以下几个方法: public View inflate (int resource, ViewGroup root) public View inflate (int resource, ViewGroup root, boolean attachToRoot) public View inflate (XmlPullParser parser, ViewGroup root) public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot) LayoutInflater功能就是根据布局文件的id或者XML文件,将其转化为一个View类型的内容。 在一个活动中进行如下的调用,将布局文件设置到其中: LayoutInflater factory = LayoutInflater.from(this); final View mylayout = (View )factory.inflate(R.layout.mylayout, null); setContentView(mylayout); 这种实现方式等价于上述直接将布局文件设置到Activity中的方式,但是两个setContentView()的参数不同,前者使用的是整数参数,表示布局文件的id,后者使用的是一个View类型。所谓XML格式的布局文件,经过解析之后的结果实际上是一个对多层次组成的View。 提示:Activity中的setContentView()一般设置布局文件即可,没有必要拆成解析和设置两个步骤。在需要View类型的参数时,LayoutInflater可完成布局文件到View的转换。 本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/798104,如需转载请自行联系原作者

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

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 ,如需转载请自行联系原作者

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

Windows Azure Service Bus (2) 队列(Queue)入门

《Windows Azure Platform 系列文章目录》 Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用。当使用Service Bus Queue的时候,分布式应用的组件不直接进行通信。 - 前端应用(发送方)创建一个Azure Service Bus Queue,插入需要处理的消息主体,然后继续处理前端业务逻辑 - 后端消息处理(接收方)从Service Bus Queue中取出消息,并进行处理 - 发送方不需要等待接收方的答复,以便在前端处理和发送更多的消息 - Azure Service Bus Queue是First In First Out的,最先添加的消息主体,最先被处理。并且Service Bus Queue是会被多个接收方处理的,类似于竞争模式。但是同一时刻,一条消息主体只会被一个接收方处理,保证不会被多个接收方重复处理。 这就好比是笔者进餐馆吃饭,服务员(代表笔者作为发送方)帮助笔者点菜,厨师(代表接收方)在厨房烧菜。假设这家餐馆有ABC三个厨师,笔者点的菜就会被ABC三个厨师进行竞争处理,最先点的菜最先被处理(FIFO),且同一个菜只会由一个厨师制作,不会被两个或者多个厨师同时制作。 Service Bus Queue 架构图: Service Bus Queue是一种通用的技术,可以用于各种各样的情景: 在一个多层(Multi-Tier) Azure应用程序的Web Role和Service Bus Worker Role之前的通信 Azure公网应用程序和企业内网应用程序互相通信的混合云的解决方案 企业内网中不同组织或者部门的分布式应用程序之前的互相通信 使用Service Bus Queue可以让你更好的扩展你的应用程序,并使架构更灵活。 接下来,笔者将介绍使用Azure Management Portal和Visual Studio 2013来创建和使用Azure Service Bus Queue。 本次Demo需要准备的前提条件: Windows Azure Global 账号 (www.windowsazure.com) Visual Studio 2013 Windows Azure SDK (笔者使用的是.NET SDK For VS2013) 1.首先我们需要登陆Azure Management Portal (http://manage.windowsazure.com) 2.点击New -> App Service -> Service Bus ->Queue -> Custom Create。设置Service Bus的名称和命名空间。如下图: 然后配置Azure Service Bus,如下图: 上图中,可以按照需要设置Azure Service Bus Queue的Max Size等信息,笔者暂时使用默认设置。 3.创建完毕后,我们可以通过显示栏的Connection Information来查看Service Bus的访问密钥,如下图: 密钥显示如下: 以上完成了Service Bus NameSpace的设置。 4.然后我们以管理员身份打开VS2013。点击工具栏的View -> Server Explorer。 在Server Explorer中,展开Windows Azure -> Service Bus,然后右键,点击Add New Connection 在下图中,勾选Use connection string,然后复制我们在步骤三中的访问密钥连接字符串: 5.设置完毕后,我们展开Service Bus -> leizhangservicebus-ns -> Queues,然后点击Queue,右键,Create New Queue。如下图: 在弹出的窗口中,设置Name为LeiZhangServiceBusQueue。 然后展开Queues的内容,可以查看到我们创建成功的Azure Service Bus Queue。 阶段性总结: 步骤1-3,实现了创建Azure Service Bus Namespace的工作 步骤4-5,实现了创建Azure Service Bus Queue的工作 接下来,我们要测试通过Visual Studio 2013,向Service Bus Queue,发送和接受消息。 1.我们点击上图中创建成功的Service Bus Queue,点击右键Send a test message,进行发送消息的测试,如下图: 2.会弹出窗口,证明发送测试消息成功。如下图: 3.重复步骤1的Send a test message三次。 4.回到Azure Management Portal,点击leizhangservicebus-ns,可以查看到Queue Length为3,是因为在步骤3中,我们Send a test message执行了三次。如下图: 5.接下来,我们执行接收消息的步骤。我们右键点击"Receive Message" 6.点击Receive Message之后,会显示接受消息的结果。 可以看到,下周中Id为1,即第一条消息。说明了Service Bus Queue是First-In-First-Out的,且Label的时间4:32:36 PM和步骤2的时间一致,也说明了是接受到了第一条消息。如下图: 7.重复步骤5的Receive Message,直至将所有的Azure Service Bus Message取出。 8.然后我们回到Azure Management Portal,可以看到Queue Length又变成0了,因为笔者通过VS2013将Service Bus Queue的消息都Receive了。如下图: 分类: Azure Service Bus 本文转自Lei Zhang博客园博客,原文链接:http://www.cnblogs.com/threestone/p/3968442.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

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

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册