1. 任务描述
本题目主要是为了练习docker的基本操作, 题目描述如下:
2. 开始干活
首先分析一下要准备的东西:
- docker环境
- 镜像仓库
- 需要pull的镜像文件
- Dockerfile
- 程序代码(py文件)
- run.sh
2.1 搭建docker环境
下面开始准备,本文使用的docker环境搭建在centos 7服务器上,其他操作系统命令可能有所不同
2.2 创建阿里云容器镜像仓库
申请阿里云容器镜像服务(免费),并创建仓库,创建过程中根据提示选择本地仓库设置命名空间等即可,创建完成后进入主页面:
注意下图中的公网地址,shanghai,命名空间,仓库名,使用时结合自己的进行替换即可
然后开始构建镜像并推送,将天池准备的基础python镜像拉入,在linux终端输入
docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
2.3 准备题目所需的文件
首先创建一个文件夹命名为:tianchi_submit_demo(可以根据需要命名)
下面在此文件夹下创建如下三个文件:
- Dockerfile文件
# Base Images
## 从天池基础镜像构建
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
## 把当前文件夹里的文件构建到镜像的根目录下
ADD . /
## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /
## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]
- run.sh(注意run.sh需要有可执行的权限)
python test.py
- test.py(仅供参考)
import csv
import json
sum = 0
temp = []
with open('./tcdata/num_list.csv') as f:
f_csv = csv.reader(f)
for row in f_csv:
sum += int(row[0])
temp.append(int(row[0]))
temp.sort(reverse=True)
if len(temp) > 10:
temp = temp[:10]
result = {
'Q1': 'Hello world',
'Q2': sum,
'Q3': temp
}
f = open('result.json', 'w', encoding='utf-8')
json.dump(result, f, indent=4, ensure_ascii=False)
import csv
import json
sum = 0
temp = []
with open('./tcdata/num_list.csv') as f:
f_csv = csv.reader(f)
for row in f_csv:
sum += int(row[0])
temp.append(int(row[0]))
temp.sort(reverse=True)
if len(temp) > 10:
temp=temp[:10]
result = {
'Q1':'Hello world',
'Q2':sum,
'Q3':temp,
}
f = open('result.json','w')
json.dump(result,f,indent=4,ensure_ascii=False)
下面是本地测试:
再在此目录下创建tcdata文件夹,在其中创建num_list.csv文件,随便输入几个正整数,用于在本地测试,
12
213
413
55
12
12
44
5
1
8
987
3
3
进入tianchi_submit_demo目录,输入
./run.sh
生成result.json文件,检查结果是否正确,下面是例子的结果,发现没有问题,准备上传文件
{
"Q1": "Hello world",
"Q2": 1768,
"Q3": [
987,
413,
213,
55,
44,
12,
12,
12,
8,
5
]
}
2.4 提交
进入tianchi_submit_demo目录,以下操作都在此目录下进行
- 登录阿里云Docker Registry(详细的操作在容器镜像服务管理页面都有介绍)
docker login --username=你的用户名 registry.cn-shanghai.aliyuncs.com
输入密码...
登录成功
- 开始构建Dockerfile:
docker build -t registry.cn-shenzhen.aliyuncs.com/命名空间/你的仓库:版本号 .
#注意这里有 .
# 官方给的例子是
docker build -t registry.cn-shenzhen.aliyuncs.com/test_for_tianchi/test_for_tianchi_submit:1.0 .
把test_for_tianchi和test_for_tichisubmit替换为你的就行,可以参考最开始截图中的公网地址
构建成功
- 上传镜像
docker push registry.cn-shanghai.aliyuncs.com/命名空间/你的仓库:版本号
# 这里没有 .
# 第一次push比较慢,耐心等待
上传成功
- 提交结果等待出分
镜像路径就是
registry.cn-shenzhen.aliyuncs.com/命名空间/你的仓库:版本号
# 没有 .
- 等待运行结果,查看成绩,大功告成
第一次上传仓库的密码输错了有点尴尬...
记录到此结束!