入门指南概述
本指南包含有关如何开始使用 Docker 的分步说明。本指南介绍如何:
将映像作为容器生成并运行。
使用 Docker Hub 共享映像。
使用具有数据库的多个容器部署 Docker 应用程序。
使用 Docker Compose 运行应用程序。
什么是容器?
容器是在主机上运行的沙盒进程,它与该主机上运行的所有其他进程隔离。这种隔离利用内核命名空间和 cgroupopen_in_new, 在 Linux 中已经存在了很长时间的功能。Docker 使这些功能易于访问且易于使用。总而言之,一个容器:
是映像的可运行实例。您可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。
可以在本地计算机、虚拟机上运行,也可以部署到云中。
是可移植的(可以在任何操作系统上运行)。
与其他容器隔离,并运行自己的软件、二进制文件、配置等。
如果您熟悉 ,则可以将容器视为 的扩展版本。文件系统来自映像。但是,容器增加了使用 chroot 时不可用的额外隔离。chrootchroot
什么是图像?
正在运行的容器使用隔离的文件系统。这个隔离的文件系统由映像提供,映像必须包含运行应用程序所需的一切 - 所有依赖项、配置、脚本、二进制文件等。该映像还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据
容器化应用程序
在本指南的其余部分,您将使用一个简单的待办事项 在 Node.js 上运行的列表管理器。如果您不熟悉 Node.js, 不用担心。本指南不需要任何 JavaScript 经验。
先决条件
您已安装最新版本的 Docker Desktop。
您已经安装了Git 客户端open_in_new.
您有一个 IDE 或文本编辑器来编辑文件。Docker 建议使用Visual Studio 代码open_in_new.
获取应用程序
在运行应用程序之前,需要将应用程序源代码获取到计算机上。
克隆getting-started-app 存储库open_in_new使用以下命令:
$ git clone https://github.com/docker/getting-started-app.git
查看克隆存储库的内容。您应该会看到以下文件和子目录。
├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock
生成应用的映像
若要生成映像,需要使用 Dockerfile。Dockerfile 只是一个基于文本的文件,没有文件扩展名,包含指令脚本。Docker 使用此脚本生成容器映像。
在与文件相同的目录中,创建一个名为 .您可以使用以下命令创建基于您的操作系统的 Dockerfile。getting-started-apppackage.jsonDockerfile
Mac / Linux操作系统 窗户
在终端中,运行以下命令。
确保您在目录中。替换为目录的路径。getting-started-app/path/to/getting-started-appgetting-started-app
$cd /path/to/getting-started-app
创建一个名为 的空文件。Dockerfile
$ touch Dockerfile
使用文本编辑器或代码编辑器,将以下内容添加到 Dockerfile:
[
使用以下命令生成映像:
在终端中,确保您位于目录中。替换为目录的路径。getting-started-app/path/to/getting-started-appgetting-started-app
$cd /path/to/getting-started-app
生成映像。
$ docker build -t getting-started .
该命令使用 Dockerfile 生成新映像。您可能已经注意到 Docker 下载了很多“层”。这是因为您指示构建者要从映像开始。但是,由于您的计算机上没有该映像,因此 Docker 需要下载映像。docker buildnode:18-alpine
Docker 下载映像后,Dockerfile 中的说明将复制到应用程序中,并用于安装应用程序的依赖项。该指令指定从此映像启动容器时要运行的默认命令。yarnCMD
最后,该标志会标记您的图像。将其视为最终图像的人类可读名称。由于您命名了映像,因此可以在运行容器时引用该映像。-tgetting-started
命令末尾的 告诉 Docker 它应该在当前目录中查找 。.docker buildDockerfile
启动应用容器
现在,您已经有了映像,可以使用该命令在容器中运行应用程序。docker run
使用命令运行容器,并指定刚刚创建的映像的名称:docker run
$ docker run -dp 127.0.0.1:3000:3000 getting-started
标志(简称 )在后台运行容器。 这意味着 Docker 会启动您的容器并将您返回到终端 提示。可以通过在 Docker 中查看容器来验证容器是否正在运行 Dashboard 在 Containers 下,或在终端中运行。-d--detachdocker ps
标志(的缩写)在主机之间创建端口映射 和容器。该标志采用格式为 的字符串值,其中 是主机上的地址,并且是 容器上的端口。该命令将容器的端口 3000 发布到主机上的 ()。没有端口映射, 您将无法从主机访问该应用程序。-p--publish-pHOST:CONTAINERHOSTCONTAINER127.0.0.1:3000localhost:3000
几秒钟后,打开您的网络浏览器http://localhost:3000open_in_new. 您应该会看到您的应用。
添加一两个项目,看看它是否按预期工作。您可以将项目标记为已完成并删除它们。前端已成功将项目存储在后端。
此时,您有一个正在运行的待办事项列表管理器,其中包含一些项目。
如果快速查看容器,应看到至少有一个容器正在运行,该容器正在使用映像和端口。要查看容器,可以使用 CLI 或 Docker Desktop 的图形界面。getting-started3000
命令行界面 Docker 桌面
在终端中运行以下命令以列出容器。docker ps
$ docker ps
应显示类似于以下内容的输出。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df784548666d getting-started "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 127.0.0.1:3000->3000/tcp priceless_mcclintock
总结
在本部分中,你学习了有关创建 Dockerfile 以生成映像的基础知识。生成映像后,启动了一个容器并看到了正在运行的应用。
领取专属 10元无门槛券
私享最新 技术干货