閱讀228 返回首頁    go windows


前言__Docker_操作指南_批量計算-阿裏雲

BatchCompute除了支持把軟件直接安裝到ECS鏡像,還支持通過Docker鏡像部署應用程序。

您可以自定義製作一個Docker鏡像,使用registry工具上傳到阿裏雲OSS,然後您可以指定您的作業的任務在這個鏡像中運行。

1. BatchCompute對Docker支持的原理

這裏要和普通VM支持對比說明一下:

(1) 先說使用普通VM, 用戶提交作業,每個作業可以有多個任務,每個任務指定一個鏡像(支持Linux 和 Window),係統運行這個任務時,會根據指定的鏡像啟動VM,用戶任務將運行在這個VM上。任務完成後結果會被上傳到指定的OSS目錄,VM銷毀。然後執行下一個任務。

(2) 使用Docker:每個任務也可以指定使用一個Docker容器鏡像來運行。運行task時,會先啟動一個VM運行支持Docker的係統鏡像(如:支持Docker的Ubuntu),然後會從OSS上下載你指定的Docker鏡像,在這個VM中啟動起來,用戶的任務將運行在這個Docker容器內。任務完成後結果上傳到指定的OSS目錄,VM銷毀。然後執行下一個任務。

目前一個VM,隻支持運行一個Docker鏡像。

  1. # 使用VM:
  2. ---
  3. |-- job
  4. |-- task
  5. |-- VM (用戶指定的VM,支持Windows和Linux)
  6. |-- program (用戶程序)
  7. # 使用Docker模式:
  8. ---
  9. |-- job
  10. |-- task
  11. |-- VM (支持docker的Ubuntu)
  12. |-- Docker-Container(用戶指定的Docker的容器鏡像)
  13. |-- program (用戶程序)

2. 使用Docker和不使用Docker有什麼區別

- 不使用Docker 使用 Docker
使用鏡像 指定ECS鏡像ID 指定支持Docker Container的ECS鏡像ID(官網提供的Ubuntu),還需指定自定義Docker鏡像。
程序運行平台 支持Window和Linux 支持Linux
本地調試 不支持本地調試 鏡像在本地製作,支持本地調試

3. 安裝Docker

(1) 在 Ubuntu 上安裝(推薦使用)

  1. sudo apt-get update #更新軟件源
  2. sudo apt-get install docker.io #安裝docker
  1. #檢查是否成功
  2. sudo docker ps

可以看到類似下麵的結果:

Ubuntu下安裝好docker後,每次都要加sudo運行比較影響效率。有沒有好辦法?

您可以通過加入docker組,即可免sudo。

  1. sudo gpasswd -a ${USER} docker # 將當前用戶加入docker組, 如果沒有docker組,加一個:sudo groupadd docker
  2. sudo service docker restart # 重啟docker服務,然後注銷後重新登錄係統即可

(2) 在 window/Mac 上安裝

從官網下載docker toolbox:

https://www.docker.com/docker-toolbox

安裝完成後會有2個快捷方式:

Kitematic: 用來管理docker container的圖形化界麵

Docker Quickstart Terminal: 可以快速啟動 docker 命令行界麵。

(3) 配置加速器

使用加速器將會提升您在國內獲取Docker官方鏡像的速度:阿裏雲容器服務開發者平台

4. 製作Docker鏡像

本例中我們將製作一個 Ubuntu 鏡像,內置python。鏡像名稱:myubuntu。

新建一個目錄 dockerUbuntu,結構如下:

  1. dockerUbuntu
  2. |-- Dockerfile

文件 Dockerfile 的內容:

  1. FROM ubuntu:14.04
  2. # 這裏要替換 your_name 為您的名字, 和your_email 為您的Email
  3. MAINTAINER your_name <your_email>
  4. # 更新源
  5. RUN apt-get update
  6. # 清除緩存
  7. RUN apt-get autoclean
  8. # 安裝python
  9. RUN apt-get install -y python
  10. # 啟動時運行這個命令
  11. CMD ["/bin/bash"]

運行以下命令,build鏡像:

  1. cd dockerUbuntu #進入 dockerUbuntu 目錄
  2. docker build -t myubuntu ./ #正式build, 命名為 myubuntu
  • 注意:docker 命令在ubuntu中默認需要加sudo才能運行,而在Mac/Windows中,需要從“Docker Quickstart Terminal”中啟動的命令行工具中運行。

build 完成後, 運行以下命令查看:

  1. docker images

可以看到類似下麵的結果:

製作docker鏡像,除了Dockerfile這種方式外,還有更加直觀的製作方式

5. 將docker鏡像上傳到OSS

使用BatchCompute Docker服務,需要將製作的Docker鏡像myubuntu上傳到OSS,係統將會從OSS下載這個鏡像來運行您的任務程序。

(1) 安裝 OSS Docker Registry 2

假設您想要將docker存儲到OSS的目錄路徑為:

  1. oss://your-bucket/dockers/

我們將利用Docker Registry 2官方鏡像創建一個私有鏡像倉庫,需要配置了OSS的Access Key ID, Access Key Secret, Region, Bucket等信息。

具體安裝步驟如下:

先在當前目錄生成文件config.yml

  1. version: 0.1
  2. log:
  3. level: debug
  4. storage:
  5. oss:
  6. accesskeyid: your_access_key_id
  7. accesskeysecret: your_access_key_secret
  8. region: oss-cn-qingdao
  9. bucket: your-bucket
  10. rootdirectory: dockers
  11. secure: false
  12. internal: false
  13. http:
  14. addr: 0.0.0.0:5000

其中的變量需要替換:

參數 描述
your_access_key_id 您的 access key id
your_access_key_secret 您的 access key secret
your-bucket 您的 bucket

關於OSS配置的詳細信息請參見 Docker官方文檔

然後運行下麵的命令安裝

  1. docker pull registry:2
  2. docker run -v `pwd`/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name registry -d registry:2
  • 注意:這裏region使用 oss-cn-qingdao, 表示使用青島region的OSS,而後麵提交作業也需要提交到相應的region才能正常工作。

完成後,可以運行以下命令查看:

  1. docker ps #查看運行的container

如果成功安裝,可以看到 registry:2

(2) 運行下麵命令,將鏡像上傳到 OSS:

  1. docker tag myubuntu localhost:5000/myubuntu
  2. docker push localhost:5000/myubuntu

注意:

  1. 要用 localhost:5000/ 作為前綴,用其他的字符串上傳不了。5000 端口是第(1)步中 -p 5000:5000 中(冒號前的5000)指定的。
  2. 您製作的鏡像名稱為 localhost:5000/myubuntu,而不是 myubuntu。

檢驗是否上傳成功, 可以直接使用OSS控製台查看是否有這個目錄: oss://your-bucket/dockers/repositories/library/myubuntu/

6. 使用Docker注意事項:

  1. Docker container運行時,用戶為root,path環境變量默認為:/sbin:/usr/sbin:/bin:/usr/bin。注意沒有/usr/local/bin

  2. PWD環境變量如果沒有設置,則為’/batchcompute/workdir’。用戶的程序包始終會被解壓到/batchcompute/workdir。

  3. 使用ClusterID提交任務時, 因為Docker registry一旦啟動後就不停止,因此提交到一個cluster中的所有job,其 BATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATH 必須相同。

  4. 目前 InputMapping,OutputMapping 不能同時掛載到同一個目錄。

  5. BatchCompute啟動Docker容器時使用—privileged=false模式,所以不允許在docker容器中啟動docker容器。

最後更新:2016-11-23 16:03:58

  上一篇:go 並發__操作指南_批量計算-阿裏雲
  下一篇:go 提交作業例子__Docker_操作指南_批量計算-阿裏雲