0Pricing
Scala for Backend Engineering & Functional Programming · 课时

使用 Docker 容器化

学习使用 Docker 将 Scala 应用程序容器化,以实现一致的环境和简化的部署。

使用 Docker 容器化 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

为什么要将 Scala 应用容器化?

部署 Scala 应用程序时,要确保开发、测试和生产环境保持一致可能颇具挑战。这正是容器化发挥作用的地方!

容器会将应用程序及其所有依赖项(例如 Java 虚拟机、库和配置)打包成一个独立的单元,从而确保应用程序在任何地方都以相同方式运行。

Docker:镜像和容器

Docker 是最流行的容器化平台。它使用两个核心概念:

  • Docker 镜像:一种轻量、独立且可执行的软件包,其中包含运行某个软件所需的一切内容,包括代码、运行时、系统工具、系统库和设置。您可以将其理解为蓝图。
  • Docker 容器:Docker 镜像的一个可运行实例。当您运行镜像时,它就会变成容器。容器彼此隔离,也与主机系统隔离。

第一次运行 Docker

让我们尝试运行一个非常基础的 Docker 容器。此命令会拉取 hello-world 镜像(如果本地尚未存在),并将其作为容器运行。

您将看到一条确认 Docker 正常工作的消息!

docker run hello-world

我们的简单 Scala 应用

在进行容器化之前,让我们先创建一个最小化的 Scala 应用。这个程序只会向控制台打印一条消息。

我们很快就会将它打包到 Docker 镜像中!

object Main extends App {
  val message = "Hello from CoddyKit's Docker container!"
  println(message)
}

蓝图:Dockerfile

Dockerfile 是一个文本文件,其中包含用户可以在命令行中调用的所有命令,用于组装镜像。它就像构建 Docker 镜像的配方。

主要指令包括:

  • FROM:设置基础镜像。
  • WORKDIR:设置工作目录。
  • COPY:将文件复制到镜像中。
  • RUN:在构建镜像期间执行命令。
  • CMD:指定容器启动时要运行的命令。

Dockerfile:Scala 构建阶段

对于 Scala,我们通常使用多阶段构建。第一个阶段负责构建应用。我们使用带有完整 JDK 的 OpenJDK 镜像来编译 Scala 代码。

# Stage 1: Build the Scala application
FROM adoptopenjdk/openjdk11:latest as builder
WORKDIR /app
COPY Main.scala .
RUN scalac Main.scala
RUN jar -cvf app.jar Main.class

Dockerfile:Scala 运行阶段

第二个阶段会创建一个小得多的镜像,其中只包含 JRE(Java 运行时环境)和已编译的 Scala 应用(JAR 文件)。这样可以将最终镜像的大小保持在最小。

# Stage 2: Create a minimal runtime image
FROM adoptopenjdk/openjdk11:jre-hotspot
WORKDIR /app
COPY --from=builder /app/app.jar .
CMD ["java", "-jar", "app.jar"]

完整的 Scala Dockerfile

下面是 Scala 应用的完整多阶段 Dockerfile。此文件应命名为 Dockerfile,并放置在与 Main.scala 相同的目录中。

# Stage 1: Build the Scala application
FROM adoptopenjdk/openjdk11:latest as builder
WORKDIR /app
COPY Main.scala .
RUN scalac Main.scala
RUN jar -cvf app.jar Main.class

# Stage 2: Create a minimal runtime image
FROM adoptopenjdk/openjdk11:jre-hotspot
WORKDIR /app
COPY --from=builder /app/app.jar .
CMD ["java", "-jar", "app.jar"]

构建 Docker 镜像

现在我们已经有了 Dockerfile 和 Main.scala,让我们来构建 Docker 镜像。-t 标志会为镜像添加一个名称标签(例如 scala-hello),而 . 表示当前目录是构建上下文。

docker build -t scala-hello .

运行容器化的 Scala 应用

构建镜像后,您可以使用 docker run 命令在 Docker 容器中运行 Scala 应用。这将执行 Dockerfile 中定义的 CMD 指令。

docker run scala-hello

您应该会在控制台中看到打印出的 "Hello from CoddyKit's Docker container!"!

检查您的知识

测试您对 Dockerfile 的理解。

回顾:Scala 容器化

您已经成功学会了使用 Docker 将 Scala 应用容器化的基础知识!

  • Docker 镜像是蓝图,容器是可以运行的实例。
  • Dockerfile 是构建镜像的配方。
  • 多阶段构建有助于为 Scala 应用创建小巧而高效的镜像。
  • docker build 和 docker run 等命令用于管理镜像和容器。

这些知识对于以一致且可靠的方式部署 Scala 微服务至关重要。

常见问题解答

「使用 Docker 容器化」课时是免费的吗?

是的 — 「使用 Docker 容器化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

「使用 Docker 容器化」这节课中我会学到什么?

学习使用 Docker 将 Scala 应用程序容器化,以实现一致的环境和简化的部署。 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。

「使用 Docker 容器化」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 设计 Scala 微服务
  2. 使用 Docker 容器化
  3. 云部署策略
← 返回 Scala for Backend Engineering & Functional Programming