SpringCloud-Docker安装与详解

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


一、Docker里的基本概念

1、容器**(Container)**

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

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

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

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

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

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


2、镜像**(Image)**

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

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

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

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

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


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,建议先将其卸载。

可以使用以下命令:

bash 复制代码
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 工具:

bash 复制代码
yum install -y yum-utils \
    device-mapper-persistent-data \
    1vm2 --skip-broken

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

bash 复制代码
#设置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:

bash 复制代码
sudo yum install -y docker-ce #-y表示按默认配置安装

3、启动Docker

① 关闭防火墙

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

bash 复制代码
#关闭
systemct1 stop fi rewalld
#禁止开机启动防火墙
systemct1 disable firewalld

② 启动Docker

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

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

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

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

bash 复制代码
docker -v

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

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


③ 配置镜像加速器

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

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


三、Docker的基本操作

1、容器操作

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

① 创建容器
bash 复制代码
docker run [options] image [command] [args...]

例如:

bash 复制代码
docker run -it ubuntu /bin/bash

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


② 列出所有容器
bash 复制代码
docker ps -a

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


③ 停止容器
bash 复制代码
docker stop container_id

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


④ 删除容器
bash 复制代码
docker rm container_id

删除已停止的容器。


⑤ 启动已停止的容器
bash 复制代码
docker start container_id

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


⑥ 重启容器
bash 复制代码
docker restart container_id

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


⑦ 进入容器
bash 复制代码
docker exec -it container_id /bin/bash

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


⑧ 查看容器日志
bash 复制代码
docker logs container_id

查看容器的标准输出。


⑨ 查看容器统计信息
bash 复制代码
docker stats container_id

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


⑩ 查看容器详细信息
bash 复制代码
docker inspect container_id

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


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

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


2、镜像操作

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

① 查找镜像
bash 复制代码
docker search image_name

在 Docker Hub 上查找镜像。


② 拉取镜像
bash 复制代码
docker pull image_name

从 Docker Hub 拉取指定的镜像。


③ 列出本地镜像
bash 复制代码
docker images

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


④ 删除本地镜像
bash 复制代码
docker rmi image_id

删除本地的镜像。


⑤ 构建镜像
bash 复制代码
docker build -t image_name:tag

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


⑥ 推送镜像到仓库
bash 复制代码
docker push image_name:tag

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


⑦ 查看镜像历史记录
bash 复制代码
docker history image_name

⑧ 导出镜像为文件

bash 复制代码
docker save -o output_file.tar.gz image_name

将镜像打包为一个文件。


⑨ 从文件中导入镜像

bash 复制代码
docker load -i input_file.tar.gz

从文件中导入一个镜像。


查看镜像详细信息
bash 复制代码
docker inspect image_name

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


3、数据卷操作

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

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

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


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

① 创建数据卷
bash 复制代码
docker volume create volume_name

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

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


② 列出所有数据卷
bash 复制代码
docker volume ls

列出所有数据卷的信息。


③ 查看数据卷详细信息
bash 复制代码
docker volume inspect volume_name

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


④ 删除数据卷
bash 复制代码
docker volume rm volume_name

删除指定的数据卷。


⑤ 将数据卷挂载到容器

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

bash 复制代码
docker run -v volume_name:/container_path image_name

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

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

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

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

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


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

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


⑧ 挂载匿名数据卷
bash 复制代码
docker run -v /host_path image_name

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


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

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


四、Docker-Compose的使用

1、Docker-Compose介绍

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

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

bash 复制代码
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 文件,内容如下:

bash 复制代码
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"

③ 构建和启动微服务集群

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

bash 复制代码
docker-compose up -d --build

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


④ 查看微服务状态

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

bash 复制代码
docker-compose ps

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


五、Docker总结

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

相关推荐
confiself11 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
Wlq041516 分钟前
J2EE平台
java·java-ee
XiaoLeisj23 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
材料苦逼不会梦到计算机白富美34 分钟前
golang分布式缓存项目 Day 1
分布式·缓存·golang
豪宇刘37 分钟前
SpringBoot+Shiro权限管理
java·spring boot·spring
Elaine20239142 分钟前
02多线程基础知识
java·多线程
gorgor在码农44 分钟前
Redis 热key总结
java·redis·热key
想进大厂的小王1 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
Java 第一深情1 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
阿尔帕兹1 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker