docker主页
地址:https://www.docker.com/
什么是容器?
容器是一种虚拟化的方案,与传统的虚拟机不同
传统的虚拟机通过中间层将虚拟机虚拟运行在物理硬件之上
容器则是直接运行在用户空间的
Docker的运行依赖于Linux的内核特性:Namespace和Cgroups
所以Docker上只能运行Linux系统,而不能运行Windows系统
什么是docker?
docker是一个能够把开发的应用程序自动部署到容器的开源引擎
docker源码的地址是:https://github.com/moby/moby
docker的组成?
docker是CS架构的程序,docker的客户端向docker的服务器端,也就是docker的守护进程发出请求,守护进程处理完所有的工作并返回结果。docker对服务器的访问,既可以是本地的,也可以是远程的。
镜像可以简单地理解为容器的源代码,docker的镜像是一个层叠的只读文件系统,其最底端是一个引导文件系统bootfs,这个我们平时不会和它交互;第二层是root文件系统rootfs,rootfs可以是一种或多种的操作系统,在传统的Linux引导过程中,root会先以只读的方式加载,当引导结束并完成了完整性检查后,才会被切换为读写模式。但在docker中,root文件系统永远只能是只读状态,并且docker利用联合加载技术(union mount)又会在root文件系统之上,加载更多的只读文件系统,联合加载的意思就是,一次加载多个文件系统,然后将各层文件系统叠加到一起,让最终的文件系统包含所有的底层文件和目录,docker将这样的文件系统称为镜像
一个镜像可以放在另外一个镜像的顶部,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像,也就是root文件系统
容器通过镜像启动,docker的容器是docker的执行单元,容器中可以运行客户的一个或多个进程
当一个容器启动时,docker会在该镜像的最顶层加载一个读写文件系统,我们在docker中运行的程序,就是在这个层中执行的
当docker第一次启动一个容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上
比如要修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层,该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏,这就是docker中的一个重要技术,写时复制(copy on write)
当创建一个新容器时,docker会创建一个镜像栈,在栈的最顶层添加这个读写层
docker用仓库来保存用户构建的镜像
仓库分为公有和私有两种
公有的就是Docker HUB,我们可以在这个上面分享和保存自己的镜像,也可以在上面查找我们需要的镜像,节省自己构建的时间
查看docker版本
Ubuntu下安装docker
首先检查内核版本:
uname -a
检查Device Mapper
ls -l /sys/class/misc/device-mapper
Ubuntu下Docker的安装有两种方式,一种是Ubuntu维护的docker,这个版本比较旧,不推荐使用这个安装方式
还有一种就是用docker官方自己维护库进行安装
下面介绍第二种方法
首先检查APT的HTTPS是否支持,也就是查看这个路径下是否有http文件的存在
然后用curl执行脚本安装:
curl -sSL https://get.daocloud.io/docker | sh
安装完成后查看docker的版本:
sudo docker version
docker的基本操作
IMAGE指定启动容器所使用的操作系统镜像,后面的COMMAND和ARG是指容器执行的命令和其参数
新增加参数-i和-t,并在容器启动时运行bash命令
-i告诉守护进程,始终打开标准输入
-t表示docker,要为创建的容器分配一个伪tty终端
这样新创建的容器才能提高一个可交互式的shell
-a 表示列出所有容器
-l 表示列出最新创建的容器
第一列是docker的守护进程在启动容器时为容器分配的唯一ID
最后一列是docker为容器自动分配的名字
查看之前建立的容器
inspect命令会对容器进行详细的检查,包括名称、命令、网络配置以及一些其他的数据
-i 参数表示可以用交互的方式