发布于 2026-01-06 4 阅读
0

Docker入门

Docker入门

我们都听过那句令人头疼的话:“但它在我的机器上运行正常。”无论简单还是复杂,依赖关系都是任何开发环境不可或缺的组成部分。

依赖项的版本或安装方式稍有不同,就可能导致开发出现严重问题。而 Docker 正是解决这一问题的利器。

Docker 能够帮助用户在不同机器上以一致的方式构建和部署应用程序。在今天的文章中,我们将构建并使用你的第一个 Docker 镜像。虽然对于个人项目来说,这似乎是一个不必要的步骤,但对于任何开发团队而言,Docker 都至关重要。


什么是 Docker?

Docker 是一个平台,它使您能够独立于所使用的基础架构来管理应用程序的开发、运行和发布。Docker 使用隔离的环境,并在其中安装特定于应用程序的依赖项来运行应用程序。这些隔离的环境被称为容器。

Docker 使我们能够同时运行多个容器。由于容器之间相互隔离,我们无需担心容器间的相互干扰。因此,Docker 容器可以同时在不同的隔离环境中运行不同版本的软件。另一个好处是,我们无需在主机上安装同一软件的多个版本,从而避免资源浪费。

Docker 容器是根据预先编写的指令构建的。这些指令包含在 Docker 镜像中。Docker 镜像是由开发者创建的模板,它包含在 Docker 容器中运行应用程序所需的应用程序代码、库、工具和其他依赖项,这使得 Docker 镜像具有可移植性和平台无关性。

可供公众使用的 Docker 镜像可在 Docker Hub ( https://hub.docker.com/ ) 上获取。


使用 Docker

按照以下说明操作:

请访问https://docs.docker.com/engine/install/在您的计算机上安装 Docker 引擎。请确保您的机器满足所有系统要求。同时,我们建议您在此处注册:https://hub.docker.com/signup,以便将您的 Docker 镜像发布到 Docker Hub。
安装 Docker 引擎还会同时安装 Docker 图形用户界面 (GUI) 和 Docker 命令行界面 (CLI)。您可以直接从系统终端使用 Docker CLI。首次打开 Docker GUI 时,它还会提供一个简短的教程。要使用 Docker CLI,我们需要学习一些基本命令。


Docker 命令

Docker 命令默认使用最新版本。如果需要其他版本,可以在版本号后添加“:”。

docker ps - 列出所有当前正在运行的容器。添加 -a 参数还会列出已退出的容器。

docker pull - 从 Docker Hub 下载镜像。它接受镜像名称作为参数。

docker run - 运行一个新的容器。它接受一个镜像名称作为参数。如果本地没有所需的镜像,它会检查 Docker Hub 仓库,下载并运行该镜像。

docker stop - 停止正在运行的容器。它接受容器 ID 或容器名称作为参数。

docker start - 启动已停止的容器。它接受容器 ID 或容器名称作为参数。

docker build - 构建一个新的 Docker 镜像。它接受镜像名称和版本作为参数。

docker images - 列出本地计算机上所有可用的镜像。

docker rm - 从容器列表中删除容器。它接受容器 ID 或容器名称作为参数。

docker rmi - 从本地机器中移除镜像。它接受镜像 ID 作为参数。请确保移除与要移除的镜像文件相关的所有容器。

我们还可以使用 Docker GUI 来执行上述命令,如下所示。

图片描述

  1. 在浏览器中打开网页应用程序。

  2. 打开容器的交互式终端。

  3. 停止容器。

  4. 启动/重启容器。

  5. 删除容器。


构建 Docker 镜像

我们将为演示构建一个 Node.js 应用程序的 Docker 镜像。这是一个简单的待办事项列表,将使用基于 Express 的服务器。

这是我们项目的代码。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Docker Demo</title>
</head>
<body>
<h1>To Do List</h1>
<br />
<input id="todo-input" type="text" placeholder="Your todo here..." />
<br />
<br />
<button id="add-btn">Add todo</button>
<br />
<ul id="todo-list"></ul>
<script type="text/javascript" src="./script.js"></script>
</body>
</html>
view raw index.html hosted with ❤ by GitHub
const todoInput = document.getElementById("todo-input");
const addBtn = document.getElementById("add-btn");
const todoList = document.getElementById("todo-list");
addBtn.addEventListener("click", function (e) {
e.preventDefault();
const listItem = document.createElement("li");
listItem.textContent = todoInput.value;
todoList.prepend(listItem);
todoInput.value = "";
});
view raw script.js hosted with ❤ by GitHub
const express = require("express");
const path = require("path");
const app = express();
app.use(express.static(__dirname));
app.get(__dirname, function (req, res) {
res.sendFile(path.join(__dirname, "index.html"));
});
app.listen(3000, function () {
console.log("Listening on port 3000!");
});
view raw server.js hosted with ❤ by GitHub

在创建 Dockerfile 镜像之前,我们需要在本地测试应用程序以确保其正常运行。您可以下载上面的代码,并在终端运行 `node server.js` 命令来运行它。您应该能够通过 `localhost:3000` 在浏览器中打开网页。一旦我们确认应用程序运行正常,就可以创建我们的第一个 Docker 镜像了,如下所示:

  1. 创建一个文件夹,并将源文件(index.html、script.js 和 server.js)以及 package.json 文件复制到该文件夹​​中。

  2. Docker 引擎需要一个 Dockerfile 文件来创建 Docker 镜像,该文件包含构建镜像的步骤。我们需要创建这个文件。您可以将此文件创建在计算机上的任何位置,但使用与源文件相同的文件夹会更方便。

  3. 我们需要创建一个名为 Dockerfile 的纯文本文件。Dockerfile 没有文件扩展名。

  4. 用于创建演示应用程序镜像的 Dockerfile 文件如下所示。

  • Dockerfile 的第一行指示 Docker 引擎使用 node:17.6-alpine 的基础镜像启动。该镜像可在 Docker Hub 上找到。Alpine 是一个体积较小的 Linux 发行版,有助于保持生成的镜像体积较小。
  • 第二行代码将我们的工作目录更改为环境内的 /home/demo_app/。请注意,现在的环境是 Linux,因此我们需要遵循 Linux 的命名约定。
  • 接下来,我们将源文件文件夹中的 package.json 文件复制到当前工作目录。下一步将使用此文件来安装所需的依赖项。
  • 现在我们运行 npm install 命令,该命令会安装所有必需的依赖项。
  • 然后我们将所有源文件复制到我们的工作目录。
  • 最后,我们执行命令 node server.js 在环境中运行我们的应用程序。

5.我们在终端中运行以下命令来构建这个 Docker 镜像。

docker build -t demo-app:1.0

demo-app 是镜像名称,版本号为 1.0。

6. 我们需要运行镜像来创建 Docker 容器并测试我们的应用程序。使用以下命令从镜像创建 Docker 容器。

docker run -p 3000:3000 --name demo demo-app:1.0

`-p` 参数会添加一个主机端口,我们可以使用该端口通过 `localhost` 访问我们的 Web 应用程序。`--name` 参数为容器命名,并帮助我们在容器上运行命令。
如果一切顺利,我们就可以在浏览器中使用 `localhost:3000` 访问 Web 应用程序了。

7.我们可以通过在单独的终端中运行 docker ps 来查看容器的详细信息。

大功告成!我们从零开始创建了一个 Docker 镜像,并在终端中使用该镜像运行了一个容器。

你甚至可以更进一步,将其发布到 Docker Hub,供其他 Docker 用户使用,或者仅仅是为了向朋友炫耀。同样地,你也可以构建更大的应用程序,并使用 Docker 将其部署到线上。

现在,很多开发团队的下一步就是用这个镜像部署应用程序——但大多数云服务提供商都让这个过程变得极其复杂。正因如此, Codesphere正在打造一个能够运行任何应用程序的云服务提供商!

祝您编程愉快!

文章来源:https://dev.to/codesphere/getting-started-with-docker-42b