目录
注:此博客主要是对docker的认识和使用机制,hub.dockerd的基本使用(没有涉及到命令相关)
Docker它本身不是容器,而是容器的易用工具,容器是 linux 内核中的技术,Docker 只是把这种技术在使用上简易普及了。(简单来说制造镜像,便于我们使用,成本比较小)
1、Docker引擎
Docker 早期是基于 LXC 容器管理引擎实现,当后来成熟之后,Docker 自建了一个容器引擎叫 libcontainer,后来 CNCF 的介入,Docker 又研发了一个工业化标准的容器引擎 runC,目前所使用的新版 Docker,所使用的容器引擎就是 RunC
2、Docker和虚拟机的区别
传统虚拟机 | Docker容器 | |
磁盘占用 | 几个GB到几十个GB左右 | 几十MB到几百MB左右 |
CPU内存占用 | 虚拟操作系统非常占用CPU和内存,需要通过虚拟层调用占用率高 | Docker引擎占用资源极低,直接作用于硬件资源占用少 |
启动速度 | (从开机到运行项目)几分钟 | (从开启容器到运行项目)几秒 |
安装管理 | 需要专门的运维技术 | 安装、管理方便 |
应用部署 | 手动部署,速度慢 | 体系化部署,可以自动化,速度快 |
隔离性 | 系统级别 | 进程级别 |
封住程度 | 打包整个操作系统 | 打包项目代码和依赖信息 |
Docker为什么比虚拟机资源利用率高,启动快
docker 有比虚拟机更少的抽象层,docker 不需要 Hypervisor 实现硬件资源虚拟化,运行在 docker 容器上的程序直接使用的是实际物理机的硬件资源,因此在 cpu、内存利用率上 docker 将会在效率上有明显的优势。 docker 利用的是宿主机的内核,而不需要Guest OS,节省了 Guest OS 占用的资源
3、Docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建
- Docker仓库(Registry)
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub 供了庞大的镜像集合供使用
- Docker daemon
Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程
- Docker 客户端(Client)
Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信
- Docker 主机(Host)
一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
- Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板
- Docker 容器(Container)
容器是独立运行的一个或一组应用
注:创建镜像(Images)前,会先去daemon中找,能找到了直接用,找不到在去仓库里重新下载
4、Docker安装
各大平台支持条件,我们大多数友友 Centos或者Ubuntu的am64的
Server版本安装
4.1、Ubuntu安装
安装需要依赖
操作系统尽量Ubuntu18或者及以上
4.1.1、查看版本需求
CPU支持APM和X86_64 (可以先查看版本是否能对应上)
查看CPU
查看版本的
4.1.2、卸载历史版本
注:如果没有安装过,不用进行此步骤
卸载旧版本
卸载历史版本 (删除软件)
删除目录
4.1.3、配置docker下载源
4.1.4、自动启动配置
配置加载
启动服务
开启启动
查看服务状态
4.1.5、查看docker版本
4.2、CentOS安装
支持的操作系统
CentOS7、CentOS8、CentOS9
支持CPU ARM/X86_64
4.2.1、查看版本需求
CPU支持APM和X86_64 (可以先查看版本是否能对应上)
查看CPU
查看版本的
4.2.2、卸载旧版本
4.2.3、卸载历史版本
删除机器上的包
执行卸载
安装utils工具
4.2.4、自动启动配置
配置加载
启动服务
开启启动
查看服务状态
4.2.5、查看docker版本
5、Docker目录修改
注:如果就是为了使用镜像的话,就可以不用这个操作了,只是在公司中为了镜像太多,空间不够用的时候,提前准备好
Docker 默认的安装目录为/var/lib/docker,这里面会存放很多很多镜像,所以我们在安装的时候需要考虑这个目录的空间,有三种解决方案:
(1)将/var/lib/docker 挂载到一个大的磁盘,这种一般我们能控制挂载目录,像腾讯云这种云厂商在安装 K8s 的节点的时候提供了挂载选项,可以直接挂载这个目录过去
(2)安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空间比较大的磁盘了
(3)安装了 docker,然后发现忘了配置这个目录,我们需要修改 docker 的配置文件
假定我们磁盘的大的目录为/data
编辑配置文件
输入下面JSON格式内容
加载配置
重启docker
查看docker状态
6、镜像仓库工作机制
6.1、镜像仓库使用流程
玩docker:以后这个地方你会常来的,没有号的友友注册一个
通过docker login 登录仓库(前提是友友你已经注册过账号了)
docker pull 拉取需要的镜像
通过dockerfile或者commit 等方式制作完镜像通过docker push上传到仓库
6.2、实际开发中镜像仓库如何使用
Docker Registry 中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry 上保存,供其他人员使用,例如“部署”到生产环境
开发环境:开发人员使用的一套环境
测试环境:需求开发完成后,发布到供测试人员进行测试的环境
预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布
生产环境:真正面向客户的环境
6.3、镜像仓库的拉取机制
启动容器时, docker daemon 会试图从本地获取相关的镜像;本地镜像不存在时,其将从 Registry 中下载该镜像并保存到本地
7、常用镜像仓库
7.1、Docker Hub功能浏览
注:搜索你需要,为了找合适版本,以及稳定性 (尽量使用较为官方的)
7.2、镜像tag查找
也可以直接得拉取复制命令即可
对应版本拉取命令 (对应版本)
镜像的大小,id ,cpu
8、镜像仓库命令
注:主要操作仓库的命令
命令 | 别名 | 功能 |
docker login | 登录仓库 | |
docker pull | docker image pull | 拉取镜像 |
docker push | docker image push | 推送镜像 |
docker search | 查找镜像 | |
docker logout | 登出仓库 |
8.1、docker login
登录到一个docker镜像仓库,如过未指定镜像仓库地址,默认为官方仓库docker hub
参数配置:-u :登录用户名 、-p:登录密码
docker login -u 用户名 -p 密码
注:不输入这两个参数也没事的,输入docker login命令后会提醒你输入用户名和密码
8.2、docker pull
从镜像仓库中拉取或者更新指定镜像
就tag就是标签 或者是 @ID
docker pull == docker image pull
参数:
-a 拉取所有tagged镜像(一般不需要)
--disable-content-trust:忽略镜像的校验,默认开启
例如:docker pull nginx:1.23.3
8.3、docker push
使用前提使用docker login进行登录后使用
tag就是给它打一个标签
docker image push==docker push
参数:
-a :推送所有tagged镜像
--disable-content-trust:忽略镜像的校验,默认开启
docker push mynginx:v1 (最后这个就是版本)
8.4、docker search
从docker hub查找镜像
参数:
--no-trunc:显示完整的镜像描述
-f <过滤条件>:列出收藏数不小于指定值的镜像
举个例子:docker search -f star>10 nginx (友友们可以去试试)
8.5、docker logout
登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub