Docker的安装及使用

1.了解什么是docker

2.为什么要学习docker

3.掌握docker和传统虚拟机的差异

3.掌握docker核心概念

5.掌握怎么安装docker

1.1 掌握为什么要学习docker

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图。

这是某招聘网站上看到的招聘 Java 开发工程师的招聘要求,其中有一条熟悉 Docker 成为了你快速入职的加分项,由此可见熟悉 Docker 在互联网公司的地位之重要。

1.2 掌握什么是docker

我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。

虚拟机
大家都用过虚拟机,而对容器这个概念比较的陌生。我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件。

每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。

每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统

容器
容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。

  1. 容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,以分离的进程运行

  2. 容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系

  3. 通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标

  4. 容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响

  5. 容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高

通过下面这幅图,我们可以很直观的反映出这两者的区别所在:

总结
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。

程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

1.3 docker优势

Docker 相比于传统虚拟化方式具有更多的优势:

  1. Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。
  2. Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化,Docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化。
  3. Docker 更轻量。Docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境,Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高。
  4. 与虚拟机相比,Docker 隔离性更弱。Docker 属于进程之间的隔离,虚拟机可实现系统级别隔离。
  5. 安全性。Docker 的安全性也更弱,Docker 的租户 Root 和宿主机 Root 等同,一旦容器内的用户从普通用户权限提升为 Root 权限,它就直接具备了宿主机的 Root 权限,进而可进行无限制的操作。
    虚拟机租户 Root 权限和宿主机的 Root 虚拟机权限是分离的,并且虚拟机利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔离技术。这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击。
  6. 可管理性。Docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力。
  7. 高可用和可恢复性。Docker 对业务的高可用支持是通过快速重新部署实现的。
  8. 虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性。
  9. 快速创建、删除。虚拟化创建是分钟级别的,Docker 容器创建是秒级别的,Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间
  10. 交付、部署。虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。Docker 在 Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署。

1.3 掌握docker基本概念

三个基本的概念:

  • Image(镜像)(核心)
  • Container(容器)
  • Repository(仓库)

镜像是 Docker运行容器的前提,仓库是存放镜像的场所,可见镜像更是 Docker 的核心

Image(镜像)

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

镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,下面的这张图能够帮助读者理解镜像的定义:

从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其他层都会有一个指针指向下一层。这些层是 Docker 内部的实现细节,并且能够在主机的文件系统上访问到。

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角。

这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

Container(容器)

容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层

Repository(仓库)

Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行。

但是, 如果需要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry(仓库注册服务器)就是这样的服务。

有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,并不严格区分。

Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

实际上,一个 Docker Registry 中可以包含多个仓库(Repository),每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。

所以说,镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。

我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 Latest 作为默认标签。

仓库又可以分为两种形式:\
Public(公有仓库)\
Private(私有仓库)

Docker Registry 公有仓库是开放给用户使用、允许用户管理镜像的 Registry 服务。

一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。

除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

当用户创建了自己的镜像之后就可以使用 Push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 Pull 下来就可以了。

1.4 docker架构

Docker 使用 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互,Docker服务端负责构建、运行和分发 Docker 镜像。

Docker 客户端和服务端可以运行在一台机器上,也可以通过 RESTful 、 Stock 或网络接口与远程 Docker 服务端进行通信。

Docker 客户端、服务端和 Docker 仓库(即 Docker Hub 和 Docker Cloud ),默认情况下 Docker 会在 Docker 中央仓库寻找镜像文件。

这种利用仓库管理镜像的设计理念类似于 Git ,当然这个仓库是可以通过修改配置来指定的,甚至我们可以创建我们自己的私有仓库。

Docker 的核心组件包括:

  • Docker Client
  • Docker Daemon
  • Docker Image
  • Docker Registry
  • Docker Container

Docker Client

Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面(CLI)工具,是许多 Docker 用户与 Docker 进行交互的主要方式。

客户端可以构建,运行和停止应用程序,还可以远程与 Docker_Host 进行交互。

最常用的 Docker 客户端就是 Docker 命令,我们可以通过 Docker 命令很方便地在 Host 上构建和运行 Docker 容器。

Docker Daemon

Docker Daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。

它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。

该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过 Docker Daemon 内部的一个路由分发调度,由具体的函数来执行请求。

大致可以将其分为以下三部分:

  • Docker Server
  • Engine
  • Job

Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。

Docker Daemon 运行在 Docker Host 上,负责创建、运行、监控容器,构建、存储镜像。

Docker Image

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

镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将 Docker 镜像看成只读模板,通过它可以创建 Docker 容器。
镜像有多种生成方法:

  1. 从无到有开始创建镜像
  2. 下载并使用别人创建好的现成的镜像
  3. 在现有镜像上创建新的镜像

我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build <docker-file> 命令可以构建出 Docker 镜像。

>

Docker Registry

Docker Registry 是存储 Docker Image 的仓库,它在Docker生态环境中的位置如图所示:

运行 docker push、docker pull、docker search 时,实际上是通过 Docker Daemon 与 Docker Registry 通信。

Docker Container

Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。

Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码,Run 一下就可以提供服务啦。

1.5 Docker 组件是如何协作运行容器

我们通过 hello-world 这个例子来体会一下 Docker 各个组件是如何协作的。

容器启动过程如下:

  • Docker 客户端执行 docker run 命令。
  • Docker Daemon 发现本地没有 hello-world 镜像。
  • Daemon 从 Docker Hub 下载镜像。
  • 下载完成,镜像 hello-world 被保存到本地。
  • Docker Daemon 启动容器。

具体过程可以看如下这幅演示图:

 

通过 Docker Images 可以查看到 hello-world 已经下载到本地:

通过 Docker Ps 或者 Docker Container ls 显示正在运行的容器,我们可以看到,hello-world 在输出提示信息以后就会停止运行,容器自动终止,所以我们在查看的时候没有发现有容器在运行。

1.6 docker安装

1.6.1 掌握docker在CentOS的安装

参见:https://www.runoob.com/docker/centos-docker-install.html

1.6.2 掌握docker在windows的安装

参见:https://docs.docker.com/desktop/windows/install/

启动报错:

解决方案:

参见:https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

1.6.3 掌握docker在MacOS的安装

参见:http://c.biancheng.net/view/3122.html

1.6.4 掌握docker的镜像加速

参见:https://www.runoob.com/docker/docker-mirror-acceleration.html

1.7 掌握docker安装环境

1.7.1 掌握docker安装Mysql

参考Docker 安装 MySQL | 菜鸟教程

1.7.2 掌握docker安装Redis

参考Docker 安装 Redis | 菜鸟教程

1.7.3 掌握docker安装MongoDb

参考Docker 安装 MongoDB | 菜鸟教程

1.7.4 掌握docker安装Apache

参考Docker 安装 Apache | 菜鸟教程

docker优点

  • Docker 启动快
  • 需要的资源更少
  • 更轻量
  • 高可用和可恢复性
  • 交付、部署

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker 是一种容器化技术,可以帮助开发者快速构建、打包、发布和运行应用程序的环境。在安装使用 Docker 之前,需要先了解 Docker 的基本概念。 Docker 的基本概念 1. 镜像(Image):Docker 镜像是一个只读的模板,包含了运行应用程序所需要的所有文件、配置和依赖项。 2. 容器(Container):Docker 容器Docker 镜像的运行实例,可以被创建、启动、停止、删除、暂停等操作。 3. 仓库(Repository):Docker 仓库是用于存储和分享 Docker 镜像的地方,可以是公共的(如 Docker Hub)或私有的(如自己的服务器)。 Docker安装步骤 1. 安装 Docker 在 Ubuntu 系统上,可以使用以下命令安装 Docker: ``` $ sudo apt-get update $ sudo apt-get install docker.io ``` 安装完成后,可以使用以下命令检查 Docker 是否正确安装: ``` $ docker --version ``` 2. 配置 Docker安装 Docker 后,需要将当前用户添加到 Docker 用户组中,以便无需使用 sudo 命令也可以运行 Docker 命令: ``` $ sudo usermod -aG docker your_username ``` 需要重新登录才能使修改生效。 3. 运行 Docker 可以使用以下命令启动 Docker: ``` $ sudo systemctl start docker ``` 可以使用以下命令检查 Docker 是否正在运行: ``` $ sudo systemctl status docker ``` Docker 的基本使用 1. 拉取镜像 可以使用以下命令从 Docker 仓库中拉取镜像: ``` $ docker pull image_name ``` 例如,拉取 Ubuntu 镜像: ``` $ docker pull ubuntu ``` 2. 运行容器 可以使用以下命令运行容器: ``` $ docker run image_name ``` 例如,运行 Ubuntu 容器: ``` $ docker run ubuntu ``` 默认情况下,容器会在后台运行,并显示容器 ID。 可以使用以下命令运行交互式容器: ``` $ docker run -it image_name ``` 例如,运行交互式 Ubuntu 容器: ``` $ docker run -it ubuntu ``` 3. 列出容器 可以使用以下命令列出所有正在运行的容器: ``` $ docker ps ``` 可以使用以下命令列出所有容器: ``` $ docker ps -a ``` 4. 停止容器 可以使用以下命令停止容器: ``` $ docker stop container_id ``` 例如,停止容器 ID 为 123 的容器: ``` $ docker stop 123 ``` 可以使用以下命令停止所有正在运行的容器: ``` $ docker stop $(docker ps -q) ``` 5. 删除容器 可以使用以下命令删除容器: ``` $ docker rm container_id ``` 例如,删除容器 ID 为 123 的容器: ``` $ docker rm 123 ``` 可以使用以下命令删除所有容器: ``` $ docker rm $(docker ps -aq) ``` 6. 删除镜像 可以使用以下命令删除镜像: ``` $ docker rmi image_name ``` 例如,删除 Ubuntu 镜像: ``` $ docker rmi ubuntu ``` 可以使用以下命令删除所有镜像: ``` $ docker rmi $(docker images -q) ``` 以上是 Docker 的基本安装使用方法,更多高级用法可以参考 Docker 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呀哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值