小言_互联网的博客

阿里天池比赛: Docker练习场(Mac)

349人阅读  评论(0)

一、Mac 安装Docker客户端

参考教程:菜鸟教程Mac安装Docker, 选择第二种手动安装方法, 我下载的版本是Stable.

二、天池官方教程提交结果

【入门】Docker练习场
左侧菜单栏找到“手把手教程”, 直接从第二步开始
最重要的是构建镜像并推送的过程:

1、pull一个镜像(很多人用centos和Ubuntu)

#1、推荐使用阿里天池默认的镜像
docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3

2、 准备所需文件

文件目录如下:
|–Dockerfile # 可以根据Dockfile创建镜像
|–hello_world.py # 代码部分
|–result.json # 保存代码运行结果
|–run.sh # 容器运行时默认执行的脚本文件
⚠️注意这里: 不需要建立数据文件夹, 因为比赛要求的/tcdata/num_list.csv数据在你提交文件后官方后台会自动匹配, (我在这里迷惑了很久, 我只写了程序, 没有生成结果,怎么评分?)

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

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

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

## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
(2) 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)
(3) run.sh文件(Linux的可执行文件)
python hello_world.py

准备完了, 该推送结果到自己注册镜像托管的命名空间了:
这里我采用的方法是, 在服务器上直接推送.
(1) docker login --username=XXX registry.cn-hangzhou.aliyuncs.com
这一段在阿里云“容器镜像服务”中可以查看

(2) docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
注意这里面test_for_tianchi/test_for_tianchi_submit:1.0 部分要和注册时的名称保持一致.
命令行含义: 构建镜像

(3) docker run registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 (your_image) sh run.sh
命令行含义: 激活容器

(4) docker push registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0
命令行含义: 上传镜像

(5) 返回比赛页面, 在左侧【提交结果】中填写推送的镜像路径、用户名和密码,即可提交, 在【我的成绩】查看结果

秀成绩

祝顺利!


转载:https://blog.csdn.net/weixin_35894210/article/details/104970727
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场