1、云计算服务类型
基础设施即服务LaaS
平台即服务(PaaS)
软件即服务(SaaS)
容器:本质就是进程,是未来云计算系统中的进程
容器是应用程序层的抽象,将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行,并与其他容器共享OS内核,每个容器在用户空间中作为隔离的进程运行。容器占用的空间少于VM,可以处理更多的应用程序,并且需要的VM和操作系统更少。
| 特性 | 虚拟机 | 容器 |
|---|---|---|
| 启动 | 分钟级 | 秒级 |
| 硬盘启动 | 一般为GB | 一般为MB |
| 性能 | 弱于 | 接近原生 |
| 系统支持量 | 一般几十个 | 单机支持上千个容器 |
2、Docker基本概念
Docker系统有两个程序:docker服务端和docker客户端
Docker服务端:
是一个服务进程,管理着所有的容器。
Docker客户端:
是docker服务端的远程控制器,可以用来控制docker的服务端进程。
docker的优势:
交付物标准化
Docker是软件工程领域的”标准化”交付组件,最恰到好处的类比是”集装箱”。
集装箱将零散、不易搬运的大量物品封装成一个整体,集装箱更重要的意义在于它提供了一种通用的封装货物的标准,卡车、火车、货轮、桥吊等运输或搬运工具采用此标准,隧道、桥梁等也采用此标准。以集装箱为中心的标准化设计大大提高了物流体系的运行效率。
传统的软件交付物包括:应用程序、依赖软件安装包、配置说明文档、安装文档、上线文档等非标准化组件。
Docker的标准化交付物称为”镜像”,它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。
一次构建,多次交付
类似于集装箱的”一次装箱,多次运输”,Docker镜像可以做到”一次构建,多次交付”。当涉及到应用程序多副本部署或者应用程序迁移时,更能体现Docker的价值。
应用隔离
集装箱可以有效做到货物之间的隔离,使化学物品和食品可以堆砌在一起运输。Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小。
总之,容器技术部署速度快,开发、测试更敏捷;提高系统利用率,降低资源成本。
(namespace(容器空间)、cgroups(资源限制)、rootfs(文件系统))
3、Docker三大核心组件:
docker镜像:Docker images
docker仓库:Docker registeries
docker容器:Docker containers
Docker仓库
用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。
公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
库:registry
公有库:
Docker-hub Daocloud ali 网易蜂巢
私有库:
公司内部使用(自己部署)
分类:
操作系统名称 centos ubuntu
应用名称 nginx tomcat mysql
Tag:
表示镜像版本
Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。
每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像。下层那个镜像是上层镜像的父镜像。
镜像名称:
仓库名称+镜像分类+tag名称(镜像版本)
完整镜像名称:
docker.io/nginx:v1
docker.io/nginx:latest
daocloud.io/centos:6
镜像ID:
64位的id号
基础镜像:
一个没有任何父镜像的镜像,谓之基础镜像。
注意:
Registry中镜像是通过Repository来组织的,Registry包含一个或多个Repository,而每个Repository又包含了若干个Image。
Docker 容器
Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。
docker安装步骤
如果已经安装过其他docker,则需要清理docker环境,
yum -y remove rpm -qa|grep docker #删除残留的docker
安装:
yum install -y yum-utils device-mapper-persistent-data lvm2 git
yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
启动docker,并设置开机自动启动:
systemctl start docker && systemctl enable docker
docker -v #查看当前docker版本
docker info #查看当前docker运行状态
国内镜像站
国外镜像站
登陆登出Docker Hub
login Register or log in to a Docker registry
登录到自己的Docker register,需有Docker Hub的注册账号
docker info #查看登录信息
docker logout #退出登录
docker pull imagename #下载镜像image
docker images #列出本地所有有效的镜像
docker run imagename #创建docker容器,docker run常用参数如下(运行态(Running)和退出态 (Exited))
• -v:文件映射,格式为:主机目录:容器目录
• -d: 后台运行容器,并返回容器ID;
• -i: 以交互模式运行容器,通常与 -t 同时使用;
• -p: 端口映射,格式为:主机(宿主)端口:容器端口
• -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
• —name=”nginx-lb”: 为容器指定一个名称;
• —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
• —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
• -h “mars”: 指定容器的hostname;
• -e username=”ritchie”: 设置环境变量;
• —cpuset-cpus=”0-2” or —cpuset-cpus=”0,1,2”: 绑定容器到指定CPU运行;
—privileged 以特权模式运行
docker容器启动特点:一个镜像可运行多个docker容器,并且每个容器间互不干扰,互不影响
当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。
容器的tags:
64字符(UUID由docker daemon生成)的十六进制的字符串来定义容器ID,它是容器的唯一标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。当然,我们还可以使用容器名。

如果在使用Docker时有自动化的需求,你可以将containerID输出到指定的文件中(PIDfile)类似于某些应用程序将自身ID输出到文件中,方便后续脚本操作。
—cidfile=”” #Write the container ID to the file
registry与repository的关系
Registry:注册服务器,用于管理镜像仓库,起到的是服务器的作用。
Repository:镜像仓库,用于存储具体的docker镜像,起到的是仓库存储作用。
由上图可以看出,注册服务器可以管理多个镜像仓库,这些镜像仓库中,按照不同的标签(Tag)和镜像名联合管理存储着各种各样的Docker镜像。
当一个镜像的名称不足以分辨这个镜像所代表的含义时,你可以通过tag将版本信息添加到run命令中,以执行特定版本的镜像。
Docker的使用
docker search centos #查询centos中的镜像
docker images #查看本地镜像
docker inspect imagename #查看镜像详情(相信信息很多,此图只是一部分)
docker rm 容器名/ID #删除容器(前提容器处于停止状态)-f:强制删除
docker rm docker ps -a -q #批量删除容器,-f:强制删除
docker rmi imagename #删除镜像(前提此镜像下不能有容器)-f:强制删除镜像
[root@xingdian ~]# docker rmi daocloud.io/library/mysql
强制删除:—force
如果镜像正在被使用中可以使用—force强制删除(如果删除镜像使用名字,则需要加上版本号tags,不然默认删除latest,如果版本号不是latest,进行删除的时候提示删除失败)
[root@xingdian ~]# docker rmi docker.io/ubuntu:latest —force
容器管理
查看容器:
只查看运行状态的容器:
[root@xingdian ~]# docker ps
[root@xingdian ~]# docker ps -a
-a 查看所有容器
只查看所有容器id:
[root@xingdian ~]# docker ps -a -q
列出最近一次启动的容器
[root@xingdian ~]#docker ps -l
运行容器:
停止容器:
docker stop container #停止容器
Docker镜像管理及制作
导出容器(快照)
docker export -o container.tar container #将container打包成为container.tar
docker import container.tar image:v1.2 #将打包好的容器导到镜像,并命名为image,版本号v1.2
