Docker的基本概念填坑
Docker的基本概念填坑
1. Docker的基本组成
- Docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- Docker Container容器
- Docker Registry仓库
Docker是C/S架构的程序。Docker客户端向Docker的服务器端(也就是守护进程)发出请求,守护进程处理完所有工作并返回结果。Docker客户端对服务器的访问既可以在本地,也可以通过远程。
Docker Image镜像是一个层叠的只读文件系统,例如
它的最低端是个引导文件系统bootfs(就像典型代表的linux引导文件系统),Docker用户永远不会跟底层文件系统有交互
Docker文件系统第二层是rootfs文件系统,位于bootfs之上,可以是一种或者多种的操作系统,比如ubuntu或者centos。在Docker里rootfs永远是只读状态。<————-基础镜像
并且Docker会利用联合加载技术(union mount)在rootfs之上加载更多的只读文件系统。联合加载指的是一次加载多个文件系统,但是在外面看起来只能够看到一个文件系统。联合加载会将对各层文件系统叠加到一起,这样最终的文件系统会包含所有的底层文件和目录。
Docker Container容器通过镜像启动
当镜像启动的时候,就用刚才我们介绍的镜像文件的结构,Docker会在镜像文件的最顶层加载一个读写结构——可写层。当文件系统发生变化,这些变化都会应用到这一层上。比如想要修改一个文件,首先会从下面的只读层复制到读写层,然后再修改。该文件的只读版本依然存在,但是会被修改后的版本所隐藏——这就是Docker中的一个重要机制写时复制(copy on write)。
Docker Registry仓库,分为:公有、私有。Docker公司提供一个公有的仓库,叫做Docker Hub,我们可以在其上面注册账号,分享并保存自己的镜像。
Docker在线演示地址:
基本操作:
1.docker version #查看Docker的版本2.docker search tutorial #通过仓库查找一个叫tutorial的镜像文件3.docker pull learn/tutorial #下载该镜像文件,这里的镜像文件名就是上一步在仓库中查找到的镜像文件名,它包含了用户名和镜像名4.docker run learn/tutorial echo ‘hello world‘ #通过run命令启动一个容器,并且输出‘hello world‘5.docker run learn/tutorial apt-get install -y ping #在容器中安装ping命令6.docker ps -l #用ps命令来查看有哪些容器7.docker commit id编号 learn/ping #对新更改的容器保存为一个镜像,learn/ping是新名字8.docker run learn/ping ping www.google.com #在新保存的容器中运行ping谷歌的网站9.docker inspect id编号 #查看容器信息10.docker images #查看有哪些镜像文件11.docker push learn/ping #将镜像文件保存到docker hub上
2. Docker容器的相关技术简介
Docker依赖于Linux内核特性:
- Namespaces 命名空间
- Control groups (cgroups) 控制组
Namespaces命名空间
1.编程语言2. 封装------->代码隔离3.操作系统4. 系统资源的隔离(进程、网络、文件系统....)
对于Docker来说,它使用了5种命令空间:
- PID(Process ID) 进程隔离
- NET(Network) 管理网络接口
- IPC(InterProcess Communication) 管理跨进程通信的访问
- MNT(Mount) 管理挂载点
- UTS(Unix Timesharing System) 隔离内核和版本标识
Docker利用Control groups控制组,用来分配资源。
cgroups功能:
- 资源限制
- 优先级设定
- 资源计量
- 资源控制
这两个特性带给Docker容器哪些能力?
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离:每个容器都运行在自己的进程环境中
- 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器