天池 Docker 练习场比赛详细攻略+代码

本文将详细讲述天池 Docker 练习场的比赛流程,并贴出代码以供参考

1. 比赛内容

题目:

  • 输出 Hello world
  • 计算 /tcdata/num_list.csv 中一列数字的总和
  • /tcdata/num_list.csv 文件中寻找最大的 10 个数,从大到小生成一个 List

输出结果格式:

{  
    "Q1":"Hello world", 
    "Q2":sum值, 
    "Q3":[top10_list] 
}

注意事项

  • 输出 Hello world 就是将 "Hello world" 直接写入 result.json 中就行
  • /tcdata/num_list.csv :提交镜像后评分系统中会有这个文件,所以在编程时直接引用就好

2. 编写代码

下面以阿里云 Centos 7 为例

创建文件夹

mkdir -p /data/tianchi_docker_test && cd /data/tianchi_docker_test

tianchi_docker_test 文件夹中创建文件

touch Dockerfile hello_world.py result.json run.sh

赋予权限

chmod 755 *

Dockerfile 中,直接复制模版就行

# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /

## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /

## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]

hello-world.py

# coding:utf-8

import json
import csv

file_name = '/tcdata/num_list.csv'
data = []

# 第一题,直接写入 Hello world
result = {
    "Q1": "Hello world",
    "Q2": 0,
    "Q3": []
}

# 第二题,求和
with open(file_name, 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        data.append(int(row[0]))

sum = sum(data)
result['Q2'] = sum

# 第三题
result['Q3'] = sorted(data, reverse=True)[0:10]

# 保存到 result.json
with open('result.json', 'w', encoding='utf-8') as f:
    json.dump(result, f)

run.sh

python hello-world.py

3. 构建镜像并推送

登录阿里云容器镜像服务

docker login --username=用户名@aliyun.com registry.cn-shanghai.aliyuncs.com

构建镜像(注意:后面有个 .,表示使用当前目录下的 Dockerfile 构建镜像)

docker build -t registry.cn-shanghai.aliyuncs.com/命名空间/镜像名称:版本号 .

推送镜像

docker push registry.cn-shanghai.aliyuncs.com/命名空间/镜像名称:版本号

提交结果,镜像路径中填写:

registry.cn-shanghai.aliyuncs.com/命名空间/镜像名称:版本号

OK,good luck !

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值