Docker是一个公司名称,它的产品也叫Docker。一般来说,当提到Docker的时候,指的是容器化技术,用来创建和使用linux容器,借助Docker,可以将这些容器当作轻巧灵活的虚拟机来使用,实现对容器的创建、部署和复制。
第一次接触Docker时的一些概念好像过了好久才慢慢理解,so现在拿出来整理一遍。
Docker的原理
Docker使用了linux内核和内核功能来分隔进程,使得各个进程相互独立运行,各个系统在独自的进程来运行,保证了独立性和安全性。
相比传统的linux容器
传统的linux容器使用init系统来管理多进程,所有应用都作为一个整体运行,但Docker让应用各自独立运行进程。如下图:
RedHat上的一张图是这样表示的:
相比vm
Docker并非虚拟机。Docker利用的是宿主机的系统内核(直接利用资源),应用之间的隔离级别是进程级的,可以做到几秒钟之内创建大量容器。而虚拟机的启动是分钟级的,采用hypervisor的隔离策略,隔离级别是操作系统级的,直观上看,vm比docker外层多了一层guest os。
Docker的几个重要概念
镜像 images
- 一个包含了应用程序和其运行时依赖环境的只读文件,用于构建容器
- 升级:每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中,当升级到某个程序到新的版本,一个新的层会被创建,不需要替换原先的镜像
容器 containers
- 从镜像创建的实例,镜像和容器的关系,就像类和实例的关系
- 一个容器是一个独立的应用平台,用来运行应用
- 运行实例的两种方式:交互型(前台运行,可以通过控制台与容器交互。如果创建该容器的终端被关闭,则容器就变为停止状态),后台型(后台运行,创建启动之后就与终端无关,需要用 docker stop 或 docker kill 来终止,或者 docker logs 查看运行中的输出)
仓库 registeries
- 保存镜像的仓库,类似于代码仓库
- 分为公有和私有,公有:Docker Hub,有很多镜像可以直接使用
Docker常用命令
拉取镜像
|
|
查看本地镜像
|
|
删除本地镜像
|
|
创建一个新的容器并运行一个命令 docker run
|
|
运行一个镜像1docker run [image-name] –d –p 8080:8080 –e KEY=‘VALUE’
“-d” 后台运行容器
“-p” 指定端口映射
“-e” 添加环境变量1docker run [image-name] –v /my/own/datadir:/container/dir
“-v” 挂载宿主机的指定目录 ( 或文件 ) 到容器内的指定目录 ( 或文件 )
查看运行中的容器
|
|
删除容器
|
|
关闭和启动容器
|
|
在运行的容器中执行命令 docker exec
|
|
Kubernetes
K8S,对容器进行编排的工具,也就是一个容器集群管理系统,主要职责是启动容器,自动化部署,扩展和管理容器应用,回收容器。