Docker基礎--天池Docker入門

Docker基礎

1、Docer基礎概念

  • 鏡像(Images):就是靜態的文件系統,裏面有源代碼、依賴的庫、配置文件等,類似於github下載的代碼包,但是是一個完整的系統,可以直接運行。可以用docker images查看系統中的鏡像。
  • 容器(Container):容器是運行中的鏡像,他的實質是進程,通過docker ps可以查看運行中的容器。
  • 倉庫(Repository):首先我們需要登陸一個服務器Docker Registry,然後每個Registry上可以包含多個Repository,每個Repository下可以多個Tag相當於不同的版本,每個Tag對應一個鏡像Image

2、Docker基本操作

最基本的操作是login、pull、push,類似於github,首先安裝了docker之後,我們登陸Docker服務器:

  • docker login [Registry名稱],然後輸入用戶名和登陸密碼登陸。
  • docker pull [鏡像名]:[鏡像Tag]:類似於git clone下載對應鏡像。
  • docker push,類似於github的push,利用docker images可以查看鏡像對應的倉庫名和對應的Tag好,利用docker push [Repository]:[Tag]更新遠程倉庫的鏡像。

3、Dockerfile創建鏡像

可以通過docker commit 和 Dockerfile創建鏡像,官方推薦使用Dockerfile創建,可以直觀地看到創建過程。
基礎指令簡介:

  • ARG:指定臨時變量,鏡像創建完成之後會消失
  • FROM:指定在一個鏡像之上構建
  • WORKDIR:指定工作目錄
  • RUN:執行一次生成一層鏡像
  • CMD:設置啓動後默認執行的命令和參數,一般用於指定參數
  • ENTRYPOINT:設置啓動後默認執行的命令和參數,一般作爲人口
  • COPY:拷貝本地文件到docker,遠程用curl或者wget
  • ADD:本地文件複製到docker去,自動解壓縮

4、實戰Docker天池入門賽

第一步:安裝docker
根據電腦版本安裝docker
第一步:開通阿里雲容器鏡像服務
看手把手教程的第二步,非常詳細:
https://tianchi.aliyun.com/competition/entrance/231759/tab/174
第三 步:準備本地文件
四個,Dockerfile(構造鏡像)、hello_world.py(執行代碼)、result.json(空白用於存放結果)、run.sh(容器運行入口)

1、Dockerfile:按照手把手教程配置即可

FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
ADD . /
WORKDIR /
CMD ["sh", "run.sh"]

2、hello_world.py:執行代碼

import json
import heapq

class TopKHeap(object):
    def __init__(self,k):
        self.data=[]
        self.k=k

    def push(self,num):

        if len(self.data)<self.k:
            heapq.heappush(self.data,num)
        else:
            top_min=self.data[0]
            if num>top_min:
                heapq.heapreplace(self.data,num)
                
    def topk(self):
        return list(reversed([heapq.heappop(self.data) for i in range(self.k)]))

def get_result():
    num_sum = 0
    topKHeap_10 = TopKHeap(10)
    with open("/tcdata/num_list.csv", "rb") as f:
        line = f.readline()
        while line:
            num = int(line)
            num_sum += num
            topKHeap_10.push(num)
            line = f.readline()
    return num_sum, topKHeap_10.topk()

num_sum, top_10_list = get_result()
data = {
    "Q1":"Hello world",
    "Q2":num_sum,
    "Q3":top_10_list
}

# data_json = json.dumps(data)

with open("./result.json", "w") as f:
    json.dump(data, f)

3、run.sh

python hello_world.py

本地調試程序,在絕對路徑 /tcdata/ 創建一個num_list.csv文件,裏面是n個數字,python hello_world.py查看result.json的輸出

第四部:上傳鏡像
上傳到第二步的服務中
1、登陸阿里雲Registry

$ sudo docker login --username=[用戶名] registry.cn-shanghai.aliyuncs.com

2、拉取鏡像

$ sudo docker pull registry.cn-shanghai.aliyuncs.com/[鏡像名]:[鏡像版本號]

3、利用Dockerfile創建鏡像
進入到Dockerfile的目錄下

$ sudo docker build -t registry.cn-shenzhen.aliyuncs.com/[鏡像名]:[鏡像版本號] .

4、上傳到鏡像服務器

$ sudo docker push registry.cn-shenzhen.aliyuncs.com/[鏡像名]:[鏡像版本號]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章