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


一、Docker里的基本概念

1、容器(Container)

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

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

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

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


2、镜像(Image)

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

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

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

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

SpringCloud-Docker安装与详解-LMLPHP

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

SpringCloud-Docker安装与详解-LMLPHP


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安装与详解-LMLPHP


三、Docker的基本操作

1、容器操作

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

SpringCloud-Docker安装与详解-LMLPHP

① 创建容器
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安装与详解-LMLPHP

① 查找镜像
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安装与详解-LMLPHP

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 必将继续在现代软件开发中扮演重要角色,为开发者提供更便捷、高效的工具和环境。

02-27 10:07