Docker安装与配置

发布时间:2024-11-21 人气:119次

为什么出现 Docker?传统的开发和部署存在着许多环境和配置的不兼容的问题,docker 就是将环境和代码统一打包的来解决这些兼容问题。Docker 是一个统一了运行环境和配置问题的虚拟容器技术,是一个内核级虚拟技术。使用镜像,保证了处处环境的一致性。

掌握 docker 等容器技术是已经成为了必备技能,尤其对于云原生环境应用的构建、部署,docker 又是最关键的基础。

简介

我们知道,如果将计算机的层次做一下简单的划分,最底层是硬件,最上层是软件,中间是操作系统

我们非常熟悉的虚拟机,就是一个物理硬件层抽象,运行在硬件之上:它向下面对一套硬件和硬件接口,对其进行虚拟,然后向上提供一套独立的操作系统,然后就可以在操作系统之上再运行各种软件应用等

这就使得虚拟机这个东西非常庞大沉重,启动时间长,且不容易移植,因为我们知道,在安装操作系统的时候,会根据硬件的不同编译出不同的内核,而每台电脑的硬件配置几乎不会完全一样,因而直接把一台电脑的操作系统文件拷到另一台一般是没法启动的

而容器是一个应用层抽象,运行在操作系统之上的,确切地说是操作系统内核之上(如下图左),面对的是操作系统提供的接口,属于进程级别;容器对我们的代码和依赖进行打包,比如一个 docker 中只有一个 python3,还有 TensorFlow 以及其他的 package(经常会在一个 docker 中发现连“sudo”命令都没有);这样体积就很小,启动快(几秒几毫秒),且容易移植(不同硬件上的同一操作系统向上提供相同的接口)。

可以将容器镜像看作是 mini 版的虚拟机,但两者并不相通,先来看看二者优缺点。

优缺点

传统的虚拟技术要在一个机器上安装虚拟机、各种软件,再部署应用,存在一系列的缺点:

需要虚拟出一套完整的硬件后,运行一个完整的操作系统,在系统上运行所需的应用程序

启动慢

资源占用多

冗余步骤多

迁移困难

而 Docker 使用容器化技术完美的解决了这些问题,其具备:

直接运行与宿主机的内核

容器内没有自己内核,没有进行硬件虚拟,更轻量

容器相互隔离,互不影响

更快交付、部署

便捷升级和扩容

统一标准、更简单的运维

节约成本

有了容器化技术对于应用的部署更加方便,也更好维护,这也促使云原生的发展。

docker 架构

Docker 架构分为客户端-服务器架构和主从架构,具体如下:

客户端-服务器架构:Docker 采用客户端-服务器架构,其中客户端是 Docker 命令行工具,用于与 Docker 服务端通信。Docker 服务端是 Docker 引擎,负责管理和运行 Docker 容器。客户端和服务端可以运行在同一台机器上,也可以通过网络连接运行在不同的机器上。

主从架构:Docker Swarm 是一个用于管理多个 Docker 容器的集群工具,采用主从架构。Docker Swarm 集群由一个管理节点和多个工作节点组成,管理节点负责整个集群的管理和调度,工作节点负责运行 Docker 容器。管理节点和工作节点可以运行在同一台机器上,也可以通过网络连接运行在不同的机器上。

docker架构图.jpg

docker 所安装的镜像在本地都是一个个文件,可以通过docker info查看存储位置

Docker 三大组件

镜像(Image):一个 root 文件系统的模板,相当于 一个类

容器(Container):docker run 镜像就是容器(最小的 linux 内核文件和运行的应用程序),镜像和容器的关系,就像是面向对象程序设计中的类 和实例一样,镜像是静态的定义,容器是镜像运行时的实体

仓库(Repositry):保存镜像的仓库,每个仓库可以包含多个 Tag,对应不同的镜像

安装

本文基于 ARM 架构 Centos7 虚拟机安装的,如果你的环境和我不一致,可以参考官方安装文档[1]或其他资料

卸载掉机器上可能存在的 docker 相关依赖,如果你没有安装过,可以忽略此步骤

sudo yum remove docker \

  docker-client \

  docker-client-latest \

  docker-common \

  docker-latest \

  docker-latest-logrotate \

  docker-logrotate \

  docker-engine

配置 docker 仓库地址

sudo yum install -y yum-utils


# 设置ali仓库加速地址

sudo yum-config-manager \

    --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

下载 docker 这里你可以根据自己的需求安装指定版本的 docker,不指定版本默认 latest 最新版本

# 查看可安装的版本

yum list docker-ce --showduplicates | sort -r


# 这里安装最新版

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

启动 docker 并配置开机自启

systemctl enable docker --now

查看 docker 状态

# 查看运行状态

systemctl status docker

● docker.service - Docker Application Container Engine

   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

   Active: active (running) since 四 2023-03-23 22:22:10 CST; 7h left

     Docs: https://docs.docker.com

 Main PID: 1406 (dockerd)

    Tasks: 9

   Memory: 100.0M

   CGroup: /system.slice/docker.service

           └─1406 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock


# 查看版本

docker version

Client: Docker Engine - Community

 Version:           23.0.1

 API version:       1.42

 Go version:        go1.19.5

 Git commit:        a5ee5b1

 Built:             Thu Feb  9 19:49:05 2023

 OS/Arch:           linux/arm64

 Context:           default


Server: Docker Engine - Community

 Engine:

  Version:          23.0.1

  API version:      1.42 (minimum version 1.12)

  Go version:       go1.19.5

  Git commit:       bc3805a

  Built:            Thu Feb  9 19:47:21 2023

  OS/Arch:          linux/arm64

  Experimental:     false

 containerd:

  Version:          1.6.18

  GitCommit:        2456e983eb9e37e47538f59ea18f2043c9a73640

 runc:

  Version:          1.1.4

  GitCommit:        v1.1.4-0-g5fd4c4d

 docker-init:

  Version:          0.19.0

  GitCommit:        de40ad0


运行hello-world镜像

docker run hello-world

Unable to find image 'hello-world:latest' locally

latest: Pulling from library/hello-world

93288797bd35: Pull complete

Digest: sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f

Status: Downloaded newer image for hello-world:latest


Hello from Docker!

以上运行hello-world镜像时需要先从远程仓库下载镜像到本地,然后才可以运行,由于 docker 的官方仓库在国外,对于国内用户访问比较慢,因此需要配置一些国内镜像加速地址,才会加快下载速度

配置

配置vim /etc/docker/daemon.json没有此文件的可以自行创建 json 文件

{

  "registry-mirrors": [

    // aliyun

    "https://xxxxxx.mirror.aliyuncs.com",

    // 网易

    "https://hub-mirror.c.163.com",

    // 腾讯

    "https://mirror.ccs.tencentyun.com",

    // 国内docker

    "https://registry.docker-cn.com",

    // 科大

    "https://docker.mirrors.ustc.edu.cn"

  ]

}

更多配置参考 👉官方 daemon 配置文档[2]

修改了配置文件后需要重启服务:

systemctl daemon-reload

systemctl restart docker


选择订阅-通过 Docker 订阅在协作、安全性和支持之间找到完美的平衡!
在线客服
联系方式

热线电话

18221674630

上班时间

周一到周五

公司电话

18221674630

二维码
线
获取免费体验资格

提交后,我们将在3个小时内与您联系