【1】Docker是什么
Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去
,其他使用者可以直接使用这个镜像
。运行中的这个镜像称为容器,容器启动是非常快速的。类似windows里面的ghost操作系统,安装好后什么都有了。
如下Docker架构图示:
Docker是如何工作的?
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
【2】Docker与传统虚拟技术对比
① 传统虚拟技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
虚拟机的缺点:1 资源占用多 2 冗余步骤多 3 启动慢
② docker
由于前面虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离
。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
Docker 和传统虚拟化方式的不同之处:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
- 而容器内的应用进程直接运行于宿主的内核,
容器内没有自己的内核,而且也没有进行硬件虚拟
。因此容器要比传统虚拟机更为轻便。 - 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
为什么docker比VM快?
(1)docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。避免引寻、加载操作系统内核比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。
③ Docker的优势
更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。
更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
【3】Docker的核心概念
Docker镜像(Images)
Docker 镜像是用于创建Docker 容器的模板
。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
Docker容器(Container)
容器是独立运行的一个或一组应用。容器是用镜像创建的运行实例
。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
docker客户端(Client):客户端通过命令行或者其他工具使用Docker API(与Docker 的守护进程通信。
docker主机(Host):一个物理或者虚拟的机器用于执行Docker 守护进程和容器。
Docker仓库(Registry)
仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等
使用步骤一般如下:
1)、安装Docker 2)、去Docker仓库找到这个软件对应的镜像; 3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器; 4)、对容器的启动停止就是对软件的启动停止;
Docker支持以下的CentOS版本:
CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本
【4】Centos6.8下安装Docker
目前,CentOS 仅发行版本中的内核支持 Docker。
- Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
- Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
① 前提安装
Docker 要求CentOS 系统的内核版本高于3.10,可以使用如下命令检测:
uname -v
如果版本低于3.10,可以使用如下命令更新:
yum update
(Centos6.8下需要这一步
)Docker使用EPEL发布,RHEL系的OS首先要确保已经持有EPEL仓库,否则先检查OS的版本,然后安装相应的EPEL包
yum install -y epel-release
安装gcc gcc-c++
yum -y install gcc gcc-c++
② 安装docker
命令如下:
yum install -y docker-io
可能会遇到:No package docker-io available.
错误,那么不妨直接试试如下命令:
yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
安装后的配置文件:vim /etc/sysconfig/docker
③ 启动docker
service docker start
【5】Centos7下安装docker
安装gcc gcc-c++
yum -y install gcc gcc-c++
卸载旧版本(如果没有则不需要)
yum -y remove docker docker-common docker-selinux docker-engine
卸载2018.3的官网版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
② 安装DOCKER CE
命令如下:
yum -y install docker-ce #或如下 yum -y install docker-ce docker-ce-cli containerd.io
③ 将docker设置为开机启动
命令如下:
systemctl enable docker
④ docker的启动与停止
命令如下:
systemctl start docker systemct stop docker
与Centos7以前版本不同的是,这里使用 systemctl+动作名+服务名
进行操作。而Centos6(及以前)则使用 service+服务名+动作名
进行操作。
⑤查看运行状态
命令如下:
systemctl status docker
图示如下:
⑥ docker version验证
docker version
⑦ docker run hello-world进行测试
命令如下:
docker run hello-world
docker run做了什么?
⑧ 卸载
systemctl stop docker yum -y remove docker-ce rm -rf /var/lib/docker
【5】Segmentation Fault or Critical Error encountered. Dumping core and aborting.
如果遇到这个问题说明装错了。
Segmentation Fault or Critical Error encountered. Dumping core and aborting. Aborted (core dumped)
按照以下步骤操作。
- 查询已安装的docker
yum list installed |grep docker
- 卸载
yum -y remove docker.x86_64
- 重装
#centos6.8下是docker-io yum install -y docker-io
- 重新启动
service docker start
- 查看新docker版本
[root@localhost mydocker]# docker version Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d OS/Arch (server): linux/amd64
【6】Centos6.8下配置Docker镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。
去阿里云官网-登录账号-控制台-产品与服务-容器镜像服务-镜像加速器获取你的加速器地址。
Centos6.8下docker配置文件为:/etc/sysconfig/docker
。
修改该配置文件将获得的自己账户下的阿里云加速地址配置进去,如下所示
other_args="--registry-mirror=https://你自己的账号加速信息.mirror.aliyuncs.com"
重新启动docker服务
service docker restart
可以使用ps命令检查下:
[root@localhost ~]# ps -ef|grep docker root 28108 1 0 12:44 pts/0 00:00:00 /usr/bin/docker -d --registry-mirror=https://XXX.mirror.aliyuncs.com root 28163 26988 0 12:45 pts/0 00:00:00 grep docker
【7】Centos7下配置阿里云加速
Centos7下配置文件为/etc/docker/daemon.json
。
① 修改配置文件
vim /etc/docker/daemon.json
② 添加配置
{ "registry-mirrors": ["https://05hzrxh8.mirror.aliyuncs.com"] }
③ 重启服务
sudo systemctl daemon-reload sudo systemctl restart docker