Docker練習記錄
很早之前就想了解docker這個東西了,這次通過阿里雲的一個新人練習體會到了docker的作用,收穫很大,雖然只是很簡單的一個入門= =!練習地址:https://tianchi.aliyun.com/competition/entrance/231759/information
非常感謝討論區的大佬的詳細解析,在此僅做一個一個記錄方便後續回憶!
一、安裝Docker環境
sudo apt install docker.io(驗證安裝是否成功:docker info)
二、開通阿里雲容器映象服務
按照官方步驟,一步一步搭建即可。
1)在選擇程式碼源時使用的是本地倉庫。
2)在構建映象並推送時,採用的方式是在伺服器上直接操作。
三、程式碼構建過程
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)新建run.sh檔案
4)新建sum.py檔案
import csv
import json
print("Hello world")
with open('./tcdata/num_list.csv') as f:
row = csv.reader(f, delimiter=',')
height = []
for r in row:
height.append(int(r[0]))
s = sum(height)
height_down = sorted(height, reverse=True)
height_down_10 = []
for i in range (10):
height_down_10.append(height_down[i])
jsondata = json.dumps({'Q1': 'Hello world', 'Q2': s, 'Q3': height_down_10},
sort_keys=True, indent=4, separators=(',', ': '))
fjson = open('result.json', 'w')
fjson.write(jsondata)
fjson.close()
5)在tianchi_submit_demo目錄下新建tcdata目錄,並在tcdata目錄下新建num_list.csv檔案(本地利用Python測試用)
開啟命令列,進入tianchi_submit_demo目錄,用Python執行如下命令列,即會輸出Hello world,並生成result.json檔案。這一步的主要作用是驗證程式碼的正確性,不是非必須的。
python sum.py
6)開啟命令列,進入tianchi_submit_demo目錄,在此目錄下構建Dockerfile:
docker build -t registry.cn-shenzhen.aliyuncs.com/[你的名稱空間]/[你的倉庫]:[版本號] .
(千萬注意最後要一個 . 表示當前路徑,否則報錯)
7)上傳構建好的映象
docker push -t registry.cn-shenzhen.aliyuncs.com/[你的名稱空間]/[你的倉庫]:[版本號]
8)提交映象
在提交結果處提交映象,配置路徑:
映象路徑為:
registry.cn-shenzhen.aliyuncs.com/[你的名稱空間]/[你的倉庫]:[版本號]
注意別忘了版本號!
以上的流程歸納一下就是:
- 安裝docker
- 從阿里雲那裡搞來需要的映象(執行環境)(pull)
- 搞到環境之後,寫程式(主程式,執行指令碼,配置環境),將配置檔案和專案程式寫在一個目錄,如果涉及檔案什麼的(好像是說要通過掛載的形式,所以我們只要寫出正確的路徑,不用傳檔案)
- 寫完了當然就是build 映象(這個說法不知道對不對)
- build完了就傳到遠端的映象上去,然後別人就可以用了
(push)
最後做個總結吧:
以我的理解,docker就是一個裝環境的容器,我們將所需要的環境pull進來(比如來自阿里雲映象),然後我們可以將整個專案打包,這個打包相比一般的打包,它還搭載了他所需的環境,從而避免了專案復現的一些問題。