当前位置: 首页 > article >正文

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容器只需要几秒钟。

 


http://www.kler.cn/a/500728.html

相关文章:

  • uniapp中rpx和upx的区别
  • ubuntu22.04 的录屏软件有哪些?
  • 【黑灰产】假钱包推广套路
  • 如何在C#中使用COM接口
  • Linux web资产收集
  • 计算机视觉算法实战——打电话行为检测
  • Windows下Dll在Unity中使用的一般方式
  • 运维高级课作业一
  • MeCo——给预训练数据增加源信息,就能减少33%的训练量并且提升效果
  • MYSQL-创建数据库 CREATE DATABASE (十一)
  • 蠕虫病毒会给服务器造成哪些危害?
  • vue3后台系统动态路由实现
  • centos 搭建nginx+配置域名+windows访问
  • Vue 开发者的 React 实战指南:性能优化篇
  • 【Ubuntu与Linux操作系统:九、Shell编程】
  • Perl语言的编程范式
  • 简历整理YH
  • Django 社团管理系统的设计与实现
  • SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
  • 如何在Go语言开发中实现高性能的分布式日志收集
  • 【微服务】面试 2、服务雪崩
  • 【网络】:网络编程套接字
  • 《机器学习》集成学习之随机森林