参与者可分阶段提交容器镜像完成以下3个任务(分数依次占 30/30/40),根据评分系统的分数返回验证任务的完成情况。
1.输出Hello world
2.计算/tcdata/num_list.csv
中一列数字的总和。
3.在/tcdata/num_list.csv
文件中寻找最大的10个数,从大到小生成一个 ListList.
num_list.csv文件中只有一列不为负的整数,其中存在重复值,示例如下:
102
6
11
11
生成入口脚本
run.sh
,放置于镜像工作目录。运行后生成结果result.json
放置于工作目录(与run.sh
同目录),评分系统将根据result.json
进行打分。json文件如下所示:
{
"Q1":"Hello world",
"Q2":sum值,
"Q3":[top10_list]
}
先到 docker 的官网下载安装包
第一句,描述就是说 docker desktop 是社区版,可以下载;
注意第二句,是说这个下载是给 win10 专业版、企业版和教育版准备的,如果是家庭版就点击最后那行蓝字下载家庭版用的版本。
查看win10版本:设置–>系统–>关于。
我就是家庭版所以到下一个页面下载。
可以看到家庭版是基于 WSL2 的(从这开始就开始挖坑了,家庭版安装特别麻烦,所以使用 docker 最好还是用 Linux 然后是 win10 pro)
官方教程想看的可以看看。
首先,要求系统版本 Version 1903 or higher, with Build 18362 or higher。把系统升级最新就好。
进入控制面板–>程序–>程序和功能中,选择启用或者关闭Windows功能,勾选虚拟机平台和适用于 Linux 的 Windows 子系统,重启。
下载安装包,官方教程页面就有,安装,并将 WSL 2设置为默认版本。
# wsl命令可以设置单独某个具体wsl的linux版本为1版本但是2版本,wsl2速度较于旧版wsl快了很多,有了# 高铁还蹬啥自行车。
wsl --set-default-version 2
显示
有关于 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
说明成功!
打开 Microsoft Store 搜索 Ubuntu 安装。
安装完成后,第一次打开 Ubuntu 的时候,将打开一个控制台窗口,会等待几分钟来进行配置,启动完成后为 Ubuntu 创建一个用户和密码。
重启后,docker desktop 会自动开启,点击右下角的小鲸鱼进入设置。
在 Resource–>WSL INTEGERATION 里将 Ubuntu 选上应用就可以了!
在 Linux 里输入 docker version
官方教程,挺傻瓜的,就不贴了。
天池的论坛下其实有很多大佬写的详细教程,我挑了一个跟着做一次。大佬教程
新建文件夹,如:docker_submit_demo(名字可自拟),并在此文件夹下,新建 tcdata 文件夹。
利用 python 在 docker_submit_demo 文件夹下编写文件(也可用其他工具):
#!/usr/bin/env python
# coding: utf-8
import pandas as pd
import numpy as np
import json
#data=np.random.randint(1,100,200)
#data=pd.DataFrame(data)
#data.to_csv("./tcdata/num_list.csv",index=False,header=False)
data=pd.read_csv("/tcdata/num_list.csv",header=None)#天池python镜像默认包含此文件,自己测试用如下指令
#data=pd.read_csv("./tcdata/num_list.csv",header=None)
#第一题
result_1="Hello world"
#第二题
result_2=0
for i,num in enumerate(data[0]):
result_2+=num
#第三题
data.sort_values(by=0,ascending=False,inplace=True)
result_3=data[0][:10]
result_3=list(result_3)
result={
"Q1":result_1,
"Q2":result_2,
"Q3":result_3
}
with open('result.json', 'w', encoding='utf-8') as f:
json.dump(result, f)
# 安装
pip install pipreqs
# 在当前目录生成
pipreqs . --encoding=utf8 --force
生成的 requirements.txt 内容:
pandas==1.1.3
numpy==1.19.2
#!/bin/sh
CURDIR="`dirname $0`" #获取此脚本所在目录
echo $CURDIR
cd $CURDIR #切换到该脚本所在目录
python hello_world.py
sh run.sh
,上述代码可以简化为python hello_world.py
python3 hello_world.py
sh run.sh
推荐使用Git Bash# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)
ADD . /
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## Install Requirements(requirements.txt包含python包的版本)
## 这里使用清华镜像加速安装
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
在 docker_submit_demo 文件夹下,地址栏内输入powershell
,打开 powershell,进行指令输入:
## docker登陆(push镜像需要登陆,服务器地址为赛事要求的,这里以上海为例):
docker login --username=你自己的用户名 registry.cn-shanghai.aliyuncs.com
## 不要忘记加.
## 公网地址上述已经提到过
docker build -t 公网地址/版本号 .
## 构建完成后可先验证是否正常运行,正常运行后再进行推送。
CPU镜像:docker run 公网地址/版本号 sh run.sh
GPU镜像:nvidia-docker run 公网地址/版本号 sh run.sh
## 推送到镜像仓库,如果出错,可能没登录
docker push 公网地址/版本号