一、docker介绍
容器优点 容器能与主机的操作系统共享资源,因而它的效率高出一个数量级。启动和停止容器均只需一瞬间。
容器优点
-
容器能与主机的操作系统共享资源,因而它的效率高出一个数量级。启动和停止容器均只需一瞬间。相比在主机上直接运行程序,容器的性能损耗非常低,甚至是零损耗。
-
容器具有可移植性,这极有可能彻底解决由于运行环境的些许改变而导致的问题,甚至有可能彻底终止开发者的抱怨:“可是程序在我的计算机上能正常工作!”
-
容器是轻量的,这意味着开发者能同时运行数十个容器,并能模拟分布式系统在真实运行环境下的情况。运维工程师在一台主机上能运行的容器数量,远远超过仅使用虚拟机时。
-
对于最终用户及开发者而言,容器的优势不仅仅体现在云端部署。用户可以下载并执行复杂的应用程序,而无需花费大量时间在配置和安装的问题上,也无需担心对系统本身的改动。另一方面,应用程序的开发者不用再操心用户环境的差异,以及依赖关系是否满足。
微服务和单一架构
微服务是一种软件系统开发和构成形式,由小而独立的组件组成,这些组件通过网络 互相连接沟通。这与传统的单一架构(monolith)软件开发模式相反,后者只有一个 庞大的程序,一般由 C++ 或 Java 实现。
当需要扩展一个单一架构的软件时,纵向扩展(scale up)往往是唯一选择,也就是说,需要把机器升级,增加内存和使用更强大的 CPU,才能应付更多的负载。相反,微服务则设计成横向扩展(scale out),为了满足增长的需求,只需部署多台机器摊分负载即可。微服务架构还可以针对系统中的瓶颈,只扩展某个特定服务所需的资源。但对于单一架构而言,要么扩展所有东西,要么不扩展,而这会造成资源浪费。
但是,在一个拥有几十到几百个这类服务的系统中,组件之间的交互会导致整体的复 杂度增加。
容器与生俱来的轻量级特性及速度,意味着它尤其适合用于微服务架构。与虚拟机相 比,容器的体积小很多,并且能快速部署,这使得微服务架构能使用最少的资源,又 能迅速应对需求的变化。
linux 上安装 Docker
$ curl https://get.docker.com > /tmp/install.sh
$ chmod +x /tmp/install.sh
$ /tmp/install.sh
这个脚本会先做数个检查,然后用适合你的系统的包安装 Docker。如果它发现系统缺少了 一些安全和文件系统功能所需要的依赖关系,还会把它们一并安装。
快速确认
可以通过执行 docker version 命令得知一切是否已正确安装并且可用。
$ docker version
Client:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:35:49 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:35:49 UTC 2015
OS/Arch: linux/amd64
如果结果相符,这代表已经准备就绪。
补充
- 将SELinux置于宽容模式下运行
刚开始使用 Docker 时,建议以宽容(permissive)模式运行 SELinux,这样 SELinux 将只 把错误写进日志,而非强制执行。如果以强制(enforcing)模式运行 SELinux,那么很有可 能在执行书中的范例时,会遇到各种莫名其妙的“权限不足”(Permission Denied)错误。
要查看你的 SELinux 处于什么模式,可以通过执行 sestatus 命令的结果得知。例如:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
如果显示“enforcing”,代表 SELinux 已生效并会强制执行规则。
要将 SELinux 设为宽容模式,只需执行sudo setenforce 0。
- 不使用sudo命令执行Docker
因为 Docker 运行时需要特殊权限,所以默认执行命令时都必须在前面加上 sudo。 但这样做确实使人厌烦,一个可行的解决方法是把用户放进 docker 用户组里。
在 Ubuntu 下可以输入:
$ sudo usermod -aG docker $USER
如果 docker 用户组不存在,这个命令会创建它,并且把当前的用户添加到组里。
然后,需要先注销并再登入系统。
还需要重启 Docker 服务,Ubuntu 下的操作方法如下:
$ sudo service docker restart