绿联 Docker 教程

什么是 Docker?

Docker 是一个开源平台,旨在简化软件应用的开发、部署和运行。它实现了轻量级的虚拟化,使得开发者能够通过容器技术将应用和所有依赖项捆绑在一起,从而确保应用在任何环境中都能一致运行。Docker 容器是独立的、可移植的、自动化的、轻量级的,与操作系统隔离,但可以与基础系统共享资源。

容器与虚拟机的区别

在深入 Docker 的使用之前,我们首先了解一下容器与虚拟机的区别。

特性 容器 虚拟机
启动速度 快速 较慢
资源开销 轻量 较重
兼容性 ESX、KVM 和 LXC 需要完整的操作系统
硬件利用率 较高 较低

通过表格,我们可以清晰地了解到容器和虚拟机在资源利用率和启动速度上的显著差异。

Docker 的基本概念

在学习 Docker 之前,了解以下几个基本概念是十分必要的:

  • 镜像 (Image):Docker 镜像是一个包含了应用所需要的代码、库、依赖和文件系统设置的只读模板。
  • 容器 (Container):容器则是一个运行中的镜像实例,它是可以读写的。
  • Dockerfile:一个包含了创建 Docker 镜像指令的文本文件。
  • Docker Hub:Docker 的公共云端镜像库,提供了许多预构建的应用镜像。

创建第一个 Docker 容器

下面我们将带你通过简单的步骤在本地机器上创建你的第一个 Docker 容器。

步骤 1: 安装 Docker

首先,你需要在你的操作系统上安装 Docker。可以在 [Docker 官方网站]( 下载处理程序并根据平台官网的指导进行安装。

步骤 2: 编写 Dockerfile

我们将创建一个简单的 Node.js 应用作为示例。首先,创建一个名为 Dockerfile 的新文件,并写入以下内容:

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

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用代码到容器中
COPY . .

# 暴露 8080 端口
EXPOSE 8080

# 启动应用
CMD [ "node", "app.js" ]

步骤 3: 构建镜像

Dockerfile 所在目录下,打开终端并运行以下命令以构建 Docker 镜像:

docker build -t my-node-app .

步骤 4: 运行容器

构建完成后,可以使用以下命令运行容器:

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

现在,你的 Node.js 应用已经在 Docker 容器中运行并且可以通过 http://localhost:8080 访问。

类图示例

下面是一个基本的类图,该图展示了 Node.js 应用程序的组成部分与 Docker 的关系:

classDiagram
    class Docker {
        +Image
        +Container
        +Dockerfile
        +run()
    }
    class NodeApp {
        +start()
        +stop()
    }
    class Dependencies {
        +install()
    }
  
    Docker "1" --> "1" NodeApp : runs
    Docker "1" --> "*" Dependencies : uses

该类图说明了 Docker 如何使用 Node.js 应用以及应用本身如何依赖于其他库和模块。

常见命令

以下是一些常用的 Docker 命令,方便你在使用 Docker 时参考:

命令 描述
docker build -t <name> . 根据 Dockerfile 构建镜像
docker run <name> 运行指定名称的容器
docker ps 查看正在运行的容器列表
docker ps -a 查看所有容器(包括已停止的)
docker stop <id> 停止指定 ID 的容器
docker rm <id> 删除指定 ID 的容器

结论

通过本教程,我们简单了解了 Docker 的基本概念以及如何创建和运行自己的 Docker 容器。Docker 为开发者提供了一个一致的开发和部署环境,使得应用能够跨不同的环境无缝运行。无论是大型企业还是独立开发者,Docker 都是一个不可或缺的工具。希望通过这个教程,您能对 Docker 有一个初步的认识并能够在自己的项目中尝试使用这项技术。如需深入学习,可以参考 [Docker 官方文档](