什么是Docker
Docker是一个为开发人员和系统管理员提供的分布式应用程序的开放平台。
本质来说,Docker是一个基于容器技术的系统。如果你熟悉虚拟服务的概念,那么,Docker为你的应用程序提供更高层级的抽象服务。
Docker作为一个内部项目,发起于一个叫做“dotCloud”的托管公司。但是,早在2013年,就被公布了源代码。从那时起,Docker得益于超过15000次软件的提交,以及超过900名贡献者而逐渐壮大。
为什么使用Docker?
它启动很快。 启动一个Docker容器只需50毫秒。没有看错,是真的这么快。这就是使用高层级抽象的好处,这样减少了你所需运行的组件的数量。这也意味着,在它执行的过程中几乎没有额外的开销。
一键(单命令)部署。 它是真的简单到安装一个应用只需输入一行命令。想要安装MySQL?一行命令。想到一下子把WordPress, MySQL, Nginx and Memcache全部安装并且配置完成?还是一行命令。
预配置应用。 在上一次统计中,有超过13000个应用已经打包成了Docker镜像。这样的话,如果你正在使用一个通用的应用,则大部分的初始化工作都应经为你事先做好了。还不止这样,你还可以再得到应用镜像之后,进行个性化的修改,再重新部署到你专属的资源库里。
资源隔离。 在过去,如果你想运行所有的服务在同一台服务器上,这可能会耗尽服务器的所有资源。Docker允许你基于各自应用或服务,进行设置、监听、调整。
一致性。 Docker是那种“一次配置各处部署”的环境。它去除了所有从开发环境向生产环境迁移的琐事。每一组类库都跟他的docker镜像紧密结合,来确保一致性。
一个完整的平台。 Docker正逐渐发展成为一个提供完整功能的平台,而不局限于功能单一的工具。包括:Base Engine,容器的基础引擎;Compose,整合编排复杂的部署;Swarm,用以管理Docker集群;Machine,负责供给。这就是Docker区别于其他容器类型工具的地方,你可以非常轻松地管理系统的整个生命周期。
扩展性。 这也是Docker很亮眼的特性之一,特别是,如果你的项目是基于微服务的。Compose and Swarm用来部署可扩展的应用系统,加上Kubernetes、Mesos等第三方应用,这两方面使服务器的扩展性提高到了更高的层级。我们这里在讨论的“管理整个生命周期”是基于多达数百万级数量的容器的管理能力,所以说,扩展性不会是问题!扩展性。这也是Docker很亮眼的特性之一,特别是,如果你的项目是基于微服务的。Compose and Swarm用来部署可扩展的应用系统,加上Kubernetes、Mesos等第三方应用,这两方面使服务器的扩展性提高到了更高的层级。我们这里在讨论的“管理整个生命周期”是基于多达数百万级数量的容器的管理能力,所以说,扩展性不会是问题!
Docker通常用于如下场景
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
安装Docker
CentOS 6.5以上版本
安装EPEL
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
yum -y install yum -priorities
安装Docker
yum install docker-io
service docker start
chkconfig docker on
CentOS 7
yum install docker
systemctl start docker.service
systemctl enable docker.service
脚本安装
wget -qO- https://get.docker.com/ | sh
Hello World
Docker允许在容器内执行命令,使用docker run命令在容器内运行一个应用程序。
docker run ubuntu:15.10 /bin/echo "Hello world"
命令行会显示:Hello world
各个参数解析:
- docker: Docker的二进制执行文件
- run: 与前面的docker组合来运行一个容器
- ubuntu:15.10:指定要运行的容器,Docker会首先检查本机是否有此镜像,否则会从docker hub镜像库里下载对应镜像
- /bin/echo "Hello world": 在启动的容器里执行的命令
运行交互式容器
通过添加 -i -t,让docker容器实现“对话”的能力
root@localhost:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@dc0050c79503:/#
各个参数解析:
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
启动容器(后台运行)
使用以下命令创建一个以进程方式运行的容器
root@localhost:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
在输出中,我们没有看到期望的"hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
通过 docker ps 来查看容器的运行状态
停止容器
停止容器的命令:docker stop [container_id]