Docker之介绍与安装

时间:2022-10-25 15:06:52

Docker 说明
本章,我们主要从Docker简介Docker中几个核心概念Docker安装这几个方面对Docker进行介绍!

1、???? Docker 简介

1.1、???? 什么是 Docker

Docker 官网:https://www.docker.com

Docker之介绍与安装

Docker 是一个开源的应用容器引擎,是一个轻量级容器技术。

Docker 支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。

运行中的这个镜像称为容器,容器启动是非常快速的。

Docker 的英文意思是码头工人,意思就是搬运东西的意思,其实这和 Docker 的特点是一样的,Docker 提供的就是一种容器化搬运东西(我们的软件或程序)的过程。Docker 自己本来是运行在操作系统上一个程序软件,它会提供一个容器环境,使我们的程序独立地运行在容器中,所以说,官方给 Docker 起的这个名字也真是应景。

1.2、???? Docker 的特点

1.2.1、更高效的利用系统资源

Docker 对系统资源的利用率很高,无论是应用执行速度,内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,对比虚拟化技术,一个相同配置的主机往往可以运行更多数量的应用。

1.2.2、更快速的启动时间

传统的虚拟化技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大节约了开发测试,部署的时间。

1.2.3、一致的运行环境

开发过程中常见的一个问题是环境一致问题,由于开发环境、测试环境、生产环境不一致,导致有些 Bug 并未在开发过程中发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现这段代码在我机器上没问题这类问题。

1.2.4、持续支付和部署

对开发和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用 Docker File 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

1.2.5、更轻松的迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

1.2.6、更轻松的维护和扩展

Docker 使用的分层存储以及镜像技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。

1.3、???? Docker 和虚拟机

Docker 是一个能把开发的应用程序自动部署到容器的开源引擎,Docker 在概念上可以理解为一个虚拟机,但却不是真正意义上的虚拟机。

  • 虚拟机是在一台物理机上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。Docker 是开源的应用容器引擎,依然需要先在电脑上安装操作系统,然后安装 Docker 容器管理器;

  • 虚拟机是在硬件级别进行虚拟化,而 Docker 是在操作系统的层面虚拟化;

  • 虚拟机是通过模拟硬件搭建操作系统,而 Docker 则是复用操作系统;

  • 虚拟机实现了操作系统之间的隔离,Docker 只是进程之间的隔离,所以虚拟机的隔离级别更高,安全性更强;

  • Docker 的运行速度更快;

  • Docker 的文件要小得多,虚拟机要大得多。

所以,从运作原理上来看,Docker 更加的轻量级,虚拟机更加的笨重,Docker 启动也十分的快,部署起来也方便,所以越来越多的人开始使用 Docker。


2、???? Docker 中几个核心概念

2.1、???? 镜像(Image)

镜像到底是个什么东西呢,很多人在学习 Docker 的时候都是一头雾水的,可能是歪果仁对镜像情有独钟吧,好多东西都有镜像的概念。比如我们安装系统的.iso文件,其实就是镜像,这里你就可以把镜像认为是一种模板。我们可以使用 Docker 根据这个模板创建容器来运行,其实更可以理解为镜像是好比 Github 上的仓库一样,我们可以克隆下来源代码然后运行,运行起来的代码可以是一个网站、一个应用程序啥的,这就可以叫做容器。说白了,镜像就是一堆静态的模板,运行起来的镜像就是容器。镜像一般需要我们拉取下来,是只读的,这个我们克隆 Github 上的仓库是一样一样的。

Docker 镜像中有分层的概念,就是一个镜像可能基于好几个镜像,比如一个 Web 运行环境可能需要操作系统 Ubuntu、Mysql、.Net Core Runtime 运行时等,那我们拉取的这个镜像就会包好这几个镜像,这就好像我们前边说的打包好的运行环境一样,直接就拉下来一个小电脑一样。

2.2、???? 容器(Container)

当我们拉取了一个镜像,然后 Run 一下,就会根据这个镜像运行出来一个容器,运行的容器就好像我们的应用程序一样,可以访问可以停止,我们运用多次 Run 命令,就运行了很多很多容器,也可以说是镜像的实例。从这个角度来看,我们可以把镜像看作是类,容器看作 new 出来的实例,也是很合适的。

2.3、???? 仓库(Repository)

存放镜像的地方就是仓库,就好比存放代码的地方是 Github 一样,我们就把 Github 称为代码的仓库,Github 算是最大的仓库。那么存放 Docker 镜像的地方我们叫做 DockerHub,是 Docker 的*仓库。其实已经有 DockerHub 这个网站了https://hub.Docker.com,这就是存放 Docker 镜像的官方仓库,好多官方的也保存在这里,保证了镜像的安全性和可靠性,我们可以从上边拉取一下镜像来运行我们的软件。当然我们也可以制作好我们自己镜像推送上去,不过这些肯定是要官方审核的,防止有些人写入一些恶意代码。不过我们可以推到我们自己的 DockerHub 上去,供我们自己使用,这个就好我们的 Github 账号一样了,属于私有镜像了。

Docker之介绍与安装

2.4、???? 数据卷(Volumn)

实际上我们的容器就好像是一个简易版的操作系统,只不过系统中只安装了我们的程序运行所需要的环境,前边说到我们的容器是 new 出来的实例,既然是 new 出来的实例那就会销毁,那如果销毁了我们的程序产生出的需要持久化的数据怎么办呢,容器运行的时候我们可以进容器去查看,容器一旦销毁就什么都没有了。所以数据卷就是来解决这个问题的,是用来做数据持久化到我们的宿主机上容器间的数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存到我们宿主机上的真实磁盘上了。


3、???? Docker 安装

接下来我们以在 Windows 中安装 Docker 为例进行介绍,其他环境类似。

3.1、???? 启用 Windows 虚拟化

打开任务管理器,点击性能,查看虚拟化是否已启用,如下图所示:

Docker之介绍与安装

3.2、???? 启用 Hyper-v

打开控制面板,点击程序和功能,点击启用或关闭 Windows 功能,勾选 Hyper-v,确定即可(安装完 Hyper-v 后,可能需要重启电脑),如下图所示:

Docker之介绍与安装

Docker之介绍与安装

3.3、???? 下载 Docker

下载地址:https://www.docker.com/products/docker-desktop

Docker之介绍与安装

3.4、???? 安装 Docker

  • 双击刚才下载下来的Docker Desktop Installer.exe文件安装即可,不需要任何设置,如下图所示:

    双击打开:

    Docker之介绍与安装

    安装中:

    Docker之介绍与安装

    点击Close and restart代表需要重启电脑:

    Docker之介绍与安装

  • 电脑重启后,我们可以在 CMD 中输入如下命令查看安装的 Docker 版本:

    docker --version
    

    Docker之介绍与安装

  • 电脑重启后,Docker 会自动启动,在启动界面我们点击Accept即可,如下图所示:

    Docker之介绍与安装

    Docker之介绍与安装

  • 注意:如果启动后出现如下图所示的警告,请先下载 Linux 内核更新包进行安装更新,​ 更新包下载地址:https://aka.ms/wsl2kernel(或者点击弹出警告中的连接),更新后点击Restart按钮即可。

    Docker之介绍与安装

    Docker之介绍与安装

    安装 WSL 更新包:

    Docker之介绍与安装

    重启 Docker:

    Docker之介绍与安装

  • 重启如果出现Docker.ApiServices.WSL2.WslKernelUpdateNotInstalledException这个异常错误,说明需要安装WSL这个插件,​ 打开https://czf-net.xyz/res,下载 wsl.msi 文件,然后安装即可,再次打开 Docker Desktop 就正常了。

    Docker之介绍与安装

    Docker之介绍与安装

  • 如果重启后出现如下所示的错误警告,在 CMD 中执行如下命令并重启电脑:

    netsh winsock reset
    

    Docker之介绍与安装

    Docker之介绍与安装

    Docker.Core.DockerException:
    Failed to start
    在 Docker.Engines.LinuxkitDaemonStartup.<WaitAsync>d__5.MoveNext() 位置 C:\workspaces\4.12.x\src\github.com\docker\pinata\win\src\Docker.Engines\LinuxkitDaemonStartup.cs:行号 54
    --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    在 Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__26.MoveNext() 位置 C:\workspaces\4.12.x\src\github.com\docker\pinata\win\src\Docker.Engines\WSL2\LinuxWSL2Engine.cs:行号 170
    --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    在 Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() 位置 C:\workspaces\4.12.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:行号 29
    --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\4.12.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 67
    --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    在 Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\4.12.x\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 92
    

3.5、???? 启动 Docker

正常启动 Docker 的效果如下图所示:

Docker之介绍与安装

3.6、???? 登录 Docker

我们可以点击窗体的右上角登录按钮登录自己的 Docker 账号,如下图所示:

Docker之介绍与安装

3.7、???? 配置镜像加速地址

我们可以配置国内镜像加速下载地址,点击右上角的设置按钮,点击 Docker Engine 选项,增加如下配置,然后点击Apply & Restart按钮即可:

增加的配置:

"registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
],

完整配置:

{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
    ],
    "builder": {
        "gc": {
            "defaultKeepStorage": "20GB",
            "enabled": true
        }
    },
    "experimental": false,
    "features": {
        "buildkit": true
    }
}

设置效果图:

Docker之介绍与安装

保存后的设置会存储到C:\Users\quber\.docker\daemon.json文件中。

更多设置请参考官网:https://docs.docker.com/engine/reference/commandline/dockerd

3.8、???? 修改 Docker 数据存储位置

  • 由于 Docker 默认安装在 C 盘(C:\Program Files\Docker),这里我们需要将 Docker 的数据存储转移到其他盘,如 D:\Net_Program\Net_Docker,先退出 Docker Desktop,如下图所示:

    Docker之介绍与安装

  • 新建目录 D:\Net_Program\Net_Docker,执行如下命令导出备份数据到 D:\Net_Program\Net_Docker

    wsl --export docker-desktop-data "D:\Net_Program\Net_Docker\docker-desktop-data.tar"
    

    Docker之介绍与安装

    说明:D:\Net_Program\Net_Docker为备份的地址,docker-desktop-data.tar为备份的名称

  • 执行如下命令删除原有数据:

    wsl --unregister docker-desktop-data
    

    Docker之介绍与安装

  • 执行如下命令更改数据存储盘并恢复数据:

    wsl --import docker-desktop-data "D:\Net_Program\Net_Docker" "D:\Net_Program\Net_Docker\docker-desktop-data.tar" --version 2
    

    Docker之介绍与安装

    说明:"D:\Net_Program\Net_Docker"为更改的数据存储盘地址,"D:\Net_Program\Net_Docker\docker-desktop-data.tar"为导入的数据备份文件地址(即上面我们备份的文件地址),导入完成后在D:\Net_Program\Net_Docker下会生成一个 ext4.vhdx 的虚拟磁盘路径


4、???? 安装完成

到此,Windows 中安装 Docker 就完成了。

Docker之介绍与安装

Docker之介绍与安装

Docker之介绍与安装


5、????Windows Server 中安装 Docker

这里我们以在 Windows Server 2016 Datacenter 为例进行介绍。

由于 Windows Server 中不支持使用 Docker Desktop 直接安装,因此,需要按照一下步骤进行安装。

5.1、???? 下载更新

在运行中输入sconfig打开参数设置菜单:

Docker之介绍与安装

Docker之介绍与安装

然后输入数字 6 并确定(下载并安装更新),在弹出的黑色对话框中选择A,让它下载更新并重启,此操作必须进行,否则后续安装会失败或者各种报错类似于 Linux 各种软件版本依赖:

Docker之介绍与安装

Docker之介绍与安装

Docker之介绍与安装

以管理员身份运行 PowerShell,由于 Windows Server 2016 中文版不支持安装的 NuGet,需要使用命令将原有的 Tls一级修改为二级才能安装 NuGet 服务,执行如下命令:

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

Docker之介绍与安装

5.2、???? 安装 NuGet 服务

执行如下命令指定 NuGet 安装包最小版本:

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

Docker之介绍与安装

Docker之介绍与安装

安装 Docker 模块:

Install-Module -Name DockerMsftProvider -Force

Docker之介绍与安装

安装 Docker 包:

Install-Package -Name docker -ProviderName DockerMsftProvider -Force

Docker之介绍与安装

:::danger 注意

如果这一步安装失败,大概的错误是Install-Package :找不到路径“C:\Users\xxxx……\AppData\Local\DockerMsftProvider\Docker-17-05-2-ee-13.zip”……

定位到路径C:\Users\Administrator\AppData\Local\Temp\DockerMsftProvider,查看该文件架下是否有``,如果没有,需要手动下载https://dockermsft.blob.core.windows.net/dockercontainer/docker-1-12-2-cs2-ws-beta.zip放到这个文件夹下。

Docker之介绍与安装

最后再执行安装 Docker 包命令即可:

Install-Package -Name docker -ProviderName DockerMsftProvider -Force

:::

安装完成后重启计算机生效(注意,执行如下命令将重启电脑,请谨慎操作)

Restart-Computer -Force

Docker之介绍与安装

5.3、???? 验证 Docker

重启后,我们在 PowerShell 中输入如下命令可查看 Docker 的版本信息。

查看 Docker 的版本号或版本信息:

docker --version

Docker之介绍与安装

docker version

Docker之介绍与安装

查看 Docker 的信息:

docker info

Docker之介绍与安装

5.4、???? 修改 Docker 配置

  • 找到文件C:\ProgramData\docker\config\daemon.json,如果没有该文件就创建,填入如下配置:

    Docker之介绍与安装

    {
        "builder": {
            "gc": {
                "defaultKeepStorage": "20GB",
                "enabled": true
            }
        },
        "experimental": false,
        "features": {
            "buildkit": true
        },
        "registry-mirrors": [
            "https://registry.docker-cn.com",
            "http://hub-mirror.c.163.com",
            "https://docker.mirrors.ustc.edu.cn"
        ],
        "graph": "E:\\03Docker\\Docker"
    }

    说明:

    registry-mirrors 代表镜像加速地址;

    graph 代表 Docker 数据存储地址;

    如果出现镜像拉取失败“no matching manifest for windows/amd64 10.0.18362 in the manifest list entries”,需要将“experimental”设置为“true”,如果拉取镜像还是出现上述错误,请尝试在拉取命令后面加上:nanoserver(如 docker pull redis:nanoserver),再次拉取镜像即可成功;

    PS:nanoserver是基于 Windows 上的虚拟化实践。

    Docker之介绍与安装

  • 在 PowerShell 中分别执行如下命令重启 Docker 服务:

    net stop docker
    
    net start docker
    

    Docker之介绍与安装

    或者直接执行Restart-Service docker重启 Docker 服务:

    Docker之介绍与安装

5.5、???? 测试

我们以安装 Redis 为例,在 CMD 中执行如下命令拉取 Redis 镜像:

docker pull redis

如果出现“no matching manifest for windows/amd64 10.0.14393 in the manifest list entries”的错误提示,请将C:\ProgramData\docker\config\daemon.json配置文件中的experimental设置为true,然后重启 Docker 服务,再次拉取镜像即可成功!

Docker之介绍与安装

Docker之介绍与安装

如果拉取镜像还是出现上述错误,请在拉取镜像命令最后加上:nanoserver,再次拉取镜像即可成功!

docker pull redis:nanoserver

Docker之介绍与安装

Docker之介绍与安装

PS:nanoserver是基于 Windows 上的虚拟化实践。

5.6、Hyper-V 安装 Liunx Container

  1. 打开服务器管理器,鼠标右键选择Hyper-V 管理器,如下图所示:

    Docker之介绍与安装

  2. 在弹出的窗体中选择虚拟交换机管理器,如下图所示:

    Docker之介绍与安装

  3. 在弹窗的窗体中选择创建虚拟交换机,如下图所示:

    Docker之介绍与安装

  4. 然后填写名称和说明等信息,如下图所示:

    Docker之介绍与安装

  5. 下载 Docker-Machine

    https://github.com/docker/machine/releases去下载docker-machine-Windows-x86_64.exe,下载下来后重命名为docker-machine.exe,然后将``放入D:\01Software\Docker文件夹下,如下图所示:

    Docker之介绍与安装

    Docker之介绍与安装

  6. 以管理员身份运行CMD,并定位到D:\01Software\Docker,然后执行如下命令:

    docker-machine create -d hyperv --hyperv-virtual-switch "DockerNat" VM8
    

    说明:命令中的DockerNat就是刚才我们新建的虚拟机名称。

    然后等待命令执行完成,如下图所示:

    :::danger 注意

    如果遇到https://github.com/boot2docker/boot2docker/releases/download/v19.03.12/boot2docker.iso一直下载不下来,我们可以手动下载该文件,然后将该文件放入C:\Users\Administrator\.docker\machine\cache目录内,然后再重新执行上述命令即可。

    Docker之介绍与安装

    Docker之介绍与安装

    :::

    Docker之介绍与安装

  7. 执行如下命令,把当前主机设置为默认 Docker 命令运行的主机:

    docker-machine.exe env VM8
    

    Docker之介绍与安装

  8. 执行如下命令:

    @FOR /f "tokens=*" %i IN ('docker-machine env vm8') DO @%i
    

    Docker之介绍与安装


6、???? 设置 Vmmem 内存占用配置

默认情况下,当开启 Docker 后,Windows 中的 Vmmem 进程占用的内存非常高,如下图所示:

Docker之介绍与安装

6.1. ???? 修改.wslconfig配置

查看C:\Users\quber下是否有.wslconfig文件,没有则新建一个。

然后设置如下配置:

[wsl2]

# 设置最大占用内存为2GB
memory=2GB

更多设置请参考微软官方说明:https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig

6.2. ???? 在 CMD 中运行如下命令

wsl --shutdown

Docker之介绍与安装

6.3. ???? 然后重启 Docker Desktop

Docker之介绍与安装

我们再看设置后的效果:

Docker之介绍与安装


7、???? Portainer 安装

Portainer 的作用就相当于 Docker Desktop,只不过为 Web 端进行管理。

7.1、???? 拉取 Portainer 镜像

执行如下命令拉取 Portainer 镜像:

docker pull portainer/portainer

Docker之介绍与安装

7.2、???? 创建 Portainer 容器

新建目录D:\Net_Program\Net_Docker\Portainer\Data,用于存储 Portainer 的相关数据。

执行如下命令创建 Portainer 容器并运行:

docker run -d --name=portainer -p 8000:8000 -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v D:/Net_Program/Net_Docker/Portainer/Data:/data portainer/portainer

Docker之介绍与安装

Docker之介绍与安装

7.3、???? 运行 Web 管理端

此时我们在浏览器中访问http://localhost:9000/地址即可打开 Web 管理端:

​![web]Docker之介绍与安装

初始打开的时候,需要创建账号和密码,密码长度不少于 8 位。

创建用户进入系统后,选择第一个选项“Docker”,点击“Connect”按钮即可进入 Docker 的管理界面:

Docker之介绍与安装

Docker之介绍与安装

Docker之介绍与安装


接下来我们就可以在 Docker 中拉取各种镜像进行安装了,如:Docker 中安装 Redis