Hello World 示例

本教程通过演示如何将应用推送到本地 Kubernetes 集群来介绍如何使用 Rancher Desktop。

Rancher Desktop 使用了两个容器引擎,分别是 containerdMoby,它们是 Docker 生态系统的开源组件。对于 nerdctl,使用 containerd 运行时。对于 docker,使用 dockerd(moby) 运行时。

示例 1 - 构建镜像并运行容器

创建文件夹

  1. mkdir hello-world
  2. cd hello-world

创建一个空白的 Dockerfile

在 Windows 上,创建一个名为 Dockerfile 的空白文件。

在 Linux 上,你可以使用以下命令创建一个空白的 Dockerfile:

  1. vi Dockerfile

使用以下命令填充 Dockerfile

  1. FROM alpine
  2. CMD ["echo", "Hello World!!"]

构建并运行镜像以进行验证

  • nerdctl
  • docker
  1. nerdctl build --tag helloworld:v1.0 .
  2. nerdctl images | grep helloworld
  3. nerdctl run --rm helloworld:v1.0
  4. # 移除镜像
  5. nerdctl rmi helloworld:v1.0
  1. docker build --tag helloworld:v1.0 .
  2. docker images | grep helloworld
  3. docker run --rm helloworld:v1.0
  4. # 移除镜像
  5. docker rmi helloworld:v1.0

示例 2 - 构建镜像并将容器部署到 Kubernetes

根据需要将 Kubernetes Settings 面板中的 Container Runtime 切换为 dockerdcontainerd

创建一个文件夹并添加一个示例 index.html 文件,如下所示

  1. mkdir nginx
  2. cd nginx
  3. echo "<h1>Hello World from NGINX!!</h1>" > index.html

创建一个空白的 Dockerfile

在 Windows 上,创建一个名为 Dockerfile 的空白文件。

在 Linux 上,你可以使用以下命令创建一个空白的 Dockerfile:

  1. vi Dockerfile

使用以下命令填充 Dockerfile

  1. FROM nginx:alpine
  2. COPY . /usr/share/nginx/html

使用本地代码构建镜像

⚠️ 注意:你需要将 --namespace k8s.io 标志传递给 nerdctl build 命令,以便 nerdctl 构建镜像并使其在 k8s.io 命名空间中可用。

  • nerdctl
  • docker
  1. nerdctl --namespace k8s.io build --tag nginx-helloworld:latest .
  2. nerdctl --namespace k8s.io images | grep nginx-helloworld
  1. docker build --tag nginx-helloworld:latest .
  2. docker images | grep nginx-helloworld

部署到 Kubernetes

运行以下命令,从而使用在上一步中构建的镜像创建和运行 pod。

⚠️ 注意:你需要传递 --image-pull-policy=Never 标志以使用带有 :latest 标签的本地镜像(:latest 标签将始终尝试从远程仓库中拉取镜像)。

  1. kubectl run hello-world --image=nginx-helloworld:latest --image-pull-policy=Never --port=80
  2. kubectl port-forward pods/hello-world 8080:80

在浏览器中访问 localhost:8080,你将看到 Hello World from NGINX!! 的信息。如果你想留在命令行上,请使用 curl localhost:8080

删除 pod 和镜像

  • nerdctl
  • docker
  1. kubectl delete pod hello-world
  2. # 移除镜像
  3. nerdctl --namespace k8s.io rmi nginx-helloworld:latest
  1. kubectl delete pod hello-world
  2. # 移除镜像
  3. docker rmi nginx-helloworld:latest