Docker安装及其应用部署

                                                                                                                                           Docker

什么是Docker

Docker是基于Go语言实现的开源项目。

2014年6月发布了1.0稳定版本

    Docker依赖于像LinuxContainers(LXC)这样的Linux技术,以及cgroups和命名空间功能,这些在Windows尚不存在。因此微软正在奋力构建这之间的挂接,使得Docker容器也能够运行在Windows Server上。微软在Windows上运行自己的容器技术已经有多年时间了,但是微软正在扩大范围,也支持Docker这个社区标准

卖点:

1.Docker也可以被称为轻量级虚拟化技术。与传统的VM相比。它更轻量级,启动速冻更快。单台硬件上可以同时跑成百上千台个容器,所以非常适合在业务高峰期通过启动大量容器进行横向扩展。

2.Docker是可移植性的,可以再各种主流linux发布版本或者os x以及windown上(需要使用boot2docker或者虚拟机)使用。java可以做到“一次编译,到处运行”,而Docker则可以称之为“构建一次,在各平台上运行”(Build once,run anywhere)

    Docker不仅仅是描述了应用程序,而且还描述了其对所需运行软件的所有依赖关系。如果你描述了容器内所需运行软件的所有细节,并且将该容器转移到另外一个新服务器中,那么,你不必担忧其是否适配于该服务器、依赖关系是否相配,所有问题都会得到解决。

3. Docker让你分配特定量的CPU、内存和磁盘资源给每个进程,就像虚拟机 速度更快,启动一个容器就像启动一个进程。Docker的开销也更少-实际上不会多于一个进程。它要求你所有的容器共享相同的底层操作系统,安全隔离要弱于虚拟机

    Docker推荐单个容器只运行一个应用程序或者进程,这样就形成了一个分布式的应用程序模式,在这种模式下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或者调试应用程序都变得非常简单,同时也提高了程序的内省性。

 

 

 ***************************

管理程序虚拟化(hypervisor)通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是运行在操作系统内核之上的用户空间。

****************************

Docker客户端和服务器端

   Docker是一个客户-服务器(c/s)架构的程序。Docker客户机只需向Docker服务器或者守护进程发送请求,服务器或者守护进程将完成所有工作并返回结果。

Docker动态

1Docker是一种打包和分发软件的方式

一个现代的软件系统包括许多部分,包括二进制文件、库文件、配置文件和依赖性。将这些不同的组件装成一台机器可不是一件容易的事情,但你出货款软件的时候就更加复杂了。一旦你出货了你的软件,你就需要找到一种方式,将所有这些东西打包到一起、把它们放到需要运行的地方。Docker就是这样一种容器技术,让打包软件以及所有组件之间的依赖性、提供给开发者、分期或者生产、或者发送到需要运行的地方,所有这些变得非常轻松。

 

2Docker并不是特别新的技术

Docker问世只有短短几年时间,但是容器技术已经伴随我们有几十年了。虽然容器在大型机时代很有用处,但是Docker现在发挥才能是受很多因素影响的,包括Linux日益突出、虚拟化技术的普及、以及云对操作系统重要性的侵蚀。

 

3、几乎每个人都提供了Docker

不管你选择的厂商恰好是谁,几乎这些厂商100%都支持Docker。从Amazon Web ServicesRed Hat,再到Google,人人都爱Docker

 

4Docker并不只是面向Linux

Docker扎根于Docker,但是微软把它发扬光大。或者它一定会如此。Docker依赖于像Linux ContainersLXC)这样的Linux技术,以及cgroups和命名空间功能,这些在Windows尚不存在。因此微软正在奋力构建这之间的挂接,使得Docker容器也能够运行在Windows Server上。微软在Windows上运行自己的容器技术已经有多年时间了,但是微软正在扩大范围,也支持Docker这个社区标准。

 

5Docker让你分配特定量的CPU、内存和磁盘资源给每个进程,就像虚拟机

Docker的核心是Linux cgroups(控制组),提供计算和限制容器使用CPU、内存、网络、磁盘资源数量的方法。这提供了一些虚拟化的好处,例如能够分配出一台计算机给少量的资源,这样你就不用让一个进程占用所有计算机让其他进程没有资源可用——但是这并不会带来VMware那样沉重的开销或者成本。

 

6Docker比启动一个虚拟机快(微秒对分钟)

如果你想要在一台服务器上运行多个任务,那么传统的方法是将其划分为多个虚拟机,使用每个虚拟机来运行一个任务。但是虚拟机启动很慢,因为它们必须启动整个操作系统,这要花上几分钟的时间。而且这会占用大量资源,因为每个虚拟机都需要运行一个完整的操作系统实例。容器则提供了某种类似的行为,但是速度更快一些,因为启动一个容器就像启动一个进程。Docker的开销也更少——实际上不会多过一个进程。

 

7、但是,Docker不消灭掉虚拟机

Docker并不是虚拟机的对等替代物,因为它要求你所有的容器共享相同的底层操作系统。这意味着,例如你不能在同一台服务器上同时运行 WindowsLinux应用。而且,随着Docker容器脱颖而出,它的安全隔离要弱于虚拟机,这也使得它成为某种多租户的不恰当的选择。

 

8Docker的开发速度相当迅猛

登上Docker这趟列车可不像是乘坐蒸汽机,而更像是跳上了日本子弹头火车……它以250 MPH的速度向你呼啸而来。考虑到Docker只有一年半的API已经有了15个修订版本,你会知道它变化地有多快。虽然Docker“已经成熟,因为它正在成长为一款稳定的、企业值得使用的软件,但是它仍然没有能持续10年的支持承诺,这通常是企业对他们的软件的期望。

9. 51日,Docker发布了自家的容器网络管理项目libnetworklibnetwork使用Go语言编写,目标是定义一个容器网络模型(CNM),并为应用程序提供一致的编程接口以及网络抽象。目前libnetwork仍在全力开发中,并没有达到使用标准。

 

 

                                    Docker的深入了解:

Docker核心概念

*镜像

*容器

*仓库

1.Docker镜像(image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。镜像是创建Docker容器的基础。

2.Docker容器(container)类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是互相隔离,互不可见的

3.Docker仓库(repository)类似于代码仓库,是Docker集中存放镜像文件的场所。Docker仓库可以分为共有仓库和私有仓库两种形式,目前最大的公开仓库是Docker Hub

 

Docker的安装

Docker支持在主流操作系统平台上使用。包括ubuntu,centos,windown以及macos等系统。在linux系列平台上是原生支持,使用体验也最好。

Ubuntu

目前支持以下ubuntu版本:

ubuntu 14.04

ubuntu 12.04

ubuntu 13.04

ubuntu 13.10

并不意味除了清单以外的ubuntu版本就不能安装Docker。只要在适当的内核和Docker所需的支持。其他也是可以安装Docker的

 

检测前提条件:

1.内核

linux终端下命令“uname -a”

内核版本必须在3.8. x86_64。如内核版本过低,要升级内核版本

2.Device mapper

使用device mapper作为存储驱动,自2.6.9版本的linux内核开始已经集成了device mapper,并且提供了一个将块设备映射到高级虚拟设备的方法

linux终端: sudo grep device-mapper /proc/devices

如果出现device-mapper的相关信息,则ok5

 

安装Docker

首先确认安装了curl命令,终端命令如下:

#whereis curl

如找不到curl命令,则安装

#apt-get install -y curl

添加Docker仓库GPG秘钥

#curl -s http://get.docker.io.gpg | sudo apt-key add -

更新APT源

#sudo apt-get update

接下来安装Docker软件包

sudo apt-get install lxc-docker

确认Docker已经正常安装并运行:

docker info

 

centos

Red hat 和 Red hat系列发行版本中安装docker

 少数版本可以安装docker:

RHEL(centos 6)或者以上版本(64位)

Fedora core 19 或者以上版本(64位)

RPM软件包安装

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

安装玩EPEL安装Docker

sudo yum -y install docker.io

 

启动守护进程

在red hat系列中启动守护进程

RHEL6或者centos6中:

sudo service docker start

想要在系统开机时自动启动Docker服务:

sudo service docker enable

在RHEL7启动Docker服务

sudo systemctl start docker

开机自启动:sudo systemctl enable docker

 

windowns

windowns下安装boot2docker

boot2docker是极小的虚拟机,boot2docker在windowns上安装了一个原生的命令工具,并提供Docker环境

要在windown中安装BOOT2Docker,依赖两个必要条件:

*virtualbox

*Docker客户端

要在windowns安装boot2Docker,需要从github上下载相应的安装程序

#wget http://git.hub.com/boot2docker/windowns-installer/releases/download/v1.30/docker-install.exe

运行安装文件,并根据提示安装boot2Docker

安装完boot2Docker后,可以从桌面或者program files >boot2Docker for windowns 来运行boot2Docker start脚本

测试boot2Docker

尝试使用将本机Docker客户端连接到boot2docker虚拟机中运行的守护进程来测试boot2Docker是否已经正常安装

docker info

boot2docker是本地虚拟机,拥有自己的网络接口和IP地址

命令:

想得到Boot2docker的IP地址,查看DOCKER_HOST环境变量,启动Boot2docker: #boot2docker start 

查看ip: #boot2docker ip

获取到Boot2docker的IP地址后,就可以连接localhost上的容器了

例如使用curl命令,只需将localhost替换成相应的IP就可以

#curl localhost:49155  --》 #curl IP:4915

 

Docker守护进程:

Docker守护进程是以root权限运行的。处理普通用户无法完成的操作。

查看docker守护进程:

sudo status docker

start或者stop Docker守护进程

sudo stop docker或sudo start docker

sudo service docker stop或sudo service dockerstart

 

Docker的使用

确保Docker正常运行:

#docker info

docker是基于客户端/服务器架构的

运行第一个容器

sudo docker run -it ubuntu  /bin/bash

如果不清楚可以使用docker run --help  查看详细参数信息

docker用镜像启动了容器,该容器拥有自己的网络。IP地址,以及用来和宿主机进行通信的网桥

使用容器:

以root身份登陆容器。查看容器信息(linux终端命令)

在容器内安装软件包:apt-get install Vim(以ubuntu为例)

工作结束输入:exit 就返回ubuntu宿主机额

查看容器:

docker ps -a (列出所有容器)

容器命名:

docker run --name hh_container -it ubuntu /bin/bash (hh_container 是容器的名字)

重启停止的容器:

sudo docker start hh_container

或者利用容器的ID重启hh_container

sudo docker start ID

创建守护式容器:

守护式容器没有交互会话。非常适合运行应用程序和服务

sudo docker run --name hh_container -d ubuntu /bin/bash

参数-d将容器放到后台运行

查看容器内部信息:

docker logs hh_container

docker logs --help 查看命令信息

查看容器内的进程:

docker top hh_container

在容器内部运行进程:

容器内运行的进程有两种类型:后台任务和交互性任务

sudo docker exec -d hh_container touch /etc/aa

通过docker exec 后台命令,我们可以再正在运行的容器中进行维护,监控和管理

sudo docker exec -it hh_container /bin/bash

停止守护进程:

docker stop hh_container

深入了解docker:

sudo docker inspect  hh_container

 

详细介绍docker镜像和仓库

什么是docker镜像:docker镜像是由文件系统叠加而成,最底层是一个引导文件,即boots

列出文件镜像images:

docker  images

下载镜像:sudo pull ubuntu

查看镜像:sudo search centos

构建镜像:docker commit 命令或者docker build和Dockerfile文件

注释:docker commit提交的支持创建容器镜像和容器的当前的差异,这使得该更新非常轻量

docker build利用Dockerfile文件按照所需构建自己的镜像

删除镜像:docker rmi  id


 

你可能感兴趣的:(Docker安装及其应用部署)