一、Docker基础
什么是容器?
容器是软件的标准单元, 它打包代码及其所有依赖项, 以便应用程序能够快速、可靠地从一个计算环境运行到另一个计算环境。Docker 容器映像是一个轻量级的独立可执行软件包, 其中包括运行应用程序所需的一切: 代码、运行时、系统工具、系统库和设置。
什么是LXC?
LXC通过linux namespaces➕chroot➕cgroups实现。
其创建容器的过程是先创建一个空的用户空间,在切换根目录到用户空间内,通过定义的模版下载并创建用户进程,通过cgroups为进程分配资源
Docker是什么?
Docker是基于Go语言实现的云开源项目,是一个开源的应用容器引擎,遵从Apache2.0协议开源。Docker是LXC的二次封装发行版,docker提供了各种容器管理工具让用户无需关注底层的操作,可以简单明了的使用容器。
Docker能做什么?
docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使开发者可以打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker的优势
1、应用的快速交付和部署
2、系统资源的高效利用
3、可扩展,可迁移
4、更简单的更新管理
Docker与传统虚拟机比较
1、docker容器很快,启动和停止可以在秒级实现
2、docker容器使用的系统资源很少,一台主机可同时运行千个docker容器
3、docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低
4、docker通过dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率
Docker 架构
Docker的角色
Docker Image
Docker 镜像是一个面向docker引擎的只读模版,类似于虚拟机的镜像;docker镜像是创建容器的基础,用户可以在网上下载使用,也可以自行定制镜像。镜像文件内包含文件系统且只读。
Docker 镜像采用分层构建机制,最底层为bootfs,之上为rootfs
bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
rootfs:位于bootfs之上,表现为docker容器的根文件系统
传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂在为读写模式
docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层
Docker image layer
位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)
最上层为“可读写”层,其下的均为“只读”层
联合挂载技术
Docker 最初使用aufs(advanced multi-layered unification filesystem 高级多层统一文件系统)来实现联合挂载,在docker3.18版本以后linux内核中加入了overlayfs,但aufs目前仍作为存储后端之一来支持。docker的分层镜像,除了aufs和overlayfs,docker还支持btrfs,vfs和devicemapper等;Ubuntu默认使用aufs,而在CentOS7上,用的是devicemapper。
Docker Container
docker容器是从镜像创建的应用运行实例,用户可以管理和使用容器;与镜像所不同的是,容器带有额外的可写文件层;因为docker容器使用沙箱机制,所以容器间相互隔离,互不可见的。
Docker Registry
Docker 注册服务器是存放docker仓库的的具体服务器,仓库一般为一个具体的项目或目录。启动容器时,docker daemon会试图从本地获取相关的镜像,本地镜像不存在时,会从registry中的repository里下载该镜像保存到本地
Docker Registry 分类
Registry 用于保存docker镜像,包括镜像的层次结构和元数据
用户可自建registry,也可使用官方提供的docker hub
○ Sponsor Registry:第三方的registry,供客户和docker社区使用
○ Mirror Registry:第三方的registry,只供客户使用
○ Vendor Registry:由发布docker镜像的供应商提供
○ Private Registry:通过设有防火墙和额外的安全层的私有实体提供
Docker Registry 的组成
Index:维护用户账户、镜像的校验以及公共命名空间的信息,相当于为Registry提供了一个完成用户认证等功能的检索接口
Repository :镜像仓库,一个Registry中可以存在多个Repository
Docker Repository
由特定的docker镜像的所有迭代版本组成的镜像仓库;Repository可分为“顶层仓库”和“用户仓库”,用户仓库名称格式为“用户名/仓库名”;每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
二、安装
2.1、Docker-ce repo文件下载
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
将repo文件放在yum.repos.d目录下
2.2、yum安装
yum install docker-ce
2.3、启动docker
systemctl start docker
三、Docker常用命令
3.1、Docker容器状态
3.2、镜像基本操作
搜索镜像(默认在官方docker hub仓库中搜索)
docker search busybox
拉取镜像
docker image pull busybox
列出本地镜像
docker image ls
移除镜像
docker image rm busybox
获取镜像的详细信息
docker inspect busybox
3.3、容器基本操作
创建并启动容器
docker container run --name d1 -it --rm busybox:latest
停止容器
docker container stop d1
强制停止容器
docker container kill d1
删除容器
docker container rm d1
查看容器运行状态
docker container stats d1
列出容器
docker container ls
暂停容器
docker container pause d1
取消暂停容器
docker container unpause d1
列出容器的详细信息
docker container inspect d1
参考文章:
Docker技术入门与实战
docker 官方文档:https://docs.docker.com/
马哥docker.pdf