Docker 实验报告

引言

Docker 是一个开源的应用容器引擎,可以对应用及其依赖进行打包、分发和管理。通过容器化的技术,Docker 提供了一种轻量级的虚拟化方案,实现了在不同环境中的一致性及可移植性。本文将介绍 Docker 的基本概念,以及如何通过简单的示例进行实验。

1. Docker 的基本概念

1.1 容器与镜像

  • 镜像(Image): 它是一个包含应用及其环境的不可变文件系统。可以看作是应用的蓝图。
  • 容器(Container): 它是镜像的一个实例,是一个沙箱环境,运行在操作系统之上。容器是轻量且隔离的,多个容器可以共享同一操作系统内核。

1.2 Docker 的组件

Docker 的核心组件包括:

  • Docker Daemon: Docker 的后台服务,负责管理容器和镜像。
  • Docker CLI: Docker 的命令行工具,用户通过它与 Docker Daemon 进行交互。
  • Docker Hub: 一个公共的镜像注册中心,可以用于托管和分发镜像。

1.3 Docker 的工作流程

Docker 的工作流程可以简单概述为以下几个步骤:

  1. 编写 Dockerfile 文件,定义应用及其依赖。
  2. 使用 Docker CLI 构建镜像。
  3. 通过 Docker CLI 启动容器。
  4. 运行应用。

2. 实验示例

接下来,我们将通过一个简单的 Node.js 应用示例来展示 Docker 的使用。

2.1 编写 Dockerfile

我们首先需要创建一个 Dockerfile,定义构建镜像的步骤。在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

# 使用官方的 Node.js 镜像作为基础镜像
FROM node:14

# 设置应用目录
WORKDIR /usr/src/app

# 将 package.json 和 package-lock.json 复制到工作目录
COPY package*.json ./

# 安装依赖
RUN npm install

# 将应用代码复制到工作目录
COPY . .

# 暴露应用端口
EXPOSE 3000

# 定义容器启动命令
CMD [ "node", "app.js" ]

2.2 构建 Docker 镜像

在终端中运行以下命令以构建镜像:

docker build -t my-node-app .

这里,-t 参数用于标记镜像的名称,. 指定 Dockerfile 的位置。

2.3 运行 Docker 容器

构建完成后,我们可以运行容器并测试应用。运行以下命令:

docker run -p 3000:3000 my-node-app

此命令将容器的 3000 端口映射到主机的 3000 端口。

2.4 验证应用

在浏览器中访问 http://localhost:3000,如果一切正常,你应该可以看到应用的欢迎页面。

3. 类图与关系图

在这个 Docker 实验中,存在多个关键组件和它们之间的关系。下面,我们将利用 Mermaid 语法来分分别展示类图与关系图。

3.1 类图

以下是应用中主要类的类图,展示了其属性和方法:

classDiagram
    class App {
        +string name
        +string version
        +start()
        +stop()
    }
    class Database {
        +string dbName
        +connect()
        +disconnect()
    }
    class User {
        +string username
        +string password
        +login()
        +logout()
    }
    App --> Database : uses
    App --> User : interacts

3.2 关系图

以下是 Docker 中各个组件之间的关系图:

erDiagram
    Docker Daemon {
        string name
    }
    Docker CLI {
        string command
    }
    Docker Hub {
        string repository
    }
    Docker Daemon ||--o{ Docker CLI : manages
    Docker Daemon ||--o{ Docker Hub : interacts

4. 总结

本文详细介绍了 Docker 的基本概念,工作流程,并通过一个 Node.js 应用示例展示了如何使用 Docker 构建和运行容器化的应用。我们还使用 Mermaid 语法绘制了类图和关系图,帮助我们更好地理解程序结构及组件关系。

Docker 极大地简化了应用的部署与管理,让开发者可以关注应用的逻辑而不是环境配置。随着容器化技术的不断发展,Docker 将在软件开发和运维中发挥越来越重要的作用。

在未来,学习和掌握 Docker 技术将是每个开发者必备的技能之一。如果你还未尝试过 Docker,希望能激励你尽快动手实践,体验其带来的便利与高效。