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 的工作流程可以简单概述为以下几个步骤:
- 编写 Dockerfile 文件,定义应用及其依赖。
- 使用 Docker CLI 构建镜像。
- 通过 Docker CLI 启动容器。
- 运行应用。
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,希望能激励你尽快动手实践,体验其带来的便利与高效。