Docker的基本组成
- Docker Client 客户端
- Docker Daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- Docker Registry 仓库
Docker客户端/守护进程
- C/S架构
- docker客户端对服务器的访问: 本地/远程
- docker客户端向发送给守护进程请求,守护进程的执行结果还会传回给客户端。
Docker Image镜像
- 构建和打包阶段。
- 容器的基石,相当于保存了容器运行需要的源代码。
- 层叠的层叠文件系统。 bootfs(引导文件系统)-> rootfs(Ubuntu) -> add emacs -> add Apache
- 联合加载(union mount):一次加载多个文件系统(add Apache,add emacs),将所有文件系统叠加在一切。镜像可以叠加在一起,位于底部的成为基础镜像(rootfs),add emacs(副镜像)。
Docker Container容器
- 通过镜像启动。
- 启动执行阶段。
- 配置数据和镜像层(bootfs -> ······ -> add emacs) -> 可写层。
- 写时复制:docker出现变化时都会应用到可写层,先从只读镜像层复制到可写层然后只读层的文件被隐藏。
Docker Registry仓库
- 保存docker镜像。
- 分为公有和私有。公有:Docker Hub
图示结构
Docker:
Docker Image:
Docker Container:
docker基本指令
查找镜像
1
docker search tutorial
下载镜像
1
docker pull learn/tutorial
启动一个容器,使用echo命令输出hello world
1
docker run learn/tutorial echo 'hello world'
启动一个容器下载ping
1
docker run learn/tutorial apt-get install -y ping
查看有哪些容器
1
docker ps -l
提交容器,即创建一个新的镜像
1
docker commit [docker ID] learn/ping
用新镜像建立一个容器
1
docker run learn/ping ping www.baidu.com
查看容器信息
1
docker inspect [docker ID]
查看有哪些镜像
1
docker image
将镜像保存到docker hub上
1
docker push /learn/ping
Docker容器相关技术简介
Docker依赖的Linux内核特性
Namespaces 命名空间
提供了系统资源的隔离,for轻量级虚拟化服务
五种命名空间:- PID 进程隔离
- NET 管理网络接口
- IPC 管理跨进程通信的访问
- MNT 管理挂载点
- UTS 隔离内核和版本标识
Control groups 控制组
- 资源限制(内存上限等)
- 优先级设定(设定哪些进程组使用哪些资源)
- 资源计量
- 资源控制(挂起恢复)
Docker容器的能力
- 文件系统隔离:每个容器都有自己的root文件系统
- 进程隔离: 每个容器都运行在自己的进程环境中
- 网络隔离: 容器间的虚拟网络接口和IP地址都是分开的
- 资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器