k8s学习笔记——创建一个用于微服务测试的镜像(curl)

本文介绍了如何在Docker官方的Busybox基础镜像上构建一个包含curl、telnet和net-tools的自定义镜像。通过编写Dockerfile,从Ubuntu最新版开始,安装所需网络工具,然后打包并上传到私有镜像仓库。最后在Kubernetes中使用该镜像进行网络测试,展示如何在Pod中运行curl命令检查内部服务。

我在docker官网上没怎么找到有curl工具的镜像busybox内没有只有简单的网络命令。于是自己动手做了一个,方法如下:

创建Dockerfile文件

From ubuntu:latest
#安装curl telnet 和常用ping ifconfig等网络命令

RUN apt-get update && apt-get install -y curl telnet net-tools

打包镜像上传至私有镜像仓库

//打包镜像
sudo docker build -t core.harbor.shell.com:32042/library/busyboxtools:v1 .

//上传至私有镜像仓库
sudo docker push core.harbor.shell.com:32042/library/busyboxtools:v1

在k8s中临时使用

kubectl run ubuntu-test --image=core.harbor.shell.com:32042/library/busyboxtools:v1 --command -- sleep 3600

这样就可以在default的namespace下看到

//kubectl get pod

NAME                              READY   STATUS    RESTARTS   AGE
ubuntu-test                       1/1     Running   22         22h
//进入pod就可以使用curl命令对内部地址进行测试了
//kubectl exec -it ubuntu-test -- /bin/sh
# curl -v http://geoserver.cephfs.svc.cluster.local:8888/geoserver

*   Trying 22.102.210.216:8888...
* TCP_NODELAY set
* Connected to geoserver.cephfs.svc.cluster.local (22.102.210.216) port 8888 (#0)
> GET /geoserver HTTP/1.1
> Host: geoserver.cephfs.svc.cluster.local:8888
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 
< X-Frame-Options: SAMEORIGIN
< Location: /geoserver/index.html
< Content-Length: 0
< Date: Tue, 19 Apr 2022 01:39:05 GMT
< 
* Connection #0 to host geoserver.cephfs.svc.cluster.local left intact

### 使用 Dockerfile 构建测试镜像的步骤 #### 1. 准备工作目录 在构建 Docker 镜像之前,需要先创建一个用于存放构建相关文件的目录。例如,可以创建一个名为 `test_image` 的目录,并进入该目录进行后续操作: ```bash mkdir test_image cd test_image ``` #### 2. 创建 Dockerfile 在当前目录下创建一个名为 `Dockerfile` 的文件。Docker 默认会寻找名为 `Dockerfile` 的文件作为构建配置文件,因此无需额外指定文件名。 以下是一个简单的 Dockerfile 示例,用于构建一个基于 Python 的测试镜像: ```Dockerfile # 使用官方 Python 镜像作为基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器中的 /app 目录 COPY . /app # 安装所需的依赖包 RUN pip install --no-cache-dir -r requirements.txt # 暴露容器的 5000 端口 EXPOSE 5000 # 设置容器启动时运行的命令 CMD ["python", "app.py"] ``` #### 3. 创建测试文件 在 `test_image` 目录下,创建一个 `requirements.txt` 文件和一个 `app.py` 文件,用于测试 Python 应用程序。 `requirements.txt` 文件内容示例: ``` flask ``` `app.py` 文件内容示例: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello from Docker!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ``` #### 4. 构建镜像 使用 `docker build` 命令构建镜像,并指定一个标签,例如 `test_app:1.0`: ```bash docker build -t test_app:1.0 . ``` 该命令会读取当前目录下的 `Dockerfile`,并按照其中的指令构建镜像。 #### 5. 查看镜像列表 构建完成后,可以使用 `docker images` 命令查看本地已有的镜像列表,确认 `test_app:1.0` 镜像是否成功构建: ```bash docker images | grep test_app ``` 输出示例: ``` test_app 1.0 7c6f43c34230 1 minute ago 140MB ``` #### 6. 运行测试容器 使用 `docker run` 命令启动一个容器,并将容器的 5000 端口映射到宿主机的 5000 端口: ```bash docker run -d -p 5000:5000 test_app:1.0 ``` #### 7. 测试镜像 打开浏览器或使用 `curl` 命令访问 `http://localhost:5000`,确认容器中的应用是否正常运行: ```bash curl http://localhost:5000 ``` 预期输出: ``` Hello from Docker! ``` ### 多阶段构建优化镜像体积 如果希望进一步优化镜像体积,可以使用多阶段构建技术。以下是一个使用多阶段构建的 Dockerfile 示例: ```Dockerfile # 第一阶段:构建阶段 FROM python:3.9 as builder WORKDIR /app COPY . /app RUN pip install --prefix=/install_dir -r requirements.txt # 第二阶段:运行阶段 FROM python:3.9-slim WORKDIR /app COPY --from=builder /install_dir /usr/local COPY . /app EXPOSE 5000 CMD ["python", "app.py"] ``` 此方法可以有效减少最终镜像的体积,仅保留运行应用程序所需的依赖项和文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值