AI开发平台MODELARTS-在ECS中通过Dockerfile从0制作自定义镜像用于推理:本地构建镜像

时间:2024-10-16 17:00:44

本地构建镜像

以linux x86_x64架构的主机为例,您可以购买相同规格的E CS 或者应用本地已有的主机进行 自定义镜像 的制作。

购买ECS服务器的具体操作请参考购买并登录弹性云服务器。镜像选择公共镜像,推荐使用ubuntu18.04的镜像。
图1 创建ECS服务器-选择X86架构的公共镜像
  1. 登录主机后,安装Docker,可参考Docker官方文档。也可执行以下命令安装docker。
    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh
  2. 获取基础镜像。本示例以Ubuntu18.04为例。
    docker pull ubuntu:18.04
  3. 新建文件夹“self-define-images”,在该文件夹下编写自定义镜像的“Dockerfile”文件和应用服务代码“test_app.py”。本样例代码中,应用服务代码采用了flask框架。
    文件结构如下所示
    self-define-images/
        --Dockerfile
        --test_app.py
    • “Dockerfile”
      From ubuntu:18.04
      # 配置华为云的源,安装 python、python3-pip 和 Flask
      RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \
        sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \
        sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list && \
        apt-get update && \
        apt-get install -y python3 python3-pip && \
        pip3 install  --trusted-host https://repo.huaweicloud.com -i https://repo.huaweicloud.com/repository/pypi/simple  Flask
      
      # 复制应用服务代码进镜像里面
      COPY test_app.py /opt/test_app.py
      
      # 指定镜像的启动命令
      CMD python3  /opt/test_app.py
    • “test_app.py”
      from flask import Flask, request
      import json 
      app = Flask(__name__)
      
      @app.route('/greet', methods=['POST'])
      def say_hello_func():
          print("----------- in hello func ----------")
          data = json.loads(request.get_data(as_text=True))
          print(data)
          username = data['name']
          rsp_msg = 'Hello, {}!'.format(username)
          return json.dumps({"response":rsp_msg}, indent=4)
      
      @app.route('/goodbye', methods=['GET'])
      def say_goodbye_func():
          print("----------- in goodbye func ----------")
          return '\nGoodbye!\n'
      
      
      @app.route('/', methods=['POST'])
      def default_func():
          print("----------- in default func ----------")
          data = json.loads(request.get_data(as_text=True))
          return '\n called default func !\n {} \n'.format(str(data))
      
      # host must be "0.0.0.0", port must be 8080
      if __name__ == '__main__':
          app.run(host="0.0.0.0", port=8080)
  4. 进入“self-define-images”文件夹,执行以下命令构建自定义镜像“test:v1”。
    docker build -t test:v1 .
  5. 您可以使用“docker images”查看您构建的自定义镜像。
support.huaweicloud.com/usermanual-standard-modelarts/modelarts_23_0270.html