16 构建镜像

在上一篇教程中,我们探讨了如何在 CI/CD 环境中进行自动化 UI 测试。本篇教程将专注于构建和发布过程中的“构建镜像”部分。具体来说,我们将学习如何使用 Docker 构建镜像,为后续的测试和部署做好准备。

了解构建镜像

在 CI/CD 流程中,构建镜像是将应用程序及其所有依赖项打包为一个轻量级、可移植的容器的过程。通过构建镜像,我们能够确保代码在不同环境中的一致性,简化了开发、测试和生产环境之间的过渡。

重要概念

  • Dockerfile:定义了如何构建镜像的文本文件,包括基础镜像、环境变量、所需软件的安装以及应用代码的复制。
  • 镜像(Image):在 Docker 中,一个镜像是一个独立的、具有应用程序和其依赖项的打包文件。
  • 容器(Container):通过镜像创建的一个运行实例,是在一个封闭的环境中运行应用程序。

构建镜像的步骤

下面将通过一个 Node.js 应用程序的例子,演示如何创建和构建 Docker 镜像。

1. 准备代码

假设我们有一个简单的 Node.js 应用程序,代码结构如下:

1
2
3
4
5
my-node-app/

├── Dockerfile
├── package.json
└── app.js

package.json 内容如下:

1
2
3
4
5
6
7
8
9
10
11
{
"name": "my-node-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}

app.js 内容如下:

1
2
3
4
5
6
7
8
9
10
11
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
res.send('Hello, World!');
});

app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});

2. 创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,定义镜像的构建过程。以下是一个示例 Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 使用官方 Node.js 镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用程序代码
COPY . .

# 暴露应用运行的端口
EXPOSE 3000

# 启动应用
CMD ["npm", "start"]

3. 构建 Docker 镜像

在终端中,切换到项目目录并运行以下命令构建 Docker 镜像:

1
docker build -t my-node-app .

命令说明:

  • docker build:构建镜像的命令。
  • -t my-node-app:为镜像指定一个名称(my-node-app),可选地还可以指定标签。
  • .:表示Dockerfile在当前目录下。

如果一切正常,你应该会看到一系列构建步骤的输出,最后生成新镜像。

4. 验证构建的镜像

要确保镜像构建成功,可以运行以下命令查看本地镜像列表:

1
docker images

你应该看到名为 my-node-app 的镜像。

5. 运行容器以验证

使用以下命令运行一个容器实例并验证它是否正常工作:

1
docker run -p 3000:3000 my-node-app

命令说明:

  • -p 3000:3000:将容器的 3000 端口映射到主机的 3000 端口。
  • my-node-app:要运行的镜像名称。

在浏览器中访问 http://localhost:3000,你应该看到“Hello, World!”的消息。

整合到 CI/CD 管道中

接下来,我们需要将这一过程集成到 CI/CD 管道中。常见的 CI/CD 工具,如 Jenkins、GitHub Actions 或 GitLab CI,都支持在构建阶段使用 Docker。

以 GitHub Actions 为例,以下是一个简单的工作流程,当代码推送到主分支时,它会自动构建 Docker 镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
name: CI/CD Pipeline

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Build Docker image
run: |
docker build -t my-node-app .

- name: Push Docker image
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
docker push my-node-app

在这个例子中,我们通过 GitHub Actions 在代码推送到主分支时自动构建 Docker 镜像并推送到 Docker Hub。

总结

在本篇教程中,我们学习了如何构建 Docker 镜像,并将其集成到 CI/CD 流程中。构建镜像是应用程序发布的关键步骤,为后续的部署和测试提供了基础。

在下一篇教程中,我们将探讨如何将构建好的镜像部署到测试环境中,进一步推动 CI/CD 流程的自动化。请继续关注!

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论