Docker基础篇(一)
目录
1.0 Docker为什么出现
2.0Docker理念简介
2.1Docker是什么
2.2传统虚拟机和容器的对比
比较Docker和传统虚拟化方式的不同之处
2.3Docker能干嘛
3.0Docker的安装
3.1去哪里下
3.2Docker安装
3.3前提条件
3.4Docker的基本组成三要素(镜像、容器、仓库)
3.5Docker平台架构图解(简易版)
3.6Docker平台架构
3.7docker安装步骤(ubuntu版)
3.8docker安装步骤(centos版本)
3.9配置镜像加速器
4.0hello world分析介绍三要素
总结
1.0 Docker为什么出现
环境不一致,举例说明:mysql的版本不同,redis的补丁不同,java版本不同等等
安装繁琐,举例说明:开发将自己本机的生产环境写出一张清单交给运维,有可能涉及到多台集群,只要装错一步,应用可能就会跑不起来
假定您在开发一个应用商城,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于当前的配置而且还要依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列配置文件,您希望尽可能多的再本地模拟这些环境而不产生重新创建服务器环境的开销。请问?
您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?
答案就是使用容器,Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术
环境配置相当麻烦,换一台机器,就要重来一次,费力费时,很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一摸一样地复制过来,开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。
也就是说,开发可以将100%跑通过的源码+配置+环境+版本打包成一个镜像文件,然后将这个镜像文件移植到一个docker引擎中
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个电商项目的环境来说,需要安装Java/RebbitMQ/MysSQL/JDBC驱动包等,安装和配置这些东西有多麻烦就不用说了,它还不能跨平台。假如我们是在Windows上安装的这些环境,到了Linux又得重新装,况且就算不跨操作系统,换一台同样操作系统的服务器,要移植应用也是非常麻烦的。
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或者能够编译执行的二进制字节码等(java为例),Docker的出现使得Docker得以打破过去[程序即应用]的观念,透过镜像将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包 ,达到应用程式跨平台间的无缝接轨运作。
2.0Docker理念简介
一次搬家,处处运行,从搬家到搬楼,Docker是鲸鱼,其本身是一个容器运行的载体,或称为管理引擎,容器是集装箱。
2.1Docker是什么
类似于VMware,每个虚拟机就像一个docker引擎,解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
2.2传统虚拟机和容器的对比
Docker容器是在操作系统层面上实现虚拟化,通过共享主机操作系统的内核来运行,因此启动速度快且占用资源较少。相比之下,传统虚拟机是在硬件层面实现虚拟化,每个虚拟机都包含一个完整的操作系统和应用程序,因此启动速度较慢且占用更多的资源。
启动速度快:因为不需要启动完整的操作系统,只需要加载应用程序及其依赖。
占用体积小:只包含应用程序及其依赖,不需要额外的操作系统空间
资源利用率高:通过共享主机操作系统内核,能够高效的利用系统资源
比较Docker和传统虚拟化方式的不同之处
传统虚拟机是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程
容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟,因此虚拟机要比传统虚拟机更为轻便
每个容器之间互相隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
2.3Docker能干嘛
随着微服务架构和Docker的发展,大量的应用会通过微服务(一种软件架构风格,旨在将一个复杂的应用程序拆分成多个小型、独立的服务,每个服务都专注于完成特定的业务功能,并通过轻量级的通信机制(如HTTP/REST、消息队列等)进行交互这种架构风格强调服务的自治性、独立部署和可扩展性,使得系统更加灵活、可维护,并能快速响应业务需求的变化)方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易,当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级别甚至秒级。
3.0Docker的安装
3.1去哪里下
官网:docker官网:http://www.docker.com
仓库:Docker Hub官网:https://hub.docker.com/
3.2Docker安装
Docker并非是一个通用的容器工具,它依赖于已经存在并运行的内核环境。
Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。
因此,Docker必须部署在Linux内核的系统上,如果其他系统想部署Docker就必须安装一个虚拟Linux环境。
3.3前提条件
要求系统为64位、Linux系统内核版本为3.8以上
3.4Docker的基本组成三要素(镜像、容器、仓库)
镜像(image):就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统(根文件系统),官方镜像centos:7就包含了完整的一套centos:7最小系统的root文件系统,相当于容器的源代码
容器:Docker利用容器独立运行的一个或者一组应用,应用程序或者服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体,容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的。可以把容器看作是一个简易版的Linux环境和运行在其中的应用程序。
仓库:把做好的项目或者应用及其环境,打包push在一个平台上,而仓库是集中存放镜像文件的场所。
类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种git项目的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。
3.5Docker平台架构图解(简易版)
Docker是一个CS结构的系统,Docker守护进程运行在主机上,然后通过Socket(API是组件与组件之间)连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。
3.6Docker平台架构
1、用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
2、Docker Daemon作为Docket架构的主体部分,提供DockerServer的功能使其可以接受Docker Client的请求。
3、Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式存在。
4、Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储。
5、当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。
6、当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。
7、Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
3.7docker安装步骤(ubuntu版)
开发者社区:developer.aliyun.com 文档与社区——镜像站——容器——docker-ce
1、安装必要的一些系统工具
apt -y install ca-certificates curl gnupg
2、信任Docker的GPG公钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
3、写入软件源信息
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4、更新软件包
apt-get update
5、下载docker容器管理引擎
apt -y install docker-ce=5:24.0.1-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.1-1~ubuntu.22.04~jammy containerd.io docker-buildx-plugin docker-compose-plugin
6、检测版本
docker -v
dockerd -v
3.8docker安装步骤(centos版本)
1、确定你是centos7以上版本
cat /etc/redhat-release
2、卸载旧版本的docker(如果装过旧版本的docker)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latset-logrotate \
docker-logrotate \
docker-engine
3、yum安装gcc相关 (gcc,将源代码编译安装成可执行文件的工具)
yum -y install gcc
yum -y install gcc-c++
4、安装需要的软件包并设置stable镜像仓库
yum -y install yum-utils
yum-config-manger \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo(国外的服务器非常非常慢)
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、更新yum软件包索引
yum makecache fast
6、 安装docker容器管理引擎
yum -y install docker-ce docker-ce-cli containerd.io
7、 启动docker
systemctl restart docker
docker version
查看docker版本
8、测试拉镜像
docker run hello-world
9、卸载docker过程
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
3.9配置镜像加速器
寻找镜像加速器的方式,需要有阿里云的服务器才能使用镜像加速
1、创建指定文件
vim /etc/docker/daemon.json
2、 输入镜像加速地址
{
“registry-mirrors”: [
"https://docker.unsee.tech",
"https://dockerpull.org",
"https://docker.lpanel.live",
"https://dockerhub.icu"
]
}
3、 重启后台守护进程并且重启docker服务
systemctl daemon-reload
systemctl restart docker
4.0hello world分析介绍三要素
执行命令docker run hello-world
run运行的过程
总结
1、docker有着比虚拟机更少的抽象层
由于docker不需要虚拟机实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是物理机的硬件资源,因此在cpu、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核,进而避免引寻、加载操作系统内核返回等比较费事费资源的过程,因此新建一个docker容器只需要几秒钟。