日升时奋斗,日落时自省?
目录
注:此博客主要是对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?