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动态
1、Docker是一种打包和分发软件的方式
一个现代的软件系统包括许多部分,包括二进制文件、库文件、配置文件和依赖性。将这些不同的组件装成一台机器可不是一件容易的事情,但你“出货”这款软件的时候就更加复杂了。一旦你出货了你的软件,你就需要找到一种方式,将所有这些东西打包到一起、把它们放到需要运行的地方。Docker就是这样一种容器技术,让打包软件以及所有组件之间的依赖性、提供给开发者、分期或者生产、或者发送到需要运行的地方,所有这些变得非常轻松。
2、Docker并不是特别新的技术
Docker问世只有短短几年时间,但是容器技术已经伴随我们有几十年了。虽然容器在大型机时代很有用处,但是Docker现在发挥才能是受很多因素影响的,包括Linux日益突出、虚拟化技术的普及、以及云对操作系统重要性的侵蚀。
3、几乎每个人都提供了Docker
不管你选择的厂商恰好是谁,几乎这些厂商100%都支持Docker。从Amazon Web Services到Red Hat,再到Google,人人都爱Docker。
4、Docker并不只是面向Linux
Docker扎根于Docker,但是微软把它发扬光大。或者它一定会如此。Docker依赖于像Linux Containers(LXC)这样的Linux技术,以及cgroups和命名空间功能,这些在Windows尚不存在。因此微软正在奋力构建这之间的挂接,使得Docker容器也能够运行在Windows Server上。微软在Windows上运行自己的容器技术已经有多年时间了,但是微软正在扩大范围,也支持Docker这个社区标准。
5、Docker让你分配特定量的CPU、内存和磁盘资源给每个进程,就像虚拟机
在Docker的核心是Linux cgroups(控制组),提供计算和限制容器使用CPU、内存、网络、磁盘资源数量的方法。这提供了一些虚拟化的好处,例如能够分配出一台计算机给少量的资源,这样你就不用让一个进程占用所有计算机让其他进程没有资源可用——但是这并不会带来VMware那样沉重的开销或者成本。
6、Docker比启动一个虚拟机快(微秒对分钟)
如果你想要在一台服务器上运行多个任务,那么传统的方法是将其划分为多个虚拟机,使用每个虚拟机来运行一个任务。但是虚拟机启动很慢,因为它们必须启动整个操作系统,这要花上几分钟的时间。而且这会占用大量资源,因为每个虚拟机都需要运行一个完整的操作系统实例。容器则提供了某种类似的行为,但是速度更快一些,因为启动一个容器就像启动一个进程。Docker的开销也更少——实际上不会多过一个进程。
7、但是,Docker不消灭掉虚拟机
Docker并不是虚拟机的对等替代物,因为它要求你所有的容器共享相同的底层操作系统。这意味着,例如你不能在同一台服务器上同时运行 Windows和Linux应用。而且,随着Docker容器脱颖而出,它的安全隔离要弱于虚拟机,这也使得它成为某种多租户的不恰当的选择。
8、Docker的开发速度相当迅猛
登上Docker这趟列车可不像是乘坐蒸汽机,而更像是跳上了日本子弹头火车……它以250 MPH的速度向你呼啸而来。考虑到Docker只有一年半的API已经有了15个修订版本,你会知道它变化地有多快。虽然Docker“已经成熟,因为它正在成长为一款稳定的、企业值得使用的软件”,但是它仍然没有能持续10年的支持承诺,这通常是企业对他们的软件的期望。
9. 5月1日,Docker发布了自家的容器网络管理项目libnetwork,libnetwork使用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