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