导读: 参加网易云微专业5个月有余,发现现在自己开始疲惫了,虽然课程进度没落下,但是也没深入学透彻,写博客是为了巩固知识,具体会从微专业第一堂课持续输出.
Docker网址: https://docs.docker.com/get-started/
这次输出内容为 Docker专题,都是从课堂上总结下来的知识点,自己有XMind的输入,主要分成
- docker简介
- Linux上的Docker安装
一/ Docker是什么?
Docker 是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器,开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括 VMs(虚拟机) / bare metal / OpenStack集群和其他的基础应用平台.
Docker通常使用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续继承 发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
二/ Docker的优势
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展
三/ Docker架构 (图取自 网易云课堂Java微专业课堂),请仔细理解每个单词作用,在后面的输出中,都会使用到
- 图中 image表示 docker镜像
操作系统分为内核和用户空间,对弈Linxu而言,内核启动后,会挂载root文件系统为其提供用户控件支持,而Docker镜像(Image),就相当于是一个root文件系统,比如官方镜像 centos:7.6 就包含了完整的一套centos 7.6最小系统的root文件系统
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序/ 库/ 资源/ 配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷/ 环境变量/ 用户等),镜像不包含任何动态数据,其内容在构建之后也不会被改变.
- Docker镜像分层存储
因为镜像包含操作系统完整的root文件系统,其体积往往是庞大的,因此在Docker设计时将其设计为分层存储的架构,镜像只是一个虚拟的概念,其实际提现并非由一个文件组成,而是一组文件系统组成,或者说,由多层文件系统联合组成.
镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层,在构建镜像的时候,需要额外的小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉.
分层存储的特征还是的镜像的复用/ 定制变得更为容易,甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像.
- Docker容器(Container)
镜像(Image)和容器(Container)的关系,就像是Java中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建/ 启动/ 停止/ 删除/ 暂停等.
容器也是采用分层存储,每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,可以成为这个容器运行时读写而准备的存储层为容器存储层,
容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡,因此,任何保存于容器存储层的信息都会随容器删除而丢失.
- Volume数据卷介绍
按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化,所有的文件写入操作,都应该使用 Volume数据卷/ 或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高.
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡,因此,使用数据卷后,容器删除或者重新运行之后,数据也不会丢失.
- Docker 仓库 (registries)
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其他服务器上使用这个镜像,就需要一个集中的存储/ 分发镜像的服务, Docker Registry 就是这样的服务,
一个Docker Registry 中可以包含多个仓库 (Repository);每个仓库可以包含多个标签(Tag); 每个标签对应一个镜像.
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就是常用于对应用软件的各个版本,可用通过 <仓库名>:<标签>的格式来指定具体是这个软件那个版本的镜像,如果不给出标签,将以 latest 作为默认标签,
以centos 镜像为例,centos是仓库的名字,其内容包含有不同的版本标签,如: 6.9/ 7.5, 我们可以通过 centos:6.9 或者 centos:7.5来具体指定所需那个版本的镜像,如果忽略了标签,比如centos, 那将视为centos:latest
仓库名经常以 两段式路径 形式出现,比如 study/nginx, 前者往往意味着Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名,但这并非绝对,取决于所使用的具体Docker Registry的软件或服务.
- Docker 仓库 私有镜像 private registry
Docker -Linux上的安装
官方安装指南地址: https://docs.docker.com/engine/installation/
- 系统要求
- Docker CE 支持64位版本CentOS 7,并且要求内核办恶补不低于3.10.
- 卸载旧版本
- sudo yum remove docker docker-common docker-selinux docker-engine
- 方式一: 使用 yum安装
- sudo yum install docker-ce
- 方式二: 使用脚本安装
- 在测试或开发环境中 Docker官方为了简化安装流程,提供了一套便捷的脚本安装,CentOS系统上可以使用这套监本安装
- curl -fsSL https://get.docker.com -o get-docker.sh
- sudo sh get-docker.sh --mirror Aliyun
- 执行这个命令后,监本就会自动的将一切准备工作做好,并且把Docker CE的 Edge版本安装在系统中
- 启动Docker CE
- sudo systemctl enable docker #设置开机启动
- sudo systemctl start docker
- 建立docker用户组
- 默认情况下,docker命令会使用 Unix socket 与Docker 引擎通讯,而只有root用户和docker组的用户才可以访问Docker引擎的Unix socket, 一版Linux 系统上不会直接使用 root 用户进行操作, 因此,需要将使用 docker 的用户加入docker用户组,
- sudo groupadd docker #建立docker组
- sudo uermod -aG docker $USER #将当前用户加入docker组
- 测试docker是否安装正确
- docker run hello-world #启动一个基于 hello-world 镜像的容器
- 若能正常输出信息,则说明安装成功
---------------------------------------------------------------------------------
因为第一次微专业课并没有对于 Docker有多少深入的理解, 在这里输入博客也是为了加深自己的理解, 今天输出到 安装