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/[鏡像名]:[鏡像版本號]