相关推荐recommended
SpringCloud-Docker安装与详解
作者:mmseoamin日期:2024-03-04

Docker 是一款强大的容器化平台,通过其轻量级的容器技术,使应用程序的开发、部署和管理变得更加便捷和高效。本文将深入探讨 Docker 的安装过程,并详细解析其基本概念、组件及常用命令,以帮助读者充分理解和熟练使用 Docker。企业部署一般都是采用 Linux 操作系统,而其中又数 CentOS 发行版占比最多,因此我们在 CentOS 下安装 Docker。


一、Docker里的基本概念

1、容器(Container)

容器是 Docker 的核心概念之一。它是一个独立运行的软件包,包含应用程序和其所有依赖项,例如库、运行时和系统工具。容器通过 Docker 引擎进行管理,具有轻量级和可移植性的特点。

这么说是不是有点抽象,下面举个生动点的例子:

想象一下容器就像是一个移动的盒子,但不是普通的盒子,而是一个包含应用程序、运行环境以及所有所需依赖的特殊盒子。这个盒子具有一定的隔离性,就像是一个独立的小世界,里面的应用程序不会干扰外部的系统。

在这个盒子里,应用程序可以自己携带所需的一切,无论是代码、库、配置文件还是其他依赖,就像是一个自给自足的小单元。这使得这个盒子可以在任何支持容器技术的地方运行,而不会受到外部环境的影响。 

容器就像是移动的、自包含的应用程序集装箱,可以在任何地方顺利运行,让软件的开发、测试和部署变得更加简便和可靠。

容器的好处在于它们轻量、快速,而且非常灵活。你可以在一台计算机上开发和测试容器,然后轻松地将它们部署到另一台计算机上,而不必担心环境差异。这种便携性和一致性让容器成为现代软件开发和部署的理想选择。


2、镜像(Image)

镜像是容器的基础,是一个只读的文件,包含了应用程序运行所需的所有信息,包括代码、运行时、库、环境变量等。镜像是容器的模板,可以通过它创建并运行多个相同的容器。

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

镜像是分层结构,每一层称为一个Layer:

  • Baselmage层:包含基本的系统函数库、环境变量、文件系统。
  • Entrypoint:入口,是镜像中应用启动的命令。
  • 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置。

    SpringCloud-Docker安装与详解,第1张

    除了很多被封装好的镜像外,我们也可以用 Dockerfile 来自定义镜像,这里仅作了解。

    SpringCloud-Docker安装与详解,第2张


    3、仓库(Repository)

    Docker 仓库是用来存储和共享镜像的地方。

    官方仓库是Docker Hub,用户可以在其中找到并下载各种官方和社区创建的镜像。

    镜像仓库 (Docker Registry) 有公共的和私有的两种形式:

    • 公共仓库:例如 Docker 官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
    • 私有仓库:除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry,企业自己的镜像最好是采用私有 Docker Registry 来实现。

      我们可以根据需要,通过更改镜像仓库源的方式,灵活选择镜像仓库。


      二、安装Docker

      Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期7个月),EE 即企业版,强调安全,付费使用,支持周期24个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的安装指南,这里主要介绍 Docker CE 在 CentOS 上的安装。

      Docker CE 支持64位版本 CentOS 7,并且要求内核版本不低于 3.10,CentOS 7 满足最

      低内核的要求,所以我们在 CentOS 7 安装Docker。

      1、卸载已有的Docker

      如果系统中已经安装了旧版本的 Docker,建议先将其卸载。

      可以使用以下命令:

      yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-selinux \
          docker-engine-selinux \
          docker-engine \
          docker-ce
      

      这里的 \ 是换行的意思,告诉计算机我们的一条指令在当前行没有结束,需要继续读取下一行。 

      这个命令卸载系统中已存在的 Docker 软件包。但不会删除容器、镜像等数据


      2、CentOS7安装Docker

      接下来,我们将安装 Docker。

      首先,安装一些 yum 工具:

      yum install -y yum-utils \
          device-mapper-persistent-data \
          1vm2 --skip-broken
      

      然后,更新本地镜像源为阿里源:

      #设置docker镜像源
      yum-config-manager \
          --add-repo \
          https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
      yum makecache fast

      安装 Docker:

      sudo yum install -y docker-ce #-y表示按默认配置安装

      3、启动Docker

      ① 关闭防火墙

      Docker应用需要用到各种端口,逐一去修改防火墙设置。 非常麻烦,因此建议大家直接关
      闭防火墙!启动docker前,一定要关闭防火墙!!!

      #关闭
      systemct1 stop fi rewalld
      #禁止开机启动防火墙
      systemct1 disable firewalld

      ② 启动Docker

      启动 Docker 服务,并设置为开机自启:

      sudo systemctl start docker
      sudo systemctl enable docker

      现在,Docker 已经成功安装并启动在 CentOS 7 上。

      输入命令,可以查看 Docker 版本:

      docker -v

      这将显示 Docker 的版本信息,确认安装成功。

      至此,我们已经完成了 CentOS 7 上 Docker 的安装和配置。


      ③ 配置镜像加速器

      由于 Docker 的官方镜像源在国外,网速较差,我们可以根据需要设置国内镜像:

      (建议自行百度,查阅参考 阿里云官方的最新镜像加速文档)

      SpringCloud-Docker安装与详解,第3张


      三、Docker的基本操作

      1、容器操作

      Docker 提供了许多命令来管理容器,以下是一些常见的 Docker 容器操作命令:

      SpringCloud-Docker安装与详解,第4张

      ① 创建容器
      docker run [options] image [command] [args...]

      例如:

      docker run -it ubuntu /bin/bash

      这将创建一个以交互模式运行的 Ubuntu 容器。


      ② 列出所有容器
      docker ps -a

      这将列出所有容器的详细信息,包括运行中的和已停止的容器。


      ③ 停止容器
      docker stop container_id

      通过容器的 ID 或者名称停止运行中的容器。


      ④ 删除容器
      docker rm container_id

      删除已停止的容器。 


      ⑤ 启动已停止的容器
      docker start container_id

      通过容器的 ID 或者名称启动已停止的容器。


      ⑥ 重启容器
      docker restart container_id

      通过容器的 ID 或者名称重启容器。


      ⑦ 进入容器
      docker exec -it container_id /bin/bash

      以交互模式进入正在运行的容器。


      ⑧ 查看容器日志
      docker logs container_id

      查看容器的标准输出。


      ⑨ 查看容器统计信息
      docker stats container_id

      查看容器的资源使用情况。


      ⑩ 查看容器详细信息
      docker inspect container_id

      查看有关容器的详细信息,包括配置、网络设置等。


      ⑪ 复制文件到/从容器
      docker cp source_path container_id:destination_path
      docker cp container_id:source_path destination_path

      将文件复制到或从容器中。


      2、镜像操作

      Docker 提供了丰富的命令来管理镜像,以下是一些常见的 Docker 镜像操作命令:

      SpringCloud-Docker安装与详解,第5张

      ① 查找镜像
      docker search image_name

      在 Docker Hub 上查找镜像。


      ② 拉取镜像
      docker pull image_name

      从 Docker Hub 拉取指定的镜像。


      ③ 列出本地镜像
      docker images

      列出本地已经下载的镜像。


      ④ 删除本地镜像
      docker rmi image_id

      删除本地的镜像。


      ⑤ 构建镜像
      docker build -t image_name:tag

      根据当前目录中的 Dockerfile 构建一个新的镜像。


      ⑥ 推送镜像到仓库
      docker push image_name:tag

      将本地的镜像推送到远程镜像仓库。


      ⑦ 查看镜像历史记录
      docker history image_name

      ⑧ 导出镜像为文件

      docker save -o output_file.tar.gz image_name

      将镜像打包为一个文件。 


      ⑨ 从文件中导入镜像

      docker load -i input_file.tar.gz

      从文件中导入一个镜像。 


      ⑩ 查看镜像详细信息
      docker inspect image_name

      查看有关镜像的详细信息,包括配置、挂载点等。


      3、数据卷操作

      数据卷的建立是为了解决容器与数据耦合的问题。Docker 数据卷是一种用于在容器之间共享和持久化数据的机制。它提供了一种绕过容器文件系统的方式,将数据存储在主机上,并使多个容器能够访问相同的数据。

      数据卷 (volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。

      SpringCloud-Docker安装与详解,第6张

      Docker 数据卷的原理是通过将容器与主机上的目录或预定义的卷进行关联,使得数据能够持久化保存,并且可以被多个容器之间共享。这种机制为容器提供了灵活且可靠的数据存储方式。


        以下是一些常见的 Docker 数据卷操作命令:

      ① 创建数据卷
      docker volume create volume_name

      使用 docker volume create 命令可以创建一个新的数据卷。

      每个数据卷都有一个唯一的名称,用于标识它。


      ② 列出所有数据卷
      docker volume ls

      列出所有数据卷的信息。


      ③ 查看数据卷详细信息
      docker volume inspect volume_name

      查看有关数据卷的详细信息,包括挂载点等。


      ④ 删除数据卷
      docker volume rm volume_name

      删除指定的数据卷。


      ⑤ 将数据卷挂载到容器

      当运行容器时,可以使用 -v 或 --volume 选项将一个或多个数据卷挂载到容器的指定路径。这样,容器就可以访问数据卷上的数据:

      docker run -v volume_name:/container_path image_name

      这将把数据卷 volume_name 挂载到容器的 /container_path。

      数据卷的挂载具有共享性和持久性:

      • 多个容器可以同时挂载同一个数据卷,实现数据在容器之间的共享。这样,它们可以读取和写入相同的数据卷,实现数据的一致性和共享。
      • 数据卷上的数据是持久化存储的,即使容器停止或删除,数据卷仍然存在,可以被其他容器重新挂载。这使得数据在容器的生命周期内得以保留。

      ⑥ 从容器中复制数据到数据卷
      docker cp source_path container_id:/volume_name/destination_path

      将容器中的数据复制到指定的数据卷。


      ⑦ 从数据卷中复制数据到容器
      docker cp container_id:/volume_name/source_path destination_path

      将数据卷中的数据复制到容器的指定路径。


      ⑧ 挂载匿名数据卷
      docker run -v /host_path image_name

      使用匿名数据卷将宿主机路径 /host_path 挂载到容器。 


      ⑨ 删除容器时保留数据卷
      docker run -v volume_name:/container_path --rm image_name

      在删除容器时保留数据卷。


      四、Docker-Compose的使用

      1、Docker-Compose介绍

      Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个简单的  docker-compose.yml 文件帮我们快速的部署分布式应用,定义应用的服务、网络和卷等配置,而无需手动一个个创建和运行容器。

      以下是一个简单的 docker-compose.yml 文件:

      version: '3'
      services:
        web:
          image: nginx:latest
          ports:
            - "8080:80"
        db:
          image: postgres:latest
          environment:
            POSTGRES_PASSWORD: example

      通过运行 docker-compose up 命令,即可启动包含 Nginx 和 PostgreSQL 服务的 Docker 应用。


      2、部署微服务集群

      为了更好地理解 Docker 的应用,我们可以通过一个简单的实战案例来深入了解。假设我们要搭建一个简单的微服务集群,包括 Nacos 作为服务注册与发现中心、MySQL 数据库、以及用户服务、订单服务和网关服务。

      ① 准备工作

      确保已经安装 Docker 和 Docker Compose。创建一个项目目录,例如 microservices,在该目录下放置你的 Docker Compose 配置文件。


      ② 编写Docker-Compose文件

      创建docker-compose.yml 文件,内容如下:

      version: "3.2"
      services:
        nacos:
          image: nacos/nacos-server
          environment:
            MODE: standalone
          ports:
            - "8848:8848"
        mysq1:
          image: mysql:5.7.25
          environment:
            MYSQL_ROOT_PASSWORD: 123
          volumes:
            - "SPhD/mysql/data:/var/lib/mysql"
            - "SPhD/mysql/conf:/etc/mysql/conf.d/"
        userservice:
          build: ./user-service
        orderservice:
          build: ./order-service
        gateway:
          build: ./gateway
          ports:
            - "10010:10818"
      

      ③ 构建和启动微服务集群

      在项目目录中执行以下命令:

      docker-compose up -d --build

      通过运行 docker-compose up 命令,即可构建并启动所有定义的服务,并以后台方式运行。等待一段时间,直到所有服务完全启动。


      ④ 查看微服务状态

      使用以下命令查看当前运行的服务:

      docker-compose ps

      通过这个案例,我们可以看到 Docker 的强大之处,它使得应用的构建、运行和部署变得非常简单且可重复。


      五、Docker总结

      Docker 的安装非常简单,就像安装一个应用程序一样,只需使用包管理器或者 Docker Desktop,在各种操作系统上都能轻松完成。掌握 Docker 的基础知识和常用命令,能够更好地利用和理解它的功能。Docker 之所以受欢迎,是因为它提供了一种轻量级、便携且高效的容器化解决方案。它让开发者可以灵活地部署应用程序,保证在不同环境中的一致性和高效性。通过实际操作案例,我们学会了如何使用 Docker 来创建一个简单的 Web 应用,展示了它的强大功能和易用性。随着容器技术的不断进步,Docker 必将继续在现代软件开发中扮演重要角色,为开发者提供更便捷、高效的工具和环境。