返回顶部
首页 > 资讯 > 精选 >如何快速掌握Docker必备基础知识
  • 414
分享到

如何快速掌握Docker必备基础知识

2023-06-16 02:06:13 414人浏览 薄情痞子
摘要

本篇内容介绍了“如何快速掌握Docker必备基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!没有虚拟化技术的原始年代我们仔细想想,在没

本篇内容介绍了“如何快速掌握Docker必备基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

没有虚拟化技术的原始年代
我们仔细想想,在没有计算虚拟化技术的“远古”年代,如果我们要部署一个应用程序(Application),一般的步骤是怎么样的?

第一步肯定是先要准备一台物理服务器,然后在物理服务器上安装一个操作系统(Operating System),有了操作系统之后,便在操作系统上安装运行我们的应用程序,这个过程可以用下面的图来表示:

如何快速掌握Docker必备基础知识

物理服务器部署应用示意图

那么,这种方式有什么问题呢?其实,在物理机上部署应用有以下几个缺点:

  • 部署非常慢:因为我们得先准备硬件服务器,接着还要安装操作系统,然后再部署应用程序,而且应用程序还有很多的依赖软件,所以这个过程是比较慢的。

  • 成本非常高:主要是物理器成本太高,即使是部署一个简单的应用,也需要一台服务器。

  • 资源浪费:如果应用太简单,也容易浪费硬件资源,比如CPU和内存

  • 迁移和扩展太慢:如果需要迁移应用,或者扩展应用,都要再准备其他的物理服务器,过程很麻烦,也很慢。

那么有什么办法可以解决这些问题呢?答案便是虚拟化技术。

使用虚拟机部署应用程序的年代
什么是虚拟化技术
谈到计算机的虚拟化技术,我们直接想到的便是虚拟机,虚拟机允许我们在一台物理计算机模拟出多台机器,简单地理解,虚拟化技术就是在一台物理计算机上,通过中间虚拟软件层Hypervisor隔离CPU、内存等硬件资源,虚拟出多台虚拟服务器,这样做的话,一台物理服务器便可以安装多个应用程序,达到资源利用的最大化,而且多个应用之间相互隔离,如下图所示:

如何快速掌握Docker必备基础知识

虚拟机上部署应用示意图

虚拟机的优点

  • 可以把资源分配到不同的虚拟机,达到硬件资源的最大化利用

  • 与直接在物理机上部署应用,虚拟机更容易扩展应用。

  • 云服务:通过虚拟机虚拟出不同的物理资源,可以快速搭建云服务。

虚拟机的不足之处
虚拟机的不足之处在于对物理服务器资源的消耗,当我们在物理服务器创建一台虚拟机时,便需要虚拟出一套硬件并在上面运行完整的操作系统,每台虚拟机都占用许多的服务器资源。

Docker是什么?
相对于虚拟机的笨重,Docker则更显得轻量化,因此不会占用太多的系统资源。

Docker是使用时下很火的golang语言进行开发的,其技术核心是linux内核的Cgroup,Namespace和AUFS类的UNIOn FS等技术,这些技术都是Linux内核中早已存在很多年的技术,所以严格来说Docker并不是一个完全创新的技术,Docker通过这些底层的Linux技术,对Linux进程进行封装隔离,而被隔离的进程也被称为容器,完全独立于宿主机的进程。

所以Docker是容器技术的一种实现,也是操作系统层面的一种虚拟化,与虚拟机通过一套硬件再安装操作系统完全不同。

如何快速掌握Docker必备基础知识

docker容器与系统关系示意图

Docker与虚拟机之间的比较
Docker是在操作系统进程层面的隔离,而虚拟机是在物理资源层面的隔离,两者完全不同,另外,我们也可以通过下面的一个比较,了解两者的根本性差异。

如何快速掌握Docker必备基础知识

容器与虚拟机的比较【摘自《Docker-从入门到实践》】

从上面的容器与虚拟机的对比中,我们明白了容器技术的优势。

容器解决了开发与生产环境的问题
开发环境与生产环境折射的是开发人员与运维人员之间的矛盾,也许我们常常会听到开发人员对运维人员说的这样一句话:“在我的电脑运行没问题,怎么到了你那里就出问题了,肯定是你的问题”,而运维人员则认为是开发人员的问题。

开发人员需要在本机安装各种各样的测试环境,因此开发的项目需要软件越多,依赖越多,安装的环境也就越复杂。

同样的,运维人员需要为开发人员开发的项目提供生产环境,而运维人员除了应对软件之间的依赖,还需要考虑安装软件与硬件之间的兼容性问题。

就是这样,所以我们经常看到开发与运维相互甩锅,怎么解决这个问题呢?

容器就是一个不错的解决方案,容器能成为开发与运维之间沟通的语言,因为容器就像一个集装箱一样,提供了软件运行的最小化环境,将应用与其需要的环境一起打包成为镜像,便可以在开发与运维之间沟通与传输。

如何快速掌握Docker必备基础知识

Docker的版本
Docker分为社区版(CE)和企业版(EE)两个版本,社区版本可以免费使用,而企业版则需要付费使用,对于我们个人开发者或小企业来说,一般是使用社区版的。

Docker CE有三个更新频道,分别为stable、test、nightly,stable是稳定版本,test是测试后的预发布版本,而nightly则是开发中准备在下一个版本正式发布的版本,我们可以根据自己的需求下载安装。

如何安装Docker?
好了,通过前面的介绍,我们应该对Docker有了初步的了解,下面开始进入Docker的学习之旅了。

而学习Docker的第一步,从安装Docker运行环境开始,我们以Docker的社区版本(CE)安装为例。

Docker社区版本提供了Mac OS,Microsoft windows和Linux(Centos,ubuntu,Fedora,Debian)等操作系统的安装包,同时也支持在云服务器上的安装,比如AWS Cloud。

在Windows系统上安装
Docker Desktop for Windows
Docker为Windows提供了一个桌面应用程序管理的安装包(Docker Desktop for Windows),不过对系统有以下几点要求:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 必须是64位Windows10专业版,企业版,教育版,构建在15063或更高版本,

  3. 在BiOS中启用虚拟化。通常,默认情况下启用虚拟化。

  4. 至少有4GB内存。

  5. CPU支持SLAT。

如果操作系统满足上面的要求,则可以直接下载安装包直接安装,在安装成功后,Docker并不会自动启动,需要我们自己启动,我们可以在开始菜单中找到Docker,如下图,单击启动便可启动。

如何快速掌握Docker必备基础知识

Docker Toolbox
如果系统达不到上面的要求,比如说你用的是Windows 7操作系统,这时候要想使用Docker,便需要借助Docker Toolbox,Docker Toolbox是Docker提供的在比较旧的Mac OS,Windows操作系统上安装Docker环境的工具集。

Docker Toolbox包括docker-cli(就是我们在终端使用的docker命令行工具),docker-compose(多容器管理工具),docker-mecahine,VirtualBox(虚拟机),Kitematic(docker的GUI管理工具)。

本质上使用Docker Toolbox安装Docker环境,实际上是在VirtualBox中创建一个Linux虚拟机,并在虚拟机上安装Docker。

另外,在安装过程中会开启Windows的Hyper-V模块(Windows操作系统实现虚拟化的一种技术),这里面有个要注意的点是如果开启了Hyper-V,则VirtualBox不再生效了。

在Mac OS上安装
如同Windows操作系统一样,Docker为Mac OS也一样提供一个桌面应用程序(Docker Desktop for Mac),比较简单,从docker官网上下载Dokcer.dmg安装,打开Docker.dmg,如下图所示:

如何快速掌握Docker必备基础知识

直接拖动Docker图标便完成了安装。

对于比较老的Mac OS操作系统,也可以像Windows一样,使用Docker Toolbox,这点可以参考上面的介绍。

在Mac OS上安装完成之后,在Application中找到Docker图标,双击打开便可以启动Docker了,如下:

如何快速掌握Docker必备基础知识

在Linux上安装
在Linux操作系统上的安装,主要以Centos7为例,其他Linux系统的发行版本,如Ubuntu,Debian,Fedora等,可以自行查询Docker的官方文档。

删除旧的docker版本
可能有些Linux预先安装Docker,但一般版本比较旧,所以可以先执行以下代码来删除旧版本的Docker。

$ sudo dnf remove docker \                   docker-client \                   docker-client-latest \                   docker-common \                   docker-latest \                   docker-latest-logrotate \                   docker-logrotate \                   docker-selinux \                   docker-engine-selinux \                   docker-engine 复制代码

指定安装版本

$ sudo yum-config-manager \     --add-repo \     https://download.docker.com/linux/centos/docker-ce.repo 复制代码

使用yum安装docker

$ sudo yum install docker-ce docker-ce-cli containerd.io 复制代码

启动docker服务器

# 启动docker守护进程 $ sudo systemctl start docker 复制代码

测试安装是否成功

通过上面几种方式安装了Docker之后,我们可以通过下面的方法来检测安装是否成功。

打印docker版本

# 打印docker版本 $ docker version  复制代码

拉取镜像并运行容器

# 拉取hello-world镜像 docker pull hello-world  # 使用hello-world运行一个容器 docker run hello-world 复制代码

运行上面的命令之后,如果有如下图所示的输出结果,则说明安装已经成功了。

如何快速掌握Docker必备基础知识

Docker的基本概念
镜像(Image)、容器(Container)与仓库(Repository),这三个是docker中最基本也是最核心的概念,对这三个概念的掌握与理解,是学习docker的关键。

镜像(Image)
什么是Docker的镜像?

Docker本质上是一个运行在Linux操作系统上的应用,而Linux操作系统分为内核和用户空间,无论是Centos还是Ubuntu,都是在启动内核之后,通过挂载Root文件系统来提供用户空间的,而Docker镜像就是一个Root文件系统。

Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像是一个静态的概念,不包含任何动态数据,其内容在构建之后也不会被改变。

下面的命令是一些对镜像的基本操作,如下:

查看镜像列表

# 列出所有镜像 docker image ls 复制代码

由于我们前面已经拉取了hello-world镜像,所以会输出下面的内容:

REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE hello-world                                     latest              fce289e99eb9        7 months aGo        1.84kB 复制代码

下面的命令也一样可以查看本地的镜像列表,而且写法更简洁。

# 列表所有镜像 docker images 复制代码

从仓库拉取镜像
前面我们已经演示过使用docker pull命令拉取了hello-world镜像了,当然使用docker image pull命令也是一样的。

一般默认是从Docker Hub上拉取镜像的,Docker Hub是Docker官方提供的镜像仓库服务(Docker ReGIStry),有大量官方或第三方镜像供我们使用,比如我们可以在命令行中输入下面的命令直接拉取一个Centos镜像:

docker pull centos 复制代码

docker pull命令的完整写法如下:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 复制代码

拉取一个镜像,需要指定Docker Registry的地址和端口号,默认是Docker Hub,还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,另外,仓库名则由作者名和软件名组成。

那么,我们上面使用centos,那是因为省略作者名,则作者名library,表示Docker官方的镜像,所以上面的命令等同于:

docker pull library/centos:latest 复制代码

因此,如果拉取非官方的第三方镜像,则需要指定完整仓库名,如下:

docker pull mysql/Mysql-server:latest 复制代码

运行镜像
使用docker run命令,可以通过镜像创建一个容器,如下:

docker run -it centos /bin/bash 复制代码

删除镜像
当本地有些镜像我们不需要时,那我们也可以删除该镜像,以节省存储空间,不过要注意,如果有使用该镜像创建的容器未删除,则不允许删除镜像。

# image_name表示镜像名,image_id表示镜像id dockere image rm image_name/image_id 复制代码

删除镜像的快捷命令:

docker rmi image_name/image_id 复制代码

好了,关于Docker镜像的相关知识,我们就简单地介绍到这里,有机会的话,我们单独写一篇文章来谈谈,特别构建Docker镜像部分的相关知识,有必要深入再学习一下。

容器(Container)
Docker的镜像是用于生成容器的模板,镜像分层的,镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象,对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。

启动和停止容器
启动容器有两种方式,一种是我们前面已经介绍过的,使用docker run命令通过镜像创建一个全新的容器,如下:

docker run hello-world 复制代码

另外一种启动容器的方式就是启动一个已经停止运行的容器:

# container_id表示容器的id docker start container_id 复制代码

要停止正在运行的容器可以使用docker container stop或docker stop命令,如下:

# container_id表示容器的id docker stop container_id 复制代码

查看所有容器
如果要查看本地所有的容器,可以使用docker container ls命令:

# 查看所有容器 docker container ls 复制代码

查看所有容器也有简洁的写法,如下:

# 查看所有容器 docker ps 复制代码

删除容器
我们也可以使用docker container rm命令,或简洁的写法docker rm命令来删除容器,不过不允许删除正在运行的容器,因此如果要删除的话,就必须先停止容器。

# container_id表示容器id,通过docker ps可以看到容器id $ docker rm container_id 复制代码

当我们需要批量删除所有容器,可以用下面的命令:

  1. # 删除所有容器 

  2. docker rm $(docker ps -q) 

  3. 复制代码 


# 删除所有退出的容器 docker container prune 复制代码

进入容器

# 进入容器,container_id表示容器的id,command表示linux命令,如/bin/bash docker exec -it container_id command 复制代码

仓库(Repository)
在前面的例子中,我们使用两种方式构建镜像,构建完成之后,可以在本地运行镜像,生成容器,但如果在更多的服务器运行镜像呢?很明显,这时候我们需要一个可以让我们集中存储和分发镜像的服务,就像GitHub可以让我们自己存储和分发代码一样。

Docker Hub就是Docker提供用于存储和分布镜像的官方Docker Registry,也是默认的Registry,其网址为Https://hub.docker.com,前面我们使用docker pull命令便从Docker Hub上拉取镜像。

Docker Hub有很多官方或其他开发提供的高质量镜像供我们使用,当然,如果要将我们自己构建的镜像上传到Docker Hub上,我们需要在Docker Hub上注册一个账号,然后把自己在本地构建的镜像发送到Docker Hub的仓库当中,Docker Registry包含很多个仓库,每个仓库对应多个标签,不同标签对应一个软件的不同版本。

Docker的组成与架构
在安装好并启动了Docker之后,我们可以使用在命令行中使用docker命令操作docker,比如我们使用如下命令打印docker的版本信息。

docker verion 复制代码

其结果如下:

如何快速掌握Docker必备基础知识

从上面的图中,我们看到打出了两个部分的信息:Client和Server。

这是因为Docker跟大部分服务端软件一样(如mysql),都是使用C/S的架构模型,也就是通过客户端调用服务器,只是我们现在刚好服务端和客户端都在同一台机器上而已。

因此,我们可以使用下面的图来表示Docker的架构,DOCKER_HOST是Docker server,而Clinet便是我们在命令中使用docker命令。

如何快速掌握Docker必备基础知识

Docker Engine
docker server为客户端提供了容器、镜像、数据卷、网络管理等功能,其实,这些功能都是由Docker Engine来实现的。

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. dockerd:服务器守护进程。

  3. Client docker Cli:命令行接口

  4. REST api:除了cli命令行接口,也可以通过REST API调用docker

下面是Docker Engine的示例图:

如何快速掌握Docker必备基础知识

“如何快速掌握Docker必备基础知识”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何快速掌握Docker必备基础知识

本文链接: https://lsjlt.com/news/282184.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何快速掌握Docker必备基础知识
    本篇内容介绍了“如何快速掌握Docker必备基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!没有虚拟化技术的原始年代我们仔细想想,在没...
    99+
    2023-06-16
  • 如何快速掌握Python的基础知识
    本篇内容主要讲解“如何快速掌握Python的基础知识”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速掌握Python的基础知识”吧!python函数函数通过def关键字定义,形如pytho...
    99+
    2023-06-27
  • ASP知识点扫盲:快速掌握ASP基础知识
    ASP的优势: 动态性:ASP网页可以动态地生成内容,这意味着页面可以在运行时根据用户输入或其他因素进行修改。 交互性:ASP网页可以与用户进行交互,这意味着用户可以填写表单、单击按钮或执行其他操作,而这些操作可以导致网页的内容发生变化...
    99+
    2024-02-05
    什么是ASP? ASP是一种动态网页技术 它允许程序员使用脚本语言(如VBScript或JavaScript)来创建动态的网页。ASP网页可以包含HTML 脚本和其他元素 这些元素可以在运行时动态地
  • 快速掌握Go语言的基础知识
    迅速掌握Go语言的入门要领 随着互联网的快速发展,编程语言的选择也越来越多样化。Go语言作为一种新兴的编程语言,由于其简洁、高效和并发特性,受到了越来越多开发者的喜爱。如果你想迅速掌握Go语言的入门要领,本文...
    99+
    2024-01-30
    Go语言 入门 要领 作用域 标准库
  • Vue.js初学者必备:10个必须掌握的基础知识点,助你快速入门
    1. 初识Vue.js及其生态系统 Vue.js是一个轻量级、渐进式的JavaScript框架,用于构建用户界面。它拥有庞大且活跃的生态系统,提供了丰富的工具、库和资源,让开发人员能够快速构建和部署现代化的应用程序。 2. 组件化开发 ...
    99+
    2024-02-14
    Vue.js 组件化 响应式数据 状态管理 路由 指令 过渡 动画 插件 生态系统
  • 外贸小白必须掌握的基础知识
    学会外贸小白必须具备的基础知识,不仅能更好的开展外贸业务,及时解答各种客户疑难问题,还能借此判断客户是否专业,以防遇到骗取货物的业务骗局。 一、产品展示要规范产品陈列对于外贸业务的开展十分重要,精准全面的产品展示内容,能方便客户快...
    99+
    2023-06-04
  • GO语言学习笔记:如何快速掌握语言的基础知识?
    随着技术的不断发展,越来越多的程序员开始学习GO语言。GO语言是Google于2009年推出的一种编程语言,它的设计目标是提供一种简单、高效、可靠的编程语言。GO语言在性能、并发性和可维护性方面表现出色,因此受到了众多开发者的青睐。本文将...
    99+
    2023-06-28
    学习笔记 教程 开发技术
  • 掌握mysql基础入门知识
    本文主要给大家介绍mysql基础入门知识,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql基础入门知识吧。mysql操作一、连接数据库mysq...
    99+
    2024-04-02
  • Java编程需要必须掌握什么基础知识
    这篇文章主要为大家展示了“Java编程需要必须掌握什么基础知识”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java编程需要必须掌握什么基础知识”这篇文章吧。1、掌握静态方法和属性 &...
    99+
    2023-06-27
  • 初学者必读:掌握Golang协程的基础知识
    Golang是一门近年来备受关注的编程语言,其强大的并发处理能力让它在互联网领域得到了广泛应用。其中的协程(goroutine)是Golang并发编程的核心概念之一,对于初学者来说,掌...
    99+
    2024-02-29
    golang 初学者 协程基础 go语言
  • 快速掌握Android屏幕的知识点
    一、首先来介绍下关于PX、PT、PPI、DPI、DP的知识 术语 说明 PX (pixel...
    99+
    2022-06-06
    Android
  • 学习Go语言的基础知识:从快速掌握基本语法到应用
    Go语言入门指南:快速掌握基本语法和应用 Go语言(又称Golang)是一种开源的编程语言,由谷歌开发。它以其简洁、高效和并发性而著称,在云计算、网络编程、系统编程等领域得到了广泛的应用。 1. 基本语法 1...
    99+
    2024-01-31
    go语言 入门指南 基本语法 网络编程
  • 快速学习MySQL基础知识
    这篇文章主要梳理了 SQL 的基础用法,会涉及到以下方面内容: SQL大小写的规范 数据库的类型以及适用场景 SELECT 的执行过程 WHERE 使用规范 MySQL 中常见函...
    99+
    2022-05-26
    学习MySQL MySQL 基础
  • 怎么掌握PostgreSQL Locks的基础知识
    这篇文章主要讲解了“怎么掌握PostgreSQL Locks的基础知识”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么掌握PostgreSQL Locks...
    99+
    2024-04-02
  • MySQL必备基础知识有哪些
    这篇文章给大家分享的是有关MySQL必备基础知识有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、SQL的概念    结构化查询语言...
    99+
    2024-04-02
  • 快速掌握MySQL基础教程方法
    本文主要给大家介绍快速掌握MySQL基础教程方法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下快速掌握MySQL基础教程方法吧。1分钟安装Part1...
    99+
    2024-04-02
  • 怎么快速掌握Python基础语法
    本篇内容主要讲解“怎么快速掌握Python基础语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么快速掌握Python基础语法”吧!  一、python编码  默认情况下, Python 源码...
    99+
    2023-06-02
  • MySQL基础入门知识你掌握了吗
    本文主要给大家介绍MySQL基础入门知识,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MySQL基础入门知识吧。一、安装篇:sudo ap...
    99+
    2024-04-02
  • WCF入门需要掌握的基础知识
    1 XML 因为以及有太多的先人指点, 关于XML的文章也是无数, 需要掌握XML的基本的一些概念: 可以访问 http://www.w3school.com.cn/ 这里就简单的说...
    99+
    2024-04-02
  • Vue.js基础知识点快速入门:闪电战学习法,迅速掌握核心要点
    1. Vue.js简介 Vue.js是一个渐进式的前端JavaScript框架,用于构建用户界面。它采用组件化开发思想,可以轻松地实现复杂应用程序的构建。Vue.js的特点: 轻量级:Vue.js核心库只有20KB,易于集成。 易于学...
    99+
    2024-02-14
    Vue.js 前端开发 快速入门 基础知识点 核心要点
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作