1. 程式人生 > 其它 >Docker練習記錄

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檔案

python sum.py
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進來(比如來自阿里雲映象),然後我們可以將整個專案打包,這個打包相比一般的打包,它還搭載了他所需的環境,從而避免了專案復現的一些問題。