由於在阿里的淘寶商品直播識別大賽中提交結果需要用到docker,以前也沒有用過。正好阿里提供了docker的新人賽,借此機會學習一下。
既然學習docker,首先就要了解docker是什么:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器或Windows 機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口 ——摘自《百度百科》
這里涉及到一些概念。容器:是一個視圖隔離、資源可限制、獨立文件系統的進程集合。什么叫視圖隔離?我們都知道,一般操作系統的文件系統,各個應用之間都是互相可見的、可相互通信的。而視圖隔離就使得進程和進程之間不會相互影響,它使得應用有自己獨立的主機名,並可以限制其他應用對自己的可見性。資源可限制指的是我們可以控制資源的使用率,如內存大小,CPU個數等等。鏡像:運行容器所需要的的文件集合。通常情況下我們會使用dockerfile來描述鏡像構建的步驟。后面會具體介紹dockerfile的用法
一、環境准備
windows安裝地址:https://docs.docker.com/docker-for-windows/install/
Linux采用如下命令安裝即可:
$ sudo apt-get update $ sudo apt install docker.io
二、開通阿里雲容器鏡像服務
(由於是在阿里雲的賽場打比賽,人家肯定是要推廣自己的產品的)
打開如下網址開通阿里雲容器鏡像服務即可:https://www.aliyun.com/product/acr?,開通完成后進行一些基本的配置就可以使用啦。
三、構建鏡像並推送
在開始構建鏡像之前,先附上賽題(其實題目根本不重要,都是最基本的語法,重點還是了解docker的基本使用)
可以看到任務有三個,而輸出要求為生成json文件。所以測試時進行如下操作。
1)首先在本地新建一個空的文件夾,命名隨意(在這里我是用阿里的官方文檔示例名字tianchi_submit_demo)
2)新建dockerfile文件
# Base Images ## 從天池基礎鏡像構建 FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3 ## 把當前文件夾里的文件構建到鏡像的根目錄下 ADD . / ## 指定默認工作目錄為根目錄(需要把run.sh和生成的結果文件都放在該文件夾下,提交后才能運行) WORKDIR / ## 鏡像啟動后統一執行 sh run.sh CMD ["sh", "run.sh"]
3)在文件夾新建一個python文件,命名隨意(我的命名為test.py),可以先簡單寫一個print函數測試一下。
python test.py
4)新建run.sh文件,文件內容即為
python test.py
用來通過命令啟動該程序
5)在tianchi_submit_demo目錄下新建tcdata目錄,並在tcdata目錄下新建num_list.csv文件(本地測試用)
6)修改test.py為題目要求輸入輸出
1 import csv 2 import json 3 4 print("Hello world") 5 with open('./tcdata/num_list.csv') as f: 6 row = csv.reader(f, delimiter=',') 7 8 all_num = [] 9 10 for r in row: 11 all_num.append(int(r[0])) 12 13 print(len(all_num)) 14 s = sum(all_num) 15 16 sort_result = sorted(all_num, reverse=True) 17 18 top_10 = [] 19 20 for i in range(10): 21 top_10.append(sort_result[i]) 22 23 jsondata = json.dumps({'Q1': 'Hello world', 'Q2': s, 'Q3': top_10},sort_keys=True, indent=4, separators=(',', ': ')) 24 fjson = open('result.json', 'w') 25 fjson.write(jsondata) 26 fjson.close()
7)運行test.py,確定生成json文件且文件內容正確
8)登錄阿里雲docker服務
注意username換成自己的阿里雲用戶名
9)打開cmd,進入tianchi_submit_demo目錄,鍵入如下命令構建dockerfile
docker build -t registry.cn-shanghai.aliyuncs.com/dock-l/first-learning:1.1 .
注意最后版本號后面還有個“空格+.”!!!構建成功后會顯示如下界面
10)鍵入如下命令上傳構建好的鏡像,注意千萬不要忘記版本號
docker push registry.cn-shanghai.aliyuncs.com/dock-l/first-learning:1.1
上傳成功后顯示如下結果
11)最后回到賽場提交就可以啦
12)等待結果,完美結束