从零开始玩转 Docker:用 Node.js 打印“Hello World”

news/2025/2/3 18:43:06/

通过一个简单的 Node.js 示例,带领读者编写 Dockerfile,构建镜像,运行容器,体验 Docker 的基本操作流程。

1. 引言

Docker 是一个开源的应用容器引擎,它可以将应用程序及其依赖项打包成一个轻量级、可移植的容器容器与虚拟机类似,但更加轻量级,因为它共享主机操作系统的内核,而不需要虚拟化整个操作系统。

1.1 本文目标:

本文将通过一个简单的 Node.js 示例,带领你从零开始学习 Docker 的基本操作,包括:

编写 Dockerfile
构建 Docker 镜像
运行 Docker 容器

2. 环境准备

在开始 Docker 之旅之前,我们需要先准备好环境,也就是安装 Docker。Docker 支持多种操作系统,包括 Windows、macOS 和 Linux。下面我们将分别介绍不同操作系统下的 Docker 安装步骤。

2.1 安装 Docker

Docker 官方安装链接: https://docs.docker.com/get-docker/

2.1.1 Windows:

1.系统要求: Windows 10 64 位专业版、企业版或教育版(版本 1903 或更高版本)。
2.下载安装包: 访问 Docker 官方安装链接,下载适用于 Windows 的 Docker Desktop 安装包。
3.运行安装程序: 双击下载的安装包,按照提示完成安装。
4.启动 Docker: 安装完成后,Docker Desktop 会自动启动。你可以在系统托盘中看到 Docker 的图标。

2.1.2 macOS:

1.系统要求: macOS 10.15 或更高版本。
2.下载安装包: 访问 Docker 官方安装链接,下载适用于 macOS 的 Docker Desktop 安装包。
3.运行安装程序: 双击下载的安装包,将 Docker 图标拖动到 Applications 文件夹。
4.启动 Docker: 打开 Applications 文件夹,双击 Docker 图标启动 Docker Desktop。

2.1.3 Linux:

  1. 系统要求: 不同的 Linux 发行版对 Docker 的支持情况不同,请参考 Docker 官方文档了解详细信息。

  2. 安装 Docker: 根据你的 Linux 发行版,使用相应的包管理工具安装 Docker。例如,在 Ubuntu 上可以使用以下命令安装 Docker:

python">sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 启动 Docker: 安装完成后,使用以下命令启动 Docker 服务:
python">sudo systemctl start docker

2.1.3 Linux:

2.2 验证 Docker 安装

安装完成后,我们可以通过以下命令验证 Docker 是否安装成功:

python">docker --version

如果安装成功,你会看到类似以下的输出:

python">Docker version 20.10.8, build 3967b7d

恭喜你,Docker 环境已经准备就绪!接下来,我们将开始编写 Dockerfile,构建 Docker 镜像,并运行 Docker 容器

3. 编写 Node.js 脚本

创建一个项目目录,例如 ~/HelloDocker。

在目录下创建 index.js 文件,编写简单的 Node.js 代码,例如:

console.log("Hello from Docker!");

4. 编写 Dockerfile

在项目目录下创建 Dockerfile 文件。

逐步讲解 Dockerfile 指令:

FROM: 指定基础镜像,例如 node:16。

WORKDIR: 设置工作目录,例如 /app。

COPY: 将本地文件复制到镜像中,例如 COPY . .。

RUN: 运行命令,例如 npm install (如果需要安装依赖)。

CMD: 指定容器启动时执行的命令,例如 node index.js。

下面提供完整的 Dockerfile 示例代码。

FROM node:14-alpine
COPY index.js /index.js
CMD node /index.js

在这里插入图片描述

5. 构建 Docker 镜像

使用 docker build 命令构建镜像,

docker build -t hello-docker .

在这里插入图片描述

查看构建好的镜像:docker images。
在这里插入图片描述

6. 运行 Docker 容器

使用 docker run 命令运行容器

$ docker run hello-docker

查看容器输出,确认打印出 “Hello from Docker!”。

解释 docker run 命令的其他常用参数,例如 -d (后台运行)、-p (端口映射) 等。

7. 总结

在本文中,我们系统地探讨了 Docker 的基本概念、核心操作以及其在实际应用中的优势。通过编写 Dockerfile、构建镜像和运行容器,我们展示了如何利用 Docker 实现应用程序的快速部署和高效管理。Docker 的轻量级、可移植性和一致性使其成为现代软件开发和运维中不可或缺的工具。

7.1 Docker 的核心优势

Docker 的核心优势在于其容器化技术,它通过将应用程序及其依赖打包到一个独立的容器中,实现了开发、测试和生产环境的一致性。这种一致性不仅减少了“在我机器上能运行”的问题,还显著提高了开发和部署的效率。此外,Docker 的资源隔离和轻量级特性使得在同一台主机上运行多个容器成为可能,极大地提高了资源利用率。

7.2 Docker 的应用场景

Docker 的应用场景非常广泛,涵盖了从开发到生产的各个环节。在开发阶段,Docker 可以帮助开发者快速搭建和销毁开发环境,确保开发环境的纯净和一致性。在测试阶段,Docker 可以用于创建隔离的测试环境,确保测试结果的准确性。在生产环境中,Docker 可以用于部署微服务架构,实现服务的高可用性和弹性扩展。

7.3 进一步探索 Docker

虽然本文已经介绍了 Docker 的基本操作和应用场景,但 Docker 的生态系统远不止于此。为了进一步提升 Docker 的使用效率和应用范围,读者可以继续探索以下内容:

Docker Compose:用于定义和运行多容器 Docker 应用程序的工具。通过一个简单的 YAML 文件,开发者可以轻松管理多个容器的启动、停止和配置。

Docker Hub:Docker 的官方镜像仓库,提供了大量的公共镜像,开发者可以从中获取所需的镜像,也可以将自己的镜像上传到 Docker Hub 进行分享和管理。

Docker Swarm 和 Kubernetes:用于容器编排的工具,能够帮助管理大规模的容器集群,实现容器的自动部署、扩展和管理。

Docker 网络和存储:深入了解 Docker 的网络模型和存储机制,可以帮助开发者更好地管理容器之间的通信和数据持久化。

Docker 安全:随着容器技术的普及,容器安全问题也日益受到关注。了解如何配置 Docker 的安全选项,如何监控容器的运行状态,以及如何处理容器的漏洞和攻击,是每个 Docker 用户都需要掌握的知识。

7.4 结语

Docker 作为容器化技术的代表,已经深刻改变了软件开发和运维的方式。通过本文的学习,读者应该已经掌握了 Docker 的基本操作和应用场景。然而,Docker 的生态系统非常庞大,本文只是冰山一角。希望读者能够继续深入探索 Docker 的更多功能和应用,将其应用到实际项目中,提升开发和运维的效率,推动业务的快速发展。

在未来,随着云原生技术的不断发展,Docker 及其相关技术将继续发挥重要作用。无论是微服务架构、持续集成/持续部署(CI/CD),还是 DevOps 实践,Docker 都将成为不可或缺的工具。希望本文能够为读者提供一个良好的起点,助力大家在 Docker 的世界中不断前行。


http://www.ppmy.cn/news/1569028.html

相关文章

svn: E000111: Error running context: Connection refused

1、具体报错: 看起来是window主机的子系统ubuntu svn客户端无法访问到window主机的svn的服务端。 2、问题: window主机安装子系统ubuntu,ubuntu是可以直接访问外网,但是ubuntu是不能访问window主机的服务,比如svn的se…

笔灵ai写作技术浅析(二):自然语言处理

一、词法分析(Lexical Analysis) 1.1 概述 词法分析是NLP的第一步,主要任务是将连续的文本分割成有意义的单元(词或词组),并对这些单元进行标注,如词性标注(POS tagging)。词法分析的质量直接影响后续的句法分析和语义理解。 1.2 技术细节 1.分词(Tokenization)…

.事件传参与数据同步,条件渲染,列表渲染

1.事件传参与数据同步 1.1在事件处理函数中为data中的数据赋值 1.2.事件传参 2.bindinput的语法格式 3.实现文本框和data数据之间的同步 4.条件渲染 4.1结合 <block>使用wx:if 4.2 hidden控制元素的显示与隐藏 参照v-if和v-show 5.列表渲染 5.1 wx:for 5.2 wx:key使用

go单元测试和基准测试

1、单元测试和基准测试 单元测试和基准测试代码开发中的重要环节&#xff0c;良好的单元测试和基准测试&#xff0c;能提升开发质量&#xff0c;对整体开发有非常重要的重要&#xff0c;下面介绍单元测试和基准测试的写法。 2、单元测试和基准测试写法 以排序基本排序算法&a…

LeetCode - #196 删除重复的电子邮件并保留最小 ID 的唯一电子邮件

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

基于SpringBoot电脑组装系统平台系统功能实现五

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

第 1 章 服务架构演进史

1.1 原始分布式时代 调用远程方法面临的问题与解决方案&#xff1a; 远程的服务在哪里——服务发现有多少个——负载均衡网络出现分区、超时或服务出错怎么办——熔断、隔离、降级方法的参数与返回结果如何表示——序列化协议信息如何传输——传输协议服务权限如何管理——认…

【使用Apache Flink 实现滑动窗口流式计算】

什么是Flink&#xff1f; Apache Flink是一个用于分布式流式处理和批处理的开源实时计算引擎。它具备低延迟、高吞吐量和 exactly-once 语义的特点&#xff0c;适用于各种实时数据处理场景。 Flink的核心概念 作业&#xff08;Job&#xff09;&#xff1a;Flink程序的执行单…