Docker-容器服务 Container Service01(基础)
容器服务 Container Service01 (基础介绍)

一、LXC介绍
LXC为Linux Container的简写。
Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
1)与传统虚拟化技术相比,它的优势在于:
与宿主机使用同一个内核,性能损耗小;
不需要指令级模拟;
不需要即时(Just-in-time)编译;
容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
避免了准虚拟化和系统调用替换中的复杂性;
轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
总结:Linux Container是一种轻量级的虚拟化的手段。
二、什么是docker?
Docker是**Docker.lnc**公司开源的一个基于LXC技术之上构建的Container**容器引擎**,源代码托管在Github上,基于Go语言并遵从**Apache2.0协议**开源
Docker是通过**内核虚拟化**技术(namespaces及cgroups等)来提供容器的**资源隔离与安全保障**等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,**提高资源利用率**;
1.2、Docker的三大理念
构建 运输 运行
1.3、Docker组成
Docker的组成部分docker类似于**CS**结构
Docker Client
Docker Server
** 自我理解:docker的启动就像server端,我们执行命令就像client端
**1)server截图
2)client截图
提示:目前的版本是如果docker的服务端挂了,运行在docker上的所有容器都会挂掉
1.4.1 CLI 交互模型
Docker的C/S模式
1.4.2 RemoteAPI交互模型
Docker的C/S模式-RemoteAPI
三、Docker组件介绍
2.1镜像(Image)
类似于系统镜像,我们要启动docker就需要镜像,与vm组成不同,但类似;
2.2容器(Container)
容器可以理解为运行在linux上的一个进程,我们可以对容器进行增、删、改、查,有隔离性,但没有vm隔离性高
2.3仓库(Repository)
仓库就是存放docker镜像的地方,就像github统一存储一样,docker也有dockerhub,就像官网提供的公共仓库,蛮方便;
三、docker与其他产品的区别
3.1虚拟机和docker的区别(图解)

3.2 Docker与OpenStack区别
| 类别 | Docker | Openstack/KVM | 结论 |
|---|---|---|---|
| 虚拟化 | 内核虚拟化【依赖linux操作系统】 | 硬件虚拟化【CPU】 | docker与openstack相对的虚拟结构不同 |
| 部署难度 | 非常简单 | 组件多,部署复杂 | 因为平台都是在已有生产环境的情况下,进行改造,所以尽量选择侵入性比较小的容器技术 |
| 启动速度 | 秒级 | 分钟级 | 天下武功,为快不破 |
| 执行性能 | 与物理系统相近 | VM会浪费资源 | 核心业务对服务SLA要求非常苛刻 |
| 镜像体积 | 容器镜像MB | 虚拟机镜像GB | 集群调整,体积越小,并发越大 |
| 管理效率 | 管理简单 | 相互依赖,管理复杂 | 方便管理,才能增加效率,可控性是企业核心竞争力 |
| 隔离性 | 高 | 完全隔离 | 隔离性可以保证环境一致性 |
| 可管理性 | 单进程,建议不开ssh服务 | 系统管理全面 | VM在这方面更强 |
| 网络连接 | 相对弱 | 借助Neutron可以灵活组件各类网络架构 | VM在这方便更强,docker需要借助iptables或者第三方工具flanneld |
四、Docker能做什么?

4.1 简化配置
保留了VM虚拟化的优点,在所有主机上都可以运行docker来快速部署,并且可以把配置部署与开发代码一同上线;
4.2 完善流水线(pipeline)管理
从本地开发-测试环境-预生产环境-灰度环境-生产环境,经过多次调试,开发总会说 “在我这可以啊,怎么到线上就不行了呢”,大多数原因就是环境不统一造成,使用docker就可以解决这个问题;
4.3 提高开发效率
发开效率与两点有密切关系,1就是测试环境尽量贴近生产环境 ,2减少发开环境部署这个步骤,docker占用的资源相对低很多,所以很轻松的就可以跑几十个服务
4.4 隔离应用
多个应用环境在一起开发时,可能会先各种坑,主要是隔离的问题
4.5 整合服务器
docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案
4.6 调试能力
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。你可以在《Docker拯救世界》的文章中找到这一点的例证。
4.7 多租户环境
另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的 例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间, 也浪费金钱。
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。
4.8 快速部署 **
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。这正是Google和Facebook都看重的特性。你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。
小结: 一句话说明docker的本质就是 低开销(系统文件、内存 共用)的虚拟机
五、Docker改变了什么?
六、 Docker入门安装
6.1、环境
6.2、安装
准备说明
1、centos7 主机3台(推荐2C4g,最低1c1g)
2、关闭防火墙、SELINUX
3、做好主机名解析,即三台虚拟机能ping通彼此的主机名
hosts文件参考
4、时间同步(很重要)
5,更新yum源,下载docker镜像
链接:https://pan.baidu.com/s/1eTwZHz8 密码:xg5x 下载安装包 上传至 node1 以及 node2 两台机器
Docker官网:http://www.docker.com/
最新版本我们可以去官方网站进行下载。
温馨提示:使用docker最好使用最新版,因为功能比较完善
6.3 启动docker
6.4 添加tcp支持及socket
5.4.1启动docker进程
5.5 查看网络 (注意是否存在docker0网卡)
提示: 我们启动docker的时候,docker会帮我们创建一个docker 0的网桥
七、Docker基础命令
7.1查看当前镜像
7.2搜索镜像
执行docker search centos 会从dockerhub上搜索镜像
7.3 下载镜像
我们可以使用docker pull centos **/ **docker pull nginx来安装centos和nginx的镜像
导出镜像
7.4 导入镜像
[root@linux-node1 ~]# docker load < nginx.tar

7.5删除镜像

提示:如果镜像已经创建了一个容器,那么将无法进行删除
7.6 删除容器
7.7 运行容器
7.8 查看启动镜像
ps是显示正在运行的容器 -a是显示不运行的 -q显示ID
我们可以看到,现在容器并没有启动。因为docker启动需要在前台启动一个进程。容器的名称可以我们指定或自动生成
提示: 管理docker容器可以通过名称也可以通过ID
7.9 docker默认端口(2379)需启动daemon模式
查看docker默认信息
[root@linux-node1 ~]# docker -H 10.0.0.106 info
八、Docker登陆及nsente工具介绍
例如:我要新建一个qiuyuetao的容器,它的镜像是centos.他有三个参数,第一个是给容器起一个名称,-t 分配一个伪终端(tty)-i标准输入打开,我要在里面输入命令
温馨提示:容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了,不能exit,使用Ctrl +p+q 组合键即可退出。
如果我们执行创建容器的时候,里面没有我们指定的镜像,那么他会从dockerhub上进行下载然后在启动
8.1 exec 主要解决不进入docker,但能在docker中执行命令
8.2 使用nsenter工具连接容器
nsenter --target上面查到的进程id --mount --uts --ipc --net --pid #输入该命令便进入到容器中
解释nsenter指令中进程id之后的参数的含义:
保证容器中有多个进程存在,不会因为exit造成容器暂停
8.3 nsenter工具脚本登陆【自动化docker】
脚本内容如下:
[root@linux-node1 ~]# cat docker_in.sh
执行结果如下:
[root@d89fb8a7957b /]# #使用脚本登陆到容器内
8.4 当然使用exec 也可以不进入容器去看
基础内容就先介绍到这,后续会在使用方面更深入的了解

浙公网安备 33010602011771号