0


Docker 的安装

讲解下在 Linux 下如何安装 Docker

官网

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

Docker Hub 官网: https://hub.docker.com (有很多 Docker 镜像的仓库,可能得魔法上网)

对于 Docker 初学者,可以从官网上看文档来学习(后续我们也会经常去官网看文档):

例如有如何安装的文档:

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境(之前也说过,Docker 是基于 Linux 的虚拟化技术的)。

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。因此,Docker 如果其他系统想部署 Docker,就必须安装一个虚拟的 Linux 环境

在 Windows 上部署 Docker 的方法,通常都是先安装一个虚拟机,并在安装 Linux 系统的虚拟机中运行 Docker

准备 Linux

目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 (64-bit)上,要求系统为 64 位、Linux 系统内核版本为 3.8 以上,这里选用 Centos7.x。

读者可以使用虚拟机或者云服务器来准备 Linux。

Linux 下,可使用 uname 命令打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等):

# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)# uname -r3.10.0-957.el7.x86_64

Docker 的基本组成

安装之前,先说下 Docker 的基本组成,也是非常重要的 3 个概念。

镜像(Image)

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

它也相当于是一个 root 文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。

镜像相当于容器的“源代码”,Docker 镜像文件类似 Java 的类模板,Docker 容器实例类似于 Java 中 new 出来的实例对象。

容器(Container)

从面向对象角度来看:Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是 Java 中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

从镜像容器角度来看:可以把容器看做是一个简易版的 Linux 环境(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库(Repository)

仓库(Repository)是集中存放镜像文件的场所。

类似于其他技术中的:

  • Maven 仓库,存放各种 Jar 包的地方;
  • GitHub 仓库,存放各种 Git 项目的地方;
  • Python 仓库,存放 Python 依赖的地方;
  • Node 仓库,存放 NodeJS 依赖的地方

Docker 公司提供的官方 repository 被称为 Docker Hub,存放各种镜像模板的地方。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载:

访问国外的网站可能打不开,或者网速慢,可以使用国内的公开仓库阿里云 、网易云等。

小结

需要正确的理解仓库/镜像/容器这几个概念:

Docker 本身是一个容器运行载体,也可称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是 image 镜像文件。只有通过这个镜像文件才能生成 Docker 容器实例(类似 Java 中 new 出来一个对象)。

image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

镜像文件:image 文件生成的容器实例,本身也是一个文件,称为镜像文件

容器实例:一个容器运行一种服务,当我们需要的时候,就可以通过 Docker 创建一个对应的运行实例,也就是我们的容器

仓库:就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了

Docker 平台架构图解(入门篇)

为了能简单了解 Docker 的内部原理,我们讲解下 Docker 内部的架构,为以后深入学习做准备。

先简单看个图:

从左到右依次是:客户端,Docker 服务端,镜像仓库。

Docker 是一个 Client-Server 结构的系统,Docker 守护进程运行在主机上, 然后通过 Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。(可以看到 Docker 服务端中有个 daemon 的单词,就是指守护进程)

可以类比 MySQL,启动 MySQL 后,后台会有一个 MySQL 的进程;然后可以通过 Navicat 等客户端工具连接 MySQL 并操作。

在 Docker 服务端中,还能看到 Containers 和 Images 两个组成,也就是在创建容器的时候,首先会判断本地有无该镜像,没有则去仓库中获取(docker pull);然后再创建容器。

Docker 平台架构图解(架构版)

这里讲解下更深层次的架构图解,有个印象即可,为之后的大厂篇做准备。

Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。Docker 运行的基本流程为:

  1. 用户使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者
  2. Docker Daemon 作为 Docker 架构中的主体部分,提供 Docker Server 的功能使其可以接受 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 来实现具体对容器进行的操作。

示意图:

Centos7 上安装

安装文档:https://docs.docker.com/engine/install/centos/

授人以鱼不如授人以渔,要怎么找到这个安装文档呢?首先一般这些开源框架的官网上,都会有 Docs:

然后就能看到有 install 的分类:

然后在左侧菜单能看到有相关的文档:

其实看文档并不复杂(可能对英语有一点点要求)。接下来我们按步骤来:

  • 确定 CentOS 版本
  • 卸载旧版本
  • yum 安装 gcc 相关
  • 安装需要的软件包
  • 设置 stable 镜像仓库
  • 更新 yum 软件包索引
  • 安装 DOCKER CE
  • 启动 docker

确定 CentOS 版本

官网说明:

To install Docker Engine, you need a maintained version of one of the following CentOS versions:

  • CentOS 7
  • CentOS 8 (stream)
  • CentOS 9 (stream)

The

centos-extras

​ repository must be enabled. This repository is enabled by default, but if you have disabled it, you need to re-enable itopen_in_new.

也就是要求 Centos7 及以上版本。我们执行该命令查看版本:

# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

卸载旧版本

官网文档:

Uninstall old versions

Older versions of Docker went by the names of

docker

​ or

docker-engine

​. Uninstall any such older versions before attempting to install a new version, along with associated dependencies.

$ sudo yum remove docker\
               docker-client \
               docker-client-latest \
               docker-common \
               docker-latest \
               docker-latest-logrotate \
               docker-logrotate \
               docker-engine
yum

​ might report that you have none of these packages installed.

Images, containers, volumes, and networks stored in

/var/lib/docker/

​ aren’t automatically removed when you uninstall Docker.

有时候 Centos 会默认安装一些软件,然而这些软件一般是过时了的,因此得卸载。执行:

$ sudo yum remove docker\
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

yum 安装 gcc 相关

gcc 这些可以说是基本的安装包了,执行:

yum -yinstall gcc gcc-c++

安装需要的软件包,设置 stable 镜像仓库

官网文档:

Installation methods

You can install Docker Engine in different ways, depending on your needs:

  • You can set up Docker's repositories and install from them, for ease of installation and upgrade tasks. This is the recommended approach.
  • You can download the RPM package and install it manually and manage upgrades completely manually. This is useful in situations such as installing Docker on air-gapped systems with no access to the internet.
  • In testing and development environments, you can use automated convenience scripts to install Docker.

大意:你可以用不同方式安装 Docker 引擎,这取决于你的需求:

  • 可以设置并安装 Docker repository(推荐使用)
  • 使用 rpm 方式安装(相当于下载离线安装包)
  • 使用脚本安装

这里我们用第一种,设置并安装 Docker repository。文档说明:

Install using the rpm repository

Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.

sudo yum install-y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

但是!该 repository 是国外的,由于某些不可描述的原因,使用该地址,后续安装经常会因为网络问题导致安装失败:

[Errno 14]curl#35 - TCP connection reset by peer[Errno 12]curl#35 - Timeout

因此我们得修改下地址为国内阿里云的:

sudo yum install-y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 软件包索引

该步骤官网没有,这是 Centos 的基础知识,建议执行下

yum makecache fast

安装 DOCKER CE

终于开始安装 Docker 引擎了,官网文档:

Install Docker Engine

install Docker Engine, containerd, and Docker Compose:

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完后,可以看看版本信息:

$ sudodocker version
Client: Docker Engine - Community
 Version:           24.0.5
 API version:       1.43
 Go version:        go1.20.6
 Git commit:        ced0996
 Built:             Fri Jul 2120:39:02 2023
 OS/Arch:           linux/amd64
............

启动 Docker

执行:

sudo systemctl start docker

然后我们可以执行

systemctl status docker

​来查看 Docker 状态:running 说明正常启动了

也可以查看下 Docker 的进程:

ps-ef|grepdocker

测试

官网文档:

Verify that the Docker Engine installation is successful by running the

hello-world

​ image.

$ sudodocker run hello-world

我们执行上述命令,Docker 就会帮我们启动一个

hello-world

​实例。运行结果:

[root@10 peterjxl]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete 
Digest: sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
..........

可以看到一开始首先提示本地没有镜像

'hello-world:latest'

​,然后就会从仓库中拉取(pulling)

等输出完提示后,HelloWorld 就会停止运行,并且自动终止。那么 Docker run 干了什么?示意图:

Docker 的卸载

这里仅仅是说明怎么卸载,由于后续学习还要用到 Docker,这里就先不卸载。参考文档:

Uninstall Docker Engine

  1. Uninstall the Docker Engine, CLI, containerd, and Docker Compose packages:$ sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
  2. Images, containers, volumes, or custom configuration files on your host aren’t automatically removed. To delete all images, containers, and volumes:$ sudorm-rf /var/lib/docker$ sudorm-rf /var/lib/containerd

You have to delete any edited configuration files manually.

(完)

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/weixin_38125348/article/details/141884989
版权归原作者 PeterJXL 所有, 如有侵权,请联系我们删除。

“Docker 的安装”的评论:

还没有评论