先看别人这博客,有一个大致了解:Docker和k8s的区别与介绍 - 我要向前走 - 博客园 (cnblogs.com)
1、Docker核心概念
1.1 Docker设计目标(Docker思想来源于集装箱):
1)提供简单的应用程序打包工具(将应用打包,放在其他地方可以运行)
2)开发人员和运维人员职责逻辑分离;
现开发人员工作:
- 开发项目
- 打包项目环境+代码 成镜像
- 部署到容器平台
运维人员工作:怎么高效的去管理这些容器,比如:监控、日志、怎么开发出傻瓜工具方便自动化部署。
好处:
- 运维人员节省人工成本
- 持续发布有问题更快解决,更好服务开发人员
3)(开发环境、测试环境、生产环境)多环境保持一致性
1.2 容器VS虚拟机:
容器之间的隔离是抽象隔离,是逻辑隔离,可以理解为电脑中进程之间的隔离;虚机之间的隔离是用操作系统进行了隔离。容器应该主要是解决应用层面的问题,虚拟机应该主要解决基础资源的问题。
1.3 Docker应用场景:
1)应用程序打包和发布
2)应用程序隔离
3)持续集成
4)部署微服务(将大的服务拆分成很多小的微服务,小的服务独立部署,独立数据库,升级时升级小服务就好,影响面小)
5)快速搭建测试环境(直接拉镜像,启动即可)
6)提供PaaS产品(平台即服务)
1.4 Docker安装:
官网:Empowering App Development for Developers | Docker
文档:Docker Documentation | Docker Documentation
分为企业版与社区版,这边安装社区版。
先看一下机器内核版本,再根据版本选择安装:
安装前最好先关防火墙(主要是关闭一些默认规则):
跟着官方文档指南,进行安装,因为我这Centos,所以参考https://docs.docker.com/engine/install/centos/#prerequisites,这里选择【Install using the repository】方式安装。
1、安装yum-utils包,提供yum-config-manager 实用程序 # yum install -y yum-utils 2、设置 #yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3、安装
#yum install docker-ce docker-ce-cli containerd.io
启动Docker:
# systemctl start docker
查看安装是否成功:
# docker info 查看信息
安装没问题后,设置一下开机自启动:
# systemctl enable docker
2、Docker镜像管理
2.1 镜像是什么
- 一个分层存储得文件,不是一个单一得文件
- 一个软件得环境
- 一个镜像可以创建N个容器
- 一种标准得交付
- 一个不包含Linux内核而又精简得Linux操作系统
可以理解为一个压缩包,包含了基础运行环境与源代码。
2.2 镜像从哪里来
1、来源于dockerhub(由 Docker 公司运行和管理的基于云的存储库。它是一个在线存储库,Docker 镜像可以由其他用户发布和使用。有两种库:公共存储库和私有存储库。如果你是一家公司,你可以在你自己的组织内拥有一个私有存储库,而公共镜像可以被任何人使用。)https://hub.docker.com/
因为是在线拉,且dockerhub地址在国外,所以可以根据需求先配置镜像加速器(实则就是配置一个国内得镜像仓库,而这个镜像仓库永远与dockerhub同步):
# vi /etc/docker/daemon.json (默认没有这个文件,直接VI创建写入)
保存后重启docker生效,如果docker因此有问题,肯定是文件内容写错了,英文下得标点符号。
2、可以本地/私有镜像仓库
2.3 镜像与容器的联系
容器是通过镜像创建的运行实例。一个镜像可以启用多个容器,多个容器之间是隔离的。
2.4 管理镜像常用命令
2.4 镜像存储核心技术:联合文件系统(UnionFS)
创建很多容器,却不怎么消耗磁盘空间,这是为什么?
创建一个容器,其实只是将基础镜像进行软链接(类似),所以只要容器中不加内容,即使基于一个镜像创建上百个容器,也不怎么影响磁盘空间。
比如右图中,基础镜像中file2修改,其实只是将file2复制到容器层,进行修改。
综上:
读文件:容器层->镜像层
修改文件:容器层->镜像层(从镜像层复制到容器层)
3、Docker容器管理
3.1 创建容器常用选项
# docker container exec -it 编号 bash
3.2 容器资源限制
默认创建的容器,使用宿主机所有资源,谁先抢到谁占用。
3.3 容器资源配额的扩容
docker update 更新容器配置
已创建的,修改配置,只支持部分修改。具体可以docker update --help
3.4 管理容器常用命令
3.4 容器实现核心技术:Namespace、CGroups
3.5 Docker核心组件之间关系
4、容器数据持久化
4.1 将数据从宿主机挂载到容器中的三种方式
根据2.4节所讲,容器删除,里面的数据就没有了。但是有时候容器中有些数据很重要,需要持久化(容器删除,数据还在)。