本文詳細介紹MaxCompute自訂鏡像功能使用流程。
背景介紹
在SQL或Python開發過程中存在複雜的商務邏輯,依賴眾多三方包。因此MaxCompute推出自訂鏡像管理功能,支援使用Docker鏡像來構建完整的開發環境,並在MaxCompute SQL、Python(PyODPS或MaxFrame)開發中使用。
適用範圍
鏡像大小:MaxCompute自訂鏡像中,允許建立的單個鏡像最大規格為10 GB。
鏡像數量:MaxCompute單租戶最多可上傳10個鏡像。
ACR版本要求:當前僅支援規格為標準版或進階版的ACR企業版執行個體。
CPU架構要求:構建鏡像時請使用x86_64架構CPU,目前暫不支援macOS M系列、ARM等非x86_64架構CPU。
庫版本要求:MaxCompute 作業運行環境基本對標CentOS 7,構建鏡像時請儘可能使用相容CentOS 7系統的安裝包版本,基礎鏡像中yum源已配置為阿里雲CentOS 7鏡像源地址。
鏡像內檔案目錄操作限制:
使用pip或yum等安裝包時,請勿將個人檔案放入
/home/admin、/usr/local/lib、/usr/ali、/apsara目錄中。因為啟動容器時,MaxCompute將掛載運行環境至這些目錄,會導致覆蓋掉鏡像目錄中原有的內容。
操作步驟
步驟一:安裝Docker
Linux環境:可以參考Docker官方文檔安裝Docker。
macOS或Windows環境:
個人開發人員:可以使用Docker Desktop。
未購買過授權的企業使用者:推薦使用開源的Rancher Desktop。
步驟二:授權
為對應帳號或使用者授予RAM角色讀取許可權、ACR(Container Registry)操作許可權和MaxCompute自訂鏡像操作許可權。具體如下:
授權使用情境 | 操作帳號類型 | 許可權要求 | 指導連結 |
RAM角色讀取許可權 | 阿里雲帳號(推薦) | 阿里雲帳號預設擁有RAM角色讀取許可權,無需額外授權。 | 不涉及 |
RAM使用者 | 授予AliyunRAMReadOnlyAccess許可權。 | ||
ACR操作使用許可權 | 阿里雲帳號(推薦) | 阿里雲帳號預設擁有ACR操作所有許可權,無需額外授權。 | 不涉及 |
RAM使用者 | 如果您使用RAM使用者操作ACR,需要為RAM使用者授予AliyunContainerRegistryReadOnlyAccess許可權。 | ||
MaxCompute自訂鏡像操作許可權 | 阿里雲帳號(推薦) | 阿里雲帳號預設擁有MaxCompute的自訂鏡像查看、添加、刪除等所有許可權,無需額外授權。 | 不涉及 |
RAM使用者 | 如果您使用RAM使用者操作MaxCompute自訂鏡像,需要按需為RAM使用者授予對應許可權。 |
步驟三:在Docker中構建自訂鏡像
根據MaxCompute提供的基礎鏡像通過DockerFile方式自行構建自訂鏡像。
MaxCompute CentOS基礎鏡像地址為
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest,基礎鏡像中提供Python3.7、Python3.11、pip和yum等基礎環境。MaxCompute Ubuntu基礎鏡像地址為
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest。
基於MaxCompute基礎鏡像構建自訂鏡像的DockerFile檔案。在命令列輸入下方語句:
vim DockerFile在DockerFile檔案內新增如下內容,代碼如下:
-- 使用MaxCompute CentOS基礎鏡像 FROM registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest -- 若使用Ubuntu鏡像,將鏡像地址替換為registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest -- 安裝系統依賴 RUN yum install vi -y -- 安裝第三庫 RUN /usr/ali/python3.7/bin/python3 -m pip install --no-cache-dir pandas基於DockerFile打包鏡像。
sudo docker build -f DockerFile -t <image_name>:<tag> .參數說明:
image_name:自訂鏡像名稱。
tag:自訂鏡像版本。
步驟四:上傳自訂鏡像至ACR
登入Container Registry控制台,在左上方選擇地區。
在左側導覽列選擇實例列表。
在實例列表詳情頁,單擊創建企業版實例。如已建立可忽略。
重要目前僅支援將自訂鏡像上傳至規格為標準版或進階版的ACR企業版執行個體中。
在實例列表詳情頁,單擊目標企業版執行個體的管理,進入該執行個體概覽頁面。
在左側導覽列選擇。
在倉庫管理鏡像倉庫頁面,單擊建立鏡像倉庫,在彈出的建立鏡像倉庫對話方塊中,填寫如下資訊後,單擊下一步。
參數名
是否必填
說明
地區
必填
自動產生當前執行個體所在地區。
命名空間
必填
定義鏡像倉庫命名空間,設定後不可修改。推薦建立時使用倉庫。
推薦建立的命名空間用來對應一個公司、組織或個人使用者,例如Aliyun。
不推薦用來對應一個模組或系統,例如Tomcat、CentOS,應用或模組。
倉庫名稱
必填
長度為 2 - 120 個字元,可使用小寫英文字母、數字,可使用分隔字元“_”、“-”、“.”、“/”(分隔字元不能在首位或末位)。
倉庫類型
選填
公開鏡像需使用者登入企業版執行個體後才能拉取,如果期望匿名拉取,請開啟執行個體的公開匿名拉取配置。
企業版的私人鏡像需使用者登入企業版執行個體且有Pull操作授權才能拉取。
預設為私人。
鏡像版本
選填
勾选后,该仓库下除 latest 之外的镜像版本均不可以覆盖,保证容器镜像版本一致性。
镜像加速
選填
勾选后,该仓库下会自动生成带 “_accelerated" 后缀的加速镜像版本。
完整模式:完整模式加速效果较为显著,加速镜像体积约为 130% 原镜像体积,1GB 加速镜像生成时间约为 25 秒(已生成的镜像层不会重复生成)。
仅索引模式(公测中):僅索引模式(公測中)加速效果約為 70% 完整模式加速效果, 加速鏡像體積約為 3% 原鏡像體積,1GB 加速鏡像產生時間約為 3 秒(已產生索引的鏡像層不會重複產生)。
摘要
必填
長度最長100個字元。
描述資訊
選填
支援Markdown格式。
配置代碼源資訊:
代碼源選擇本地倉庫,單擊建立鏡像倉庫。
詳情參考使用企業版執行個體構建鏡像。
將構建好的自訂鏡像上傳至同帳號下的ACR中
在倉庫管理鏡像倉庫頁面,單擊目標倉庫對應的操作列的管理。
在左側選擇基本資料。
根據基本資料頁面下方的镜像指南,在Docker環境中將自訂鏡像上傳至ACR鏡像倉庫。
(可選)若您使用的機器位於VPC網路,需要執行以下操作:
為已建立的企業版執行個體配置專用網路的存取控制,以便與企業版執行個體進行串連。詳情請參見配置專用網路的存取控制。
在Docker環境中操作ACR企業版執行個體時,網域名稱中均需增加vpc。例如:下述命令中需要將
acr-test-registry.cn-wulanchabu.cr.aliyuncs.com修改為acr-test-registry-vpc.cn-wulanchabu.cr.aliyuncs.com。$ docker login --username=***@test.aliyunid.com acr-test-registry.cn-wulanchabu.cr.aliyuncs.com
說明如果登入執行個體時出錯,檢查倉庫是否已開啟公網訪問。
步驟五:添加自訂鏡像至MaxCompute
關聯一個ACR中已經存在的鏡像,以便在MaxCompute中統一管理開發鏡像。
登入MaxCompute控制台,在左上方選擇地區。
在左側導覽列,選擇 。
在镜像管理詳情頁,選擇用户自定义镜像頁簽。
在用户自定义镜像頁簽,單擊创建镜像。在彈出的添加镜像對話方塊中,配置如下參數:
說明首次建立鏡像時,會彈出MaxCompute服務關聯角色對話方塊,單擊確認,系統將會自動建立一個用於訪問ACR資源的服務關聯角色。
參數名
描述
镜像名称
必填。自訂鏡像名稱,镜像名称以小写字母开头,只能包含小写字母、数字、横杠以及下划线。
在後續MaxCompute SQL、PyODPS、MaxFrame開發中會用到。
镜像类型
必填。ACR鏡像類型,目前僅支援ACR企業版鏡像。
企业版镜像实例
必填。選擇ACR中已建立的企業鏡像執行個體。
镜像命名空间
必填。選擇ACR中已建立的企業鏡像命名空間。
镜像仓库
必填。選擇ACR中已建立的企業鏡像倉庫。
镜像版本
必填。選擇您在ACR中上傳的鏡像版本。
镜像描述
必填。為本次添加的鏡像增加相關描述。
單擊確定,完成自訂鏡像的建立,可在自訂鏡像列表中查看已建立的自訂鏡像。
步驟六:使用自訂鏡像
可以在MaxCompute SQL UDF、PyODPS及MaxFrame開發中使用自訂鏡像。
每個開發作業僅可指定一個鏡像,否則會造成鏡像衝突問題。
調用UDF時,支援在SQL會話(Session)層級使用Flag指定所依賴的鏡像和Python版本,命令如下:
set odps.sql.python.version=cp37; set odps.session.image = <鏡像名稱>;在PyODPS開發中,支援使用execute或persist方法的image參數指定已有鏡像。命令如下:
說明若需要在PyODPS中引用鏡像開發,請升級PyODPS至V0.11.5或以上版本。
image='<鏡像名稱>'在MaxFrame開發中,支援在當前作業開發中指定已有鏡像,相關參數如下:
config.options.sql.settings = { "odps.session.image": "<鏡像名稱>" }、