Docker 入门:从安装到构建第一个容器

面试官:小伙子,你的数组去重方式惊艳到我了

前言

在现代化的软件开发中,容器化技术已经被广泛应用。Docker 是当前最受欢迎的容器化平台之一,其价值在于使用容器快速部署应用,使得开发、测试、运营环节更加高效率、低成本。

本文将介绍 Docker 的基本概念和使用方法,以及构建第一个容器的实战指导。

Docker 是什么?

Docker 由两部分组成:Docker 引擎和 Docker Hub。Docker 引擎是一个容器化平台,它允许开发人员在容器中打包应用程序和依赖项。Docker Hub 是一个公共的、云端的、可获得免费和付费服务的容器注册表,开发人员可以将打包后的容器上传至 Docker Hub,并允许其他人下载和使用。

Docker 安装

Docker 支持多个操作系统平台,包括 Windows、Linux 和 macOS。不同平台下的安装方法略有不同,我们以 macOS 平台为例进行讲解。

在 macOS 下,我们可以使用 Homebrew 安装 Docker:

- ---- ------- ------

安装完成后,我们可以运行以下命令测试 Docker 安装是否成功:

- ------ -------

如果能正常输出 Docker 版本信息,则说明 Docker 安装成功。

Docker 基本概念

在 Docker 中,包含以下几个核心概念:

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)
  • 注册中心(Registry)

镜像

镜像是Docker的核心概念之一,它是一个只读的模板,用于创建 Docker 容器。一个镜像包含了一个完整的文件系统,包括代码、运行时环境、系统工具、库等所需的所有内容。

Docker 镜像可以通过 Dockerfile 文件来构建,也可以下载现成的镜像,如 nginx, mysql 等。我们可以使用 docker pull 命令来下载镜像。例如,我们可以下载一个名为 hello-world 的镜像:

- ------ ---- -----------

下载成功后,我们可以使用以下命令查看所有本地的 Docker 镜像:

- ------ ------

容器

容器是镜像的运行实例,一个容器包含了一个完整的运行时环境。我们可以把容器类比于运行中的进程,而镜像类似于可执行文件。

使用 docker run 命令可以创建一个容器。例如,我们可以创建一个以 hello-world 镜像为基础的新容器:

- ------ --- -----------

仓库

仓库用于存储 Docker 镜像。一个仓库可以包含多个镜像。

我们可以使用以下命令查看本地的所有仓库:

- ------ ------

注册中心

Docker Hub 是一个公共的、云端的、可获得免费和付费服务的容器注册表。它允许你上传、下载和管理 Docker 镜像。

我们需要登录 Docker Hub 才能上传和下载镜像。使用以下命令登录 Docker Hub:

- ------ -----

构建第一个容器

现在,我们已经了解了 Docker 的基本概念和使用方法。接下来,我们将构建我们的第一个容器。这个容器会运行一个简单的 Node.js 应用程序。

1. 创建项目文件夹

我们首先创建一个项目文件夹:

- ----- ------------- -- -- -------------

2. 创建 Node.js 应用程序

在项目文件夹中创建一个名为 app.js 的文件,并添加以下代码:

----- ---- - ----------------

----- ------ - ----------------------- ---- -- -
  ------------------ ---------------- ---------------
  -------------- ----- ---- ------ --------------
---

------------------- -- -- -
  ------------------- ------- -- -------------------------
---

该代码创建了一个 Node.js 的 HTTP 服务器,并将 Hello World from Docker Container 发送给客户端。

3. 创建 Dockerfile

在项目根目录中创建一个名为 Dockerfile 的文件,并添加以下代码:

- -- ------- ----------
---- -----------

- -------- ------------
------- ------------

- -----------
---- - ------------

- -----
--- --- -------

- -- ---- --
------ ----

- ------
--- -------- ---------

这个 Dockerfile 文件指定了使用 Node.js 的 Alpine 版本作为基础镜像。然后,将工作目录设置为 /usr/src/app,并将项目文件复制到工作目录中。接着,通过 RUN 命令来安装依赖项。最后,通过 EXPOSE 命令来声明对外暴露的端口,并使用 CMD 命令来启动我们的应用程序。

4. 构建容器

使用以下命令来构建 Docker 镜像:

- ------ ----- -- ------------- -

如果构建成功,我们可以使用以下命令查看本地的 Docker 镜像:

- ------ ------

5. 运行容器

使用以下命令来运行容器:

- ------ --- -- --------- -------------

这个命令指定了容器中使用的端口和主机上用于访问容器的端口。

我们可以使用浏览器打开 http://localhost:3000,则会看到一个 Hello World from Docker Container 的页面。

总结

本文介绍了 Docker 的基本概念和使用方法,包括镜像、容器、仓库和注册中心。同时,我们还通过一个实战示例,详细介绍了如何构建一个简单的 Node.js 应用程序,并使用 Docker 运行这个应用程序。希望本文能为 Docker 初学者提供一些实用的指导和帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64afa40e48841e9894bbbe10


猜你喜欢

  • 如何在 Express.js 中使用 JWT 进行身份验证?

    随着互联网及移动互联网的快速发展,越来越多的应用程序需要进行用户身份验证及管理。为了满足这些需求,使用 JSON Web Token(JWT)进行用户身份验证已经成为技术领域的常见做法。

    1 小时前
  • 在 GraphQL 中处理复杂的对象关系

    在现代的 web 应用中,对象之间的关系变得越来越复杂。例如,一个出售商品的商店可能会有许多不同的商品,其中每个商品可能会有多个大小、颜色、类型等变体。在以前,为了处理这种情况,我们需要在后端编写各种...

    1 小时前
  • 如何使用 Jest 测试 Node.js 应用?

    Jest 是一款由 Facebook 开发的开源 JavaScript 测试框架。它被广泛用于前端和 Node.js 应用程序的单元测试、集成测试和端到端测试。在本篇文章中,我们将学习如何使用 Jes...

    1 小时前
  • Android 开发中 Material Design 中 TabLayout 的使用技巧

    前言 随着移动互联网的快速发展,在 Android 开发中,Material Design 成为了最流行的设计指南之一。TabLayout 是 Material Design 中一个重要的组件,具有良...

    1 小时前
  • PM2 与 NGINX:构建高性能的 Node.js 应用程序

    Node.js 是一个快速而又高效的 JavaScript 运行环境,正因为如此,它已经成为了构建 Web 应用、REST API 和实时应用的理想选择。但随着 Node.js 应用程序的愈加复杂,它...

    1 小时前
  • Headless CMS 中使用 Webhooks 实现自动构建

    随着静态网页生成器的流行,Headless CMS 越来越受到开发者们的重视。Headless CMS 不仅提供了现代化的管理界面,还允许开发者通过 API 或 Webhooks 来获取内容。

    1 小时前
  • ES10 实战教程

    前言 ES10,也就是 ECMAScript 2019,是 JavaScript 的最新版本。自 2015 年发布了 ES6 以来,JavaScript 变得越来越流行,并且在近几年里,前端技术发展迅...

    1 小时前
  • Serverless 如何实现自动备份?

    在 Serverless 架构中,由于无需维护服务器,开发者可以更专注于实现业务逻辑。但是,我们还是需要解决一些重要问题,如数据备份、数据恢复和灾难恢复等。在本文中,我们将探讨如何使用 Serverl...

    1 小时前
  • Jest 测试 React 组件中使用 context 的方法探究

    在 React 应用中,我们可能需要在组件间共享一些数据或者函数,这时可以通过 Context 来实现。但是在测试使用 Context 的组件时,我们可能会遇到一些问题。

    1 小时前
  • SSE 如何设置头信息?

    简介 SSE(Server-Sent Events)是一种轻量级的实时推送技术,在前端开发中经常用于推送服务器实时消息,比如聊天、订阅等。SSE 可以通过 HTTP 协议进行传输,因此需要设置合适的头...

    1 小时前
  • 在 Docker 容器中使用 SSH

    随着前端应用程序的复杂性增加,开发环境的设置变得越来越麻烦。 Docker 是一个流行的容器化解决方案,它可以帮助我们在标准化的环境中进行开发。在这篇文章中,我们将学习如何在 Docker 容器中使用...

    1 小时前
  • CSS Grid 游戏(Grid Garden)学习笔记

    CSS Grid 游戏(Grid Garden)学习笔记 CSS Grid 是一个强大的布局工具,它可以让我们轻松地实现复杂的网页布局。但是,学习 CSS Grid 的过程可能会有些枯燥。

    1 小时前
  • React 中使用 setInterval 时的注意事项

    引言 在 React 中,我们很常见地使用 setInterval 来创建周期性的任务。在实际开发中,我们需要注意一些细节和陷阱,以确保周期性任务能够正确地运行。本文将会介绍 React 中使用 se...

    1 小时前
  • 如何在使用 CSS Reset 的情况下保持 flexbox 布局?

    什么是 CSS Reset? 在我们开始探讨在使用 CSS Reset 的情况下保持 flexbox 布局之前,我们需要先了解什么是 CSS Reset。CSS Reset 是一种用于归零不同浏览器之...

    1 小时前
  • 使用 Web Components 构建可重用的模态框组件

    Web Components 是 Web 技术的一种新型组成部分,可以让开发者创建封装的自定义元素。通过 Web Components,开发者可以更加轻松地构建可重用的 UI 组件。

    1 小时前
  • 如何优化 iOS 应用程序的性能

    作为一名前端开发人员,我们常常需要优化我们的应用程序的性能,以提供更好的用户体验。在 iOS 平台上,优化应用程序的性能尤为重要。本文将介绍一些优化 iOS 应用程序性能的技巧和策略,帮助开发人员提高...

    1 小时前
  • 响应式设计中的样式调整

    随着移动设备的普及,人们越来越多地使用手机和平板电脑浏览网站。因此,响应式设计已成为现代 Web 设计的必要趋势。在响应式设计中,我们需要针对不同的设备大小和屏幕分辨率,调整样式和布局以确保网站能够良...

    1 小时前
  • 在 Fastify 中处理文件上传

    Fastify 是一个快速、低开销和易于学习的 Web 框架,其性能排名领先。在开发过程中,我们经常需要处理文件上传。本文将介绍如何在 Fastify 中处理文件上传。

    1 小时前
  • ES11 中的 Object.fromEntries() - 一个实用工具

    ES11 中的 Object.fromEntries() - 一个实用工具 在 ES2019 中,一个新的 Object 静态方法 fromEntries() 加入了 JavaScript。

    1 小时前
  • 如何用良好的界面设计提升 App 无障碍性?

    随着技术的不断进步和社会的不断发展,越来越多的人开始重视无障碍性设计,这样有助于让更多的人都能够顺利、愉快地使用各种应用程序。尤其是在移动应用程序中,良好的界面设计不仅可以提高用户的使用体验,还可以提...

    1 小时前