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/[镜像名]:[镜像版本号]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章