《Docker技术入门与实战:第一部分》思维导图+文字补充读书笔记

《Docker技术入门与实战》第一部分的读书笔记,思维导图+文字笔记补充。啃书整理。

什么是Docker

Docker是2013年由dotCloud公司基于go语言实现的云开源项目,目前已有多个相关项目,并已形成了自己的生态体系,dotCloud公司也改名为Docker Inc,专注于Docker相关技术和产品的开发。
对于Docker的任务目标,杨保华先生在《Docker技术入门与实战》中是这样写的:

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,即通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)等生命周期的管理,达到应用组件级别的“一次封装、到处运行”。

这上面所属的应用组件,既包括web应用,也包括数据库服务,甚至包括一个操作系统或编译器。Docker提供了高效、敏捷轻量级的容器方案,支持在多种主流云平(PaaS)和本地系统上部署,为应用的开发和部署提供了一站式的解决方案

Linux容器技术

Docker引擎的基础是Linux容器,简称为LXC,IBM对容器技术的描述如下:

容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在鼓励的组织间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化和系统调用替换中的复杂性

Linux容器技术不是新鲜事物,最早可以追溯到1982年,在Docker出现前,已经有许多公开发布的容器技术日臻成熟完善,但始终没有被集成到主流的Linux内核中,使用不方便。在此背景下,LXC项目借鉴前人成熟的容器设计理念,立足于一系列新的内核特性,实现了更具扩展性的虚拟化容器方案,并最终被集成到Linux内核中,成为Linux系统轻量级容器技术的事实标准。

从Linux容器到Docker

简单理解,Docker容器相当于一个沙盒,每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以简历通信机制。容器的创建和停止十分迅速,容器自身对资源的需求也十分有限,远低于虚拟机。通常可以直接把容器当做应用本身

为什么使用Docker

Docker容器虚拟化的好处和优势

原有的程序部署需要开发人员在服务器上下载安装各种应用配置,比如基于LAMP(Linux+Apache+MySQL+PHP)组合来运维一个网站,自然是先要安装后三者以及它们各自运行所依赖的环境,之后进行配置,配置完成后还需要进行功能测试,一旦服务器需要迁移则又要重头来过,非常麻烦。
如果使用Docker,则等于应用通过容器来打包,迁移时只需要在新的服务器上启动需要的容器即可。
具体优势概括如下:

  1. 更快速的交付和部署
  2. 更高效的资源利用
  3. 更轻松地迁移和扩展
  4. 更简单的更新管理

Docker和虚拟机的比较

Docker除了运行容器中的应用外,基本不消耗额外的系统资源,保证应用性能的同时减小系统开销。传统虚拟机方式运行N个不同应用需要启动N个虚拟机,每个虚拟机又要单独分配独占的内存、磁盘等济源,从性能上Docker就比虚拟机高效许多。
隔离性上,传统虚拟机多了一层额外的隔离,而Docker利用Linux系统上的多种防护机制实现了严格可靠的隔离,1.3版本开始Docker便引入了安全选项和镜像签名机制,极大地提高了Docker的安全性。
下表是杨保华先生《DOcker技术入门与实战》中Docker容器技术与传统虚拟机技术的特性比较表:

特性容器虚拟机
启动速度秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个
隔离性安全隔离完全隔离

虚拟化与Docker

此段基本搬运杨保华先生《Docker技术入门与实战》中的文字,缩减了一些表述。

虚拟化技术是一个通用的概念,在不同的领域有不同的理解,在计算领域,一般指的是计算虚拟化,即服务器虚拟化。维基百科定义如下:

在计算机技术中,虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破是体结构件的不可切割现象,使用户可以用比原本的组态更好的方式来应用这些资源

虚拟化的核心是对资源进行抽象。个人理解是好比一个没有隔层的束口袋,用户可以自己用其他收纳袋收纳不同种类的东西后再放进束口袋中,将原本不可切割的资源分配成块来使用。虚拟化的好处是提高系统资源的利用率、降低成本和容错容灾
虚拟化也划分为基于硬件的虚拟化基于软件的虚拟化,前者不多见,后者则可以从其对象所在的层次,更进一步细分为应用虚拟化平台虚拟化平台虚拟化即是通常说的虚拟机技术。导图整理如下
b3d4b2f00121d8f7167dfeffabe54af7.png

Docker的安装与核心概念

安装

我自己是先看了腾讯课堂中一个Linux运维课程里《部署docker容器虚拟化平台》后,
参考这篇Linux系统下载安装Docker的文章进行下载安装的:docker简介和linux下安装

核心概念

  • 镜像
  • 容器
  • 仓库

思维导图

Docker核心概念

文字补充

创建和使用私有仓库

安装docker后可以通过官方提供的registry镜像搭建一套本地私有仓库:
docker run -d -p 5000:5000 registry
这会自动下载并启动一个registry容器,创建本地的私有仓库服务。可以通过-v参数来将镜像文件存放在本地的指定路径上。下面是一个将上传的镜像放到/opt/data/registry目录下:
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
此时,在本地会启动一个私有仓库服务,监听端口为5000。

管理私有仓库镜像时,可以先把一个镜像标记其名为“内网ip:端口号/test”,如下:
docker tag registry:1.1 172.16.57.97:5000/test
然后push上传这个镜像。
如果出现以下错误,说明要修改daemon.json文件,在/etc/docker/目录下,

[root@izwz9asdnts5qezib2olscz ~]# docker push 172.16.57.97:5000/test
The push refers to repository [172.16.57.97:5000/test]
Get https://172.16.57.97:5000/v2/: http: server gave HTTP response to HTTPS client\

我这边没有,查了下说是要自己创建,复制博文里的参数,使用vi创建一个文件Docker配置文件 - daemon.json

关于私库创建管理的参考文章:Docker私库搭建和使用

数据管理

思维导图

数据管理

文字补充

数据卷容器

此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其他容器都可以看到,例如,在dbdata容器中创建一个test文件

cd /dbdata
touch test
ls

在db1容器中查看它

docker run it --volumes-from dbdata --name db1 ubuntu
ls
ls dbdata/

可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷

docker run -d -name db3 --volumes-from db1 training/postgres

注意: 使用–volumes-from db1 training/postgres参数所挂载的数据卷的容器自身并不需要保持在运行状态
如果删除了挂载的容器,数据卷并不会被自动删除,如果要删除一个数据卷,必须在删除最后一个还挂载这它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。

网络基础配置

思维导图

网络基础配置

文字补充

Docker在两个互联的容器之间创建了一个安全隧道,不用映射端口到宿主主机上。启动db容器时没有使用-p和-P标记,从而避免了暴露数据库端口到外部网络上。
Docker使用两种方法为容器公开连接信息:环境变量;更新/etc/hosts文件
env命令可以查看web容器的环境变量

docker run --rm --name web2 --link db:db training/webapp env

使用Dockerfile创建镜像

思维导图

使用Dockerfile创建镜像

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值