由于在阿里的淘宝商品直播识别大赛中提交结果需要用到docker,以前也没有用过。正好阿里提供了docker的新人赛,借此机会学习一下。
既然学习docker,首先就要了解docker是什么:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口 ——摘自《百度百科》
这里涉及到一些概念。容器:是一个视图隔离、资源可限制、独立文件系统的进程集合。什么叫视图隔离?我们都知道,一般操作系统的文件系统,各个应用之间都是互相可见的、可相互通信的。而视图隔离就使得进程和进程之间不会相互影响,它使得应用有自己独立的主机名,并可以限制其他应用对自己的可见性。资源可限制指的是我们可以控制资源的使用率,如内存大小,CPU个数等等。镜像:运行容器所需要的的文件集合。通常情况下我们会使用dockerfile来描述镜像构建的步骤。后面会具体介绍dockerfile的用法
一、环境准备
windows安装地址:https://docs.docker.com/docker-for-windows/install/
Linux采用如下命令安装即可:
$ sudo apt-get update $ sudo apt install docker.io
二、开通阿里云容器镜像服务
(由于是在阿里云的赛场打比赛,人家肯定是要推广自己的产品的)
打开如下网址开通阿里云容器镜像服务即可:https://www.aliyun.com/product/acr?,开通完成后进行一些基本的配置就可以使用啦。
三、构建镜像并推送
在开始构建镜像之前,先附上赛题(其实题目根本不重要,都是最基本的语法,重点还是了解docker的基本使用)
可以看到任务有三个,而输出要求为生成json文件。所以测试时进行如下操作。
1)首先在本地新建一个空的文件夹,命名随意(在这里我是用阿里的官方文档示例名字tianchi_submit_demo)
2)新建dockerfile文件
# Base Images ## 从天池基础镜像构建 FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3 ## 把当前文件夹里的文件构建到镜像的根目录下 ADD . / ## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行) WORKDIR / ## 镜像启动后统一执行 sh run.sh CMD ["sh", "run.sh"]
3)在文件夹新建一个python文件,命名随意(我的命名为test.py),可以先简单写一个print函数测试一下。
python test.py
4)新建run.sh文件,文件内容即为
python test.py
用来通过命令启动该程序
5)在tianchi_submit_demo目录下新建tcdata目录,并在tcdata目录下新建num_list.csv文件(本地测试用)
6)修改test.py为题目要求输入输出
1 import csv 2 import json 3 4 print("Hello world") 5 with open(‘./tcdata/num_list.csv‘) as f: 6 row = csv.reader(f, delimiter=‘,‘) 7 8 all_num = [] 9 10 for r in row: 11 all_num.append(int(r[0])) 12 13 print(len(all_num)) 14 s = sum(all_num) 15 16 sort_result = sorted(all_num, reverse=True) 17 18 top_10 = [] 19 20 for i in range(10): 21 top_10.append(sort_result[i]) 22 23 jsondata = json.dumps({‘Q1‘: ‘Hello world‘, ‘Q2‘: s, ‘Q3‘: top_10},sort_keys=True, indent=4, separators=(‘,‘, ‘: ‘)) 24 fjson = open(‘result.json‘, ‘w‘) 25 fjson.write(jsondata) 26 fjson.close()
7)运行test.py,确定生成json文件且文件内容正确
8)登录阿里云docker服务
注意username换成自己的阿里云用户名
9)打开cmd,进入tianchi_submit_demo目录,键入如下命令构建dockerfile
docker build -t registry.cn-shanghai.aliyuncs.com/dock-l/first-learning:1.1 .
注意最后版本号后面还有个“空格+.”!!!构建成功后会显示如下界面
10)键入如下命令上传构建好的镜像,注意千万不要忘记版本号
docker push registry.cn-shanghai.aliyuncs.com/dock-l/first-learning:1.1
上传成功后显示如下结果
11)最后回到赛场提交就可以啦
12)等待结果,完美结束
原文:https://www.cnblogs.com/zdm-code/p/12823611.html