Docker容器技术概览

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 关于Docker容器技术的概览,包括Docker的优势、劣势、核心技术、容器所依赖的技术,以及Docker容器的管理和编排工具。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.Docker容器的优缺点

1>.Docker的优势

  快速部署:  
    短时间内可以部署成百上千个应用,更快速交付到线上 。

  高效虚拟化:  
    不需要额外的hypervisor支持,直接基于linux实现应用虚拟化,相比虚拟机大幅提高性能和效率。

  节省开支:  
    提高服务器利用率,降低IT支出。  
  简化配置:  
    将运行环境打包保存至容器,使用时直接启动即可。

  快速迁移和扩展:  
    可跨平台运行在物理机,虚拟公有云等环境,良好的兼容性可以方便将应用从A宿主机迁移到B宿主机,甚至是A平台迁移到B平台。

2>.Docker的劣势

  隔离性:
    各应用之间的隔离不如虚拟机彻底,因为同一台宿主机所有Docker的容器公用宿主机内核。

二.Docker容器的核心技术刨析

1>.容器规范

  除了docker自带的docker容器管理技术,还有CentOS的rkt,还有阿里的Pouch,为了保证容器生态的标准性和健康可持续发展,包括Linux基金会,Docker,微软,红帽,谷歌和IBM等公司在2015年6月共同成立了一个叫open container(OCI)的组织,其目的就是制定开放标准容器规范。

  OCI一共发布了两个规范,发布了两个规范,分别是 分别是runtime spec和 image format spec。有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。

2>.容器runtime

  runtime是真正运行容器的地方。因此为了运行不同的容器,runtime需要和操作系统内核紧密合作以便为容器提供相应的运行环境。  

  目前主流的三种runtime:  
    lxc:  
      Linux上早期的runtime,Docker早期就是采用lxc作为runtime。  
    runc:  
      目前Docker默认的runtime,runc遵守OCI规范,因此可以兼容lxc,目前runc已经是docker生成环境使用的标准,包括阿里巴巴开源的pouch也是使用的runc。  
    rkt:  
      是CentOS开发的容器runtime,也符合OCI规范,所以使用rktruntime也可以运行Docker容器。

root@docker101:~# hostname
docker101.yinzhengjie.org.cn
root@docker101:~# 
root@docker101:~# uname -r
4.15.0-74-generic
root@docker101:~# 
root@docker101:~# uname -m
x86_64
root@docker101:~# 
root@docker101:~# docker info                                           #注意观察"Default Runtime"对应的值为"runc"
Client:
 Debug Mode: false

Server:
 Containers: 2
  Running: 2
  Paused: 0
  Stopped: 0
 Images: 2
 Server Version: 19.03.5
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 4.15.0-74-generic
 Operating System: Ubuntu 18.04.3 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.83GiB
 Name: docker101.yinzhengjie.org.cn
 ID: H7TH:LMVR:XQ66:F3JN:ALFO:2XKR:6W7W:MIRF:ZY6K:QAPJ:ZCA7:GD4B
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://tuv7rqqq.mirror.aliyuncs.com/
 Live Restore Enabled: false

WARNING: No swap limit support
root@docker101:~#

root@docker101:~# docker info                          #注意观察"Default Runtime"对应的值为"runc"

[root@docker201.yinzhengjie.org.cn ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@docker201.yinzhengjie.org.cn ~]# 
[root@docker201.yinzhengjie.org.cn ~]# uname -r
3.10.0-957.el7.x86_64
[root@docker201.yinzhengjie.org.cn ~]# 
[root@docker201.yinzhengjie.org.cn ~]# uname -m
x86_64
[root@docker201.yinzhengjie.org.cn ~]# 
[root@docker201.yinzhengjie.org.cn ~]# pouch info              #注意观察"Default Runtime"的属性值
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
ID: 
Name: docker201.yinzhengjie.org.cn
Server Version: 1.3.0
Storage Driver: overlayfs
Driver Status: []
Logging Driver: json-file
Volume Drivers: [local tmpfs]
Cgroup Driver: cgroupfs
Default Runtime: runc
Runtimes: runc
runc: <nil>
containerd: <nil>
Security Options: [seccomp selinux]
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: "CentOS Linux 7 (Core)"
OSType: linux
Architecture: amd64
HTTP Proxy: 
HTTPS Proxy: 
Registry: https://index.docker.io/v1/
Experimental: false
Debug: false
Labels:
  node_ip=192.168.6.201
  SN=VMware-56
CPUs: 2
Total Memory: 3.683GiB
Pouch Root Dir: /var/lib/pouch
LiveRestoreEnabled: true
LxcfsEnabled: false
CriEnabled: false
Daemon Listen Addresses: [unix:///var/run/pouchd.sock]
[root@docker201.yinzhengjie.org.cn ~]# 

[root@docker201.yinzhengjie.org.cn ~]# pouch info              #注意观察"Default Runtime"的属性值

[root@docker201.yinzhengjie.org.cn ~]# pouch info              #注意pouch观察"Default Runtime"的属性值为"runc"

3>.容器管理工具

  管理工具连接runtime与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给runtime执行。  

  lxc是lxd的管理工具。  

  runc的管理工具是docker engine,docker engine包含后台deamon和cli两部分,大家经常提到的docker就是指的docker engine。  

  rkt的管理该工具就是rkt cli。

root@docker101:~# docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:29:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:22 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
root@docker101:~# 
root@docker101:~#

root@docker101:~# docker version

4>.容器定义工具

  容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存,共享和重建。

  docker image:
    是docker容器的模板,runtime依据docker image创建容器。

  dockerfile:
    包含N个命令的文本文件,通过docker创建出docker image。

  ACI(App container image):
    与docker image类似,是CentOS开发的rkt容器的镜像格式。

5>.Registry

  统一保存镜像而且是多个不同镜像版本的地方,叫做镜像仓库。

  Image registry:
    docker官方提供私人仓库部署工具,由于它没有提供友好的管理界面,因此使用的人较少,生产环境中更多人愿意使用Harbor。

  Docker hub:
    docker官方的公共仓库,已经保存了大量常用镜像,可以方便大家直接使用。

  Harbor:
    vmware提供的自带web界面自带认证功能的镜像仓库,目前很多公司使用。

6>.编排工具

  当多个容器在多个主机运行的时候,单独管理容器是相当复杂而且很容易出错,而且也无法实现动态伸缩的功能。  

  因此需要有一种工具可以实现统一管理,动态伸缩,故障自愈,批量执行等功能,这就是容器编排引擎。

  容器编排通常包括容器管理,调度,集群定义和服务发现等功能,常见的容器编排工具如下:
    Docker swarm:
      docker开发的容器编排引擎,目前使用较少。
    Kubernetes:
      Google领导开发的容器编排引擎,内部项目为Borg,且其同时支持docker,CoreOS和pouch。目前是主流,它已经击败了"Docker swarm"和"Mesos+Marathon"的使用量。
    Mesos+Marathon:
      通用的集群资源调度平台,mesos(资源分配)与marathon(容器编排平台)一起提供容器编排引擎功能,目前使用较少。

三.Docker容器所依赖的技术刨析

1>.容器网络

  docker自带的网络docker network仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如calico,flanel等。

2>.服务发现

  容器的动态扩容性决定了容器IP也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes自带服务发现功能,需要结合kube-dns服务解析内部域名。

3>.容器监控

  开源通过原生命令"docker ps/top/stats"等命令查看容器运行状态,另外也可以使用heapster/Prometheus等第三方监控容器的运行状态。

4>.数据管理

  容器的动态迁移会导致其在不同的HOST之间迁移,因此如何保证与容器相关的数据也能随时迁移或随时访问,开源使用逻辑卷/存储挂载等方式解决。

5>.日志收集

  docker原生的日志查看工具docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
157 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
4天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
18 4
|
19天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
60 3
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
66 7
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
55 4
|
25天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
59 3
|
25天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
31 2
|
25天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
43 1