Openstack.DockerDevOps

Openstack.DockerDevOps

1、Nova

nova flavor-list 查看配置模板列表

nova image-list 查看镜像列表

nova secgroup-list 查看安全规则
nova boot --flavor m1.tiny --image cirros-0.3.4-x86_64 --nic net-id=DEMO_NET_ID --security-group default --key-name demo-key demo-instance1启动虚机

nova-manage service list nova服务列表,服务所在物理点和域,以及服务状态

nova list 列出虚机,在执行该命令前,得先source 帐户openrc文件

nova show uuid(虚机id) 可以查看该虚机的详细信息,如虚机名,镜像模板,启动时间等等。如果要查看所在物理点,需在执行该命令前,先source 管理员openrc文件

nova live-migration 热迁移
nova evacuate uuid 物理节点号 冷迁移虚机到新的物理点
nova start uuid 开机

nova stop uuid 关机

nova delete uuid 删除虚机

nova reset-state uuid 重置虚机状态

nova reboot --hard uuid 对虚机进行硬重启
nova reset-state --active uuid 将虚机状态重置为active,对于部分error虚机无法删除时,运行该命令再删除一般能将虚机删除

nova get-vnc-console demo-instance1 novncnn 获取到VNC的web登录地址,直接输入获取到的http地址到浏览器即可登录虚机

nova volume-list查看volume列表

nova volume-attach demo-instance1 volume_id 将volume挂载到demo-instance1虚机
##########################################################################
简述 Docker

2017/05/17 | 分类: 行业资讯 | 0 条评论 | 标签: DOCKER
分享到:7

原文出处: waylau
Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管是云服务还是微服务(Microservices),越来越多的厂商都开始基于 Docker 作为基础设施自动化的工具。那么什么是 Docker?Docker与传统的虚拟机有什么区别?为何要采用 Docker?如何使用 Docker?
本文,就针对上述提到的问题,来简单介绍下 Docker。
什么是 Docker
Docker 是开源的应用容器引擎。
Docker 可以让你将所有应用软件以及它的以来打包成软件开发的标准化单元。
Docker 容器将软件以及它运行安装所需的一切文件(代码、运行时、系统工具、系统库)打包到一起,这就保证了不管是在什么样的运行环境,总是能以相同的方式运行。就好像 Java 虚拟机一样,“一次编写,到处运行(Write once, run anywhere)”,而 Docker 是“一次构建,到处运行(Build once,run anywhere)”。

Openstack.DockerDevOps_第1张图片
what_is_layered_filesystems_sm

Docker 是一种“容器即服务”(Docker Containers as a Service ,简称 CaaS),使得开发和IT运营团队可以对于应用的构建、发布、运行更加敏捷和可控。
概况的说: Docker 是为开发人员和系统管理员用于构建、发布、并运行分布式应用程序的开放式平台。该平台由 Docker 引擎(一个便携、轻巧的运行时和打包工具) 和 Docker Hub (一个共享应用程序和自动化工作流的云服务)等组成。Docker 可以使应用程序从组件迅速组装并消除了开发、质量保证和生产环境之间的摩擦问题。这样一来,IT部门可以更快地发布,而这些应用程序不管是运行在笔记本电脑、数据中心的虚拟机,还是任何的云,其运行过程和结果都是一致的。
我们再来看下 Docker 的 Logo 。很明显,这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。这 Logo 简直的太形象了!
Openstack.DockerDevOps_第2张图片
dockerize-php-application-300x250

Docker 的优点
轻量级:所有容器在一台机器上共享同一个操作系统内核,这样他们立即开始,并更有效地利用内存。Image 是从分层文件系统的构建,这样他们能够共享公共文件,使得磁盘使用率和 Image 的下载更加高效。
开放:Docker 容器是基于开发的标准,允许容器运行在主流的 Linux 发布版和 Microsoft 操作系统作为所有的基础设施。
安全:容器使得应用程序彼此隔离,而基础架构同时为应用程序提供了额外的保护层。

Docker 与 虚拟机的区别
容器与虚拟机有着类似的资源隔离和分配的优点,但不同的架构方法使容器能够更加便携,高效等。
虚拟机的架构

Openstack.DockerDevOps_第3张图片
what-is-docker-diagram

每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统(Guest OS),尽管它们被分离,它们共享并利用主机的硬件资源,将近需要十几个 GB 的大小。
容器的架构
Openstack.DockerDevOps_第4张图片
what-is-vm-diagram

容器包括应用程序及其所有的依赖,但与其他容器共享内核。它们以独立的用户空间进程形式运行在主机操作系统上。他们也不依赖于任何特定的基础设施,Docker 容器可以运行在任何计算机上,任何基础设施和任何云上。
Docker 的容器利用了 LXC,管理利用了 namespaces 来做权限的控制和隔离,cgroups 来进行资源的配置,并且还通过 aufs 来进一步提高文件系统的资源利用率,而这些技术都不是 Docker 独创。
LXC
LXC 与虚拟机的不同之处在于,它是一个操作系统级别的虚拟化环境,而不是硬件虚拟化环境。他们都做同样的事情,但 LXC 是操作系统级别的虚拟化环境,虚拟环境有它自己的进程和网络空间,而不是创建一个完整成熟的虚拟机。因此,一个 LXC 虚拟操作系统具有最小的资源需求,并启动只需几秒钟。
正如你可以在下图中看到的,左侧是 LXC 虚拟的 Ubuntu ,默认安装使用 11 MB 大小。
Openstack.DockerDevOps_第5张图片
pic_4

Docker 与 Microservices 的关系
Microservices(微服务) 依赖于“基础设施自动化”,而 Docker 正是“基础设施自动化”的利器。可以说 Docker 的火爆,一定程度上也带动了微服务架构的兴起,而微服务的广泛应用也促进了 Docker 繁荣。可以说两者相辅相成。
有关微服务的介绍,可以异步至《 简述 Microservices(微服务)》。
为啥要用 Docker
开发更加敏捷:Docker 让开发人员可以自由定义环境,创建和部署的应用程序更快、更容易,IT 运维人员快速应对变化也更加灵活性。
更加可控:Docker 使得开发人员保存从基础设施到应用的代码,帮助 IT 运维人管理拥有标准的、安全的、可扩展的操作环境。
高可移植性:Docker 允许自由选择,可以是从笔记本电脑到一个团队,从私人基础设施到公共云提供商。

这样,你可以专注于开发应用,其他的繁琐事交给 Docker 去做吧。
如何使用 Docker
真是一个大话题,本文暂时不会详细涉及,会另外撰文介绍。如果对 Docker 抱有兴趣,可以参阅市面上的书籍:
《The Docker Book》(James Turnbull)
《Docker : Up and Running 》(Karl Matthias、Sean P. Kane)
《Docker in Action》(Jeff Nickoloff)
《Using docker》(Adrian Mouat )

《给程序员的开源、免费图书集合》收录了几本 Docker 免费的书籍有:
《Docker —— 从入门到实践》
《Docker Cheat Sheet》
《Docker 入门实战》
《Docker 中文指南》

################################################################################
使用 Docker 搭建 Java Web 运行环境

2016/09/30 | 分类: WEB开发 | 1 条评论 | 标签: DOCKER, JAVAWEB
分享到:21

Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它。Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了。作为一名 Java 程序员,我们是时候一起把 Docker 学起来了!
本文会对虚拟化技术与 Docker 容器技术做一个对比,然后引出一些 Docker 的名词术语,比如:容器、镜像等,随后将使用 Docker 搭建一个 Java Web 运行环境,最后将对本文做一个总结。
我们先来回顾一下传统虚拟化技术的体系架构:


Openstack.DockerDevOps_第6张图片
虚拟化技术

可见,我们在宿主机的操作系统上,可安装了多个虚拟机,而在每个虚拟机中,通过虚拟化技术,实现了一个虚拟操作系统,随后,就可以在该虚拟操作系统上,安装自己所需的应用程序了。这一切看似非常简单,但其中的技术细节是相当高深莫测的,大神级人物都不一定说得清楚。
凡是使用过虚拟机的同学,应该都知道,启动虚拟机就像启动一台计算机,初始化过程是相当慢的,我们需要等很久,才能看到登录界面。一旦虚拟机启动以后,就可以与宿主机建立网络连接,确保虚拟机与宿主机之间是互联互通的。不同的虚拟机之间却是相互隔离的,也就是说,彼此并不知道对方的存在,但每个虚拟机占用的都是宿主机的硬件与网络资源。
我们再来对比一下 Docker 技术的体系架构吧:


Openstack.DockerDevOps_第7张图片
Docker 技术

可见,在宿主机的操作系统上,有一个 Docker 服务在运行(或者称为“Docker 引擎”),在此服务上,我们可开启多个 Docker 容器,而每个 Docker 容器中可运行自己所需的应用程序,Docker 容器之间也是相互隔离的,同样地,都是占用的宿主机的硬件与网络资源。
Docker 容器相对于虚拟机而言,除了在技术实现上完全不一样以外,启动速度较虚拟机而言有本质的飞跃,启动一个容器只在眨眼瞬间。不管是虚拟机还是 Docker 容器,它们都是为了隔离应用程序的运行环境,节省我们的硬件资源,为我们开发人员提供福利。
我们再来看看 Docker 的 Logo 吧:
Openstack.DockerDevOps_第8张图片
Docker Logo

很明显,这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。这 Logo 简直的太形象了!
需要强调的是,笔者并非否定虚拟化技术,而是想通过本文让更多的读者了解如何使用 Docker 技术,让大家知道除了虚拟化技术以外,还有另一种替代技术,也能让应用程序隔离起来。

下面,我们将结合一个 Java Web 应用的部署过程,来描述如何“烹饪”Docker 这份美味佳肴。您准备好了吗?我们现在就开始!
原料
前提条件
首先,您要准备一个 CentOS 的操作系统,虚拟机也行。总之,可以通过 Linux 客户端工具访问到 CentOS 操作系统就行。
需要说明的是,Ubuntu 或其它 Linux 操作系统也能玩 Docker,只不过本文选择了以 CentOS 为例,仅此而已。
CentOS 具体要求如下:
必须是 64 位操作系统
建议内核在 3.8 以上

通过以下命令查看您的 CentOS 内核:
1

uname
-r

如果执行以上命令后,输出的内核版本号低于 3.8,请参考下面的方法来来升级您的 Linux 内核。
对于 CentOS 6.5 而言,内核版本默认是 2.6。首先,可通过以下命令安装最新内核:
1
2
3

rpm --
import
https:
//www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -ivh http:
//www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm

yum -y --enablerepo=elrepo-kernel install kernel-lt

随后,编辑以下配置文件:
1

vi /etc/grub.conf

将default=1
修改为default=0

最后,通过reboot
命令重启操作系统。
重启后如果不出意外的话,再次查看内核,您的 CentOS 内核将会显示为 3.10。
如果到这里,您和我们所期望的结果是一致的。恭喜您!下面我们就一起来安装 Docker 了。
安装 Docker
只需通过以下命令即可安装 Docker 软件:
1
2

rpm -Uvh http:
//download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

yum -y install docker-io

可使用以下命令,查看 Docker 是否安装成功:
1

docker version

若输出了 Docker 的版本号,则说明安装成功,我们下面就可以开始使用 Docker 了。
可通过以下命令启动 Docker 服务:
1

ervice docker start

做法
就像曾经安装软件一样,我们首先需要有一张刻录了该软件的光盘,如果您使用的是虚拟光驱,那么就需要运行一种名为“镜像”的文件,通过它来安装软件。在 Docker 的世界里,也有一个名为“镜像”的东西,已经安装我们所需的操作系统,我们一般成为“Docker 镜像”,本文简称“镜像”。
那么问题来了,我们从哪里下载镜像呢?
Docker 官网 确实已经提供了所有的镜像下载地址,可惜在国内却是无法访问的。幸好国内好心人提供了一个Docker 中文网,在该网站上可以下载我们所需的 Docker 镜像。
下载镜像
我们不妨还是以 CentOS 为例,通过以下步骤,下载一个 CentOS 的镜像。
首先,访问 Docker 中文网,在首页中搜索名为“centos”的镜像,在搜索的结果中,有一个“官方镜像”,它就是我们所需的。
然后,进入 CentOS 官方镜像页面,在“Pull this repository”输入框中,有一段命令,把它复制下来,在自己的命令行上运行该命令,随后将立即下载该镜像。
最后,使用以下命令查看本地所有的镜像:
1

docker images

当下载完成后,您应该会看到:
1
2

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

docker.cn/docker/centos centos6 25c5298b1a36
7
weeks ago
215.8
MB

如果看到以上输出,说明您可以使用“docker.cn/docker/centos”这个镜像了,或将其称为仓库(Repository),该镜像有一个名为“centos6”的标签(Tag),此外还有一个名为“25c5298b1a36 ”的镜像 ID(可能您所看到的镜像 ID 与此处的不一致,那是正常现象,因为这个数字是随机生成的)。此外,我们可以看到该镜像只有 215.8 MB,非常小巧,而不像虚拟机的镜像文件那样庞大。
现在镜像已经有了,我们下面就需要使用该镜像,来启动容器。
启动容器
容器是在镜像的基础上来运行的,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序。既然镜像已经下载到本地,那么如何才能启动容器呢?
只需使用以下命令即可启动容器:
1

docker run -i -t -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash

这条命令比较长,我们稍微分解一下,其实包含以下三个部分:
1

docker run <相关参数> <镜像 ID> <初始命令>

其中,相关参数包括:
-i
:表示以“交互模式”运行容器
-t
:表示容器启动后会进入其命令行
-v
:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>

假设我们的所有安装程序都放在了宿主机的/root/software/
目录下,现在需要将其挂载到容器的/mnt/software/
目录下。
需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
安装相关软件
为了搭建 Java Web 运行环境,我们需要安装 JDK 与 Tomcat,下面的过程均在容器内部进行。我们不妨选择/opt/
目录作为安装目录,首先需要通过cd /opt/
命令进入该目录。
安装 JDK
首先,解压 JDK 程序包:
1

tar
-zxf
/mnt/software/jdk-7u67-linux-x64
.
tar
.gz -C .

然后,重命名 JDK 目录:
1

mv
jdk1.7.0_67/ jdk/

安装 Tomcat
首先,解压 Tomcat 程序包:
1

tar
-zxf
/mnt/software/apache-tomcat-7
.0.55.
tar
.gz -C .

然后,重命名 Tomcat 目录:
1

mv
apache-tomcat-7.0.55/ tomcat/

设置环境变量
首先,编辑.bashrc
文件
1

vi
~/.bashrc

然后,在该文件末尾添加如下配置:
1
2

export
JAVA_HOME=
/opt/jdk

export
PATH=$PATH:$JAVA_HOME

最后,需要使用source
命令,让环境变量生效:
1

source
~/.bashrc

编写运行脚本
我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体过程如下:
首先,创建运行脚本:
1

vi
/root/run
.sh

然后,编辑脚本内容如下:
1
2
3

!/bin/bash

source
~/.bashrc

sh
/opt/tomcat/bin/catalina
.sh run

注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。
最后,为运行脚本添加执行权限:
1

chmod
u+x
/root/run
.sh

退出容器
当以上步骤全部完成后,可使用exit
命令,退出容器。
随后,可使用如下命令查看正在运行的容器:
1

docker
ps

此时,您应该看不到任何正在运行的程序,因为刚才已经使用exit
命令退出的容器,此时容器处于停止状态,可使用如下命令查看所有容器:
1

docker
ps
-a

输出如下内容:
1
2

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

57c312bbaad1 docker.cn
/docker/centos
:centos6
"/bin/bash"
27 minutes ago Exited (0) 19 seconds ago naughty_goldstine

记住以上CONTAINER ID
(容器 ID),随后我们将通过该容器,创建一个可运行 Java Web 的镜像。
创建 Java Web 镜像
使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”:
1

docker commit 57c312bbaad1 huangyong
/javaweb
:0.1

该容器的 ID 是“57c312bbaad1”,所创建的镜像名是“huangyong/javaweb:0.1”,随后可使用镜像来启动 Java Web 容器。
启动 Java Web 容器
有必要首先使用docker images
命令,查看当前所有的镜像:
1
2
3

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

huangyong
/javaweb
0.1 fc826a4706af 38 seconds ago 562.8 MB

docker.cn
/docker/centos
centos6 25c5298b1a36 7 weeks ago 215.8 MB

可见,此时已经看到了最新创建的镜像“huangyong/javaweb:0.1”,其镜像 ID 是“fc826a4706af”。正如上面所描述的那样,我们可以通过“镜像名”或“镜像 ID”来启动容器,与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。此时,需要使用以下命令:
1

docker run -d -p 58080:8080 --name javaweb huangyong
/javaweb
:0.1
/root/run
.sh

稍作解释:
-d
:表示以“守护模式”执行/root/run.sh
脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p
:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 58080 端口,这样就向外界暴露了 58080 端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name
:表示容器名称,用一个有意义的名称命名即可。

关于 Docker 网桥的内容,需要补充说明一下。实际上 Docker 在宿主机与容器之间,搭建了一座网络通信的桥梁,我们可通过宿主机 IP 地址与端口号来映射容器内部的 IP 地址与端口号,
在一系列参数后面的是“镜像名”或“镜像 ID”,怎么方便就怎么来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 Tomcat 服务的命令。
当运行以上命令后,会立即输出一长串“容器 ID”,我们可通过docker ps
命令来查看当前正在运行的容器。
1
2

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

82f47923f926 huangyong
/javaweb
:0.1
"/root/run.sh"
4 seconds ago Up 3 seconds 0.0.0.0:58080->8080
/tcp
javaweb

品尝
在浏览器中,输入以下地址,即可访问 Tomcat 首页:
1

http:
//192
.168.65.132:58080/

注意:这里使用的是宿主机的 IP 地址,与对外暴露的端口号 58080,它映射容器内部的端口号 8080。
总结
通过本文,我们了解了 Docker 是什么?它与虚拟机的差别在哪里?以及如何安装 Docker?如何下载 Docker 镜像?如何运行 Docker 容器?如何在容器内安装应用程序?如何在容器上创建镜像?如何以服务的方式启动容器?这一切看似简单,但操作也是相当繁琐的,不过熟能生巧,需要我们不断地操练。
除了这种手工生成 Docker 镜像的方式以外,还有一种更像是写代码一样,可以自动地创建 Docker 镜像的方式。只需要我们编写一个 Dockerfile 文件,随后使用docker build
命令即可完成以上所有的手工操作。

你可能感兴趣的:(Openstack.DockerDevOps)