docker 原理
几个重要的概念
- Docker镜像 (Docker images)。
- Docker仓库 (Docker registeries)。
- Docker容器(Docker containers)。
运行一个容器会执行那些操作
不论你使用docker命令或者是RESTful API,Docker客户端都会告诉Docker守护进程运行一个容器。
$ sudo docker run -i -t ubuntu /bin/bash
-
命令分析。Docker客户端使用docker命令来运行,run参数表名客户端要运行一个新的容器。Docker客户端要运行一个容器需要告诉Docker守护进程的最小参数信息是:
- 这个容器从哪个镜像创建,这里是ubuntu,基础的Ubuntu镜像。
- 在容器中要运行的命令,这里是/bin/bash,在容器中运行Bash shell。
- 那么运行这个命令之后在底层发生了什么?
-
按照顺序,Docker做了这些事情:
- 拉取ubuntu镜像: Docker检查ubuntu镜像是否存在,如果在本地没有该镜像,Docker会从Docker Hub下载。如果镜像已经存在,Docker会使用它来创建新的容器。
- 创建新的容器: 当Docker有了这个镜像之后,Docker会用它来创建一个新的容器。
- 分配文件系统并且挂载一个可读写的层: 容器会在这个文件系统中创建,并且一个可读写的层被添加到镜像中。
- 分配网络/桥接接口: 创建一个允许容器与本地主机通信的网络接口。
- 设置一个IP地址: 从池中寻找一个可用的IP地址并且服加到容器上。
- 运行你指定的程序: 运行指定的程序。
- 捕获并且提供应用输出: 连接并且记录标准输出、输入和错误让你可以看到你的程序是如何运行的。
- 你现在拥有了一个运行着的容器!从这里开始你可以管理你的容器,与应用交互,应用完成之后,可以停止或者删除你的容器。
docker 基础操作
- 略
docker images
- 不要试图修改你的镜像,并保存的你的镜像,虽然可以这样做, 但这样很low。推荐做法是修改docker file 然后重新生成的你的镜像