文章目录
一、在Ubuntu上安装Docker环境
在Ubuntu上安装Docker环境的命令如下:
sudo apt-get update
sudo apt install docker.io
输入sudo命令后,需要输入用户登录密码,我这里是输入学校服务器登陆密码,输入密码时是没有显示的,输完密码回车登录。
密码正确登录成功后命令被执行。
接下来是输入第二个命令。
到此步结束,环境就已经安装好了。
二、开通阿里云容器镜像服务
此部分直接按照阿里天池官方教程的步骤即可,这里也一起搬过来,原链接:天池Docker手把手超详细操作说明
阿里云容器镜像服务 https://www.aliyun.com/product/acr?
免费开通镜像托管,本次练习任务请将仓库地域选择上海。建议设置私有仓库,并一定牢记仓库密码,后续提交需要使用。
开通后进入镜像仓库https://cr.console.aliyun.com
切换标签页到命名空间,创建地址唯一的命名空间
根据任务/比赛要求选择对应的地域(本次练习选择 上海),其他的按照自己需求选择或填写。
选择代码源为本地仓库,灵活度大,完成创建。
点击管理,可查看仓库的基本信息,以及登录、拉取、推送等简单操作的指南。
详情页如下,有基本的操作命令,仓库地址一般使用公网地址即可。
这样我们就建立了镜像空间。
三、在本地构建并推送容器镜像
3.1 编写文件
我们的目的是练习使用阿里天池Docker的流程,所以代码编写部分不是重点。我直接使用win10系统手把手教你docker练习场满分这篇文章给出的代码。
天池Docker练习场的赛题链接:任务描述。
我们需要在本地新建一个任务的文件夹,我直接按照官方教程建立名为tianchi_submit_demo的文件夹,这里的名称不影响后续操作,可以自由命名。
接着我们要在这个文件夹下面新建5个文件:Dockerfile、hello_world.py、result.json、run.sh、requirements.txt。
其中除了requirements.txt之外的四个文件是必须有的。requirements.txt文件是因为代码中调用了一些库,所以创建。
建立文件的方法我用的是vim命令。
3.1.1创建hello_world.py文件
首先进入tianchi_submit_demo的目录:
cd ./tianchi_submit_demo文件所在目录/
在此目录下使用vim hello_world.py
命令,即可新建一个hello_world.py文件并且进入该文件。
上图就是创建并进入hello_world.py文件。按下键盘ins键,可以修改文件内容,用方向键可以切换光标位置。
练习场赛题的python代码如下,可以直接复制好,右键粘贴到hello_world.py文件中。
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)
内容编辑完成,按下esc键接着输入:wq
即可退出现在的文件回到命令界面。
3.1.2 创建requirements.txt文件
由于使用python的时候用到了一些库,所以需要编写requirements.txt文件。
在当前目录下,使用命令:
# 安装
pip install pipreqs
# 在当前目录生成
pipreqs . --encoding=utf8 --force
就会自动在当前目录下生成一个requirements.txt文件。
3.1.3 创建run.sh文件
同样使用vim命令,在tianchi_submit_demo文件夹所在目录下:
vim run.sh
进入文件内编辑(或者粘贴)如下内容:
#!/bin/sh
CURDIR="`dirname $0`" #获取此脚本所在目录
echo $CURDIR
cd $CURDIR #切换到该脚本所在目录
python hello_world.py
- 如果直接在hello_world.py文件所在位置运行指令sh run.sh,上述代码可以简化为python hello_world.py
- 如果系统装了python2和python3,那么要改为python3 hello_world.py
- 运行sh run.sh推荐使用Git Bash
3.1.4 创建Dockerfile文件
Dockerfile文件是Docker中非常重要的组成部分。
vim Dockerfile
注意文件名必须是Dockerfile,大小写也不能更改。
进入Dockerfile后编辑(或粘贴)如下代码:
# 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"]
简单理解Dockerfile文件就是定义了进程需要的东西,例如其中的FROM命令是Dockerfile文件必须有的命令,它来构建一个基础镜像,这里使用天池基础镜像。
Dockerfile内的命令全部是大写。
RUN 容器构建时需要运行的命令,这里的RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
就是在安装这次构建容器时需要额外使用到的库。
CMD 指定一个容器启动时要运行的命令,这里CMD ["sh", "run.sh"]
就是使得镜像启动后统一执行 sh run.sh。
其余这次使用到的命令作用可见注释,更多Dockerfile命令可以自行搜索了解。
编辑完成后同样按下esc后输入:wq来退出,到这里就完成了Dockerfile文件的创建。
3.1.5 创建result.json文件
这个文件用来在提交后存储代码运行的结果。我们同样可以使用vim result.json
命令创建,不需要编辑内容。
也可以不使用命令直接建立,点击创建新文件的图标,输入新建的文件名及其后缀,
这样也可以创建一个空的result.json文件,除了这个文件,上面几个文件也可以这样不用命令直接建立。
3.2 构建镜像并推送
首先登录,登录的命令在阿里云容器服务地址里,前面建立的镜像仓库基本信息中。
sudo docker login (操作指南里给出的登陆命令 )
这里要输入两次密码,第一行password for username是自己服务器的账号密码,第二行Password是阿里的密码。
登录成功会显示Login Succeeded。
接下来建立docker,公网地址为阿里镜像仓库基本信息里的公网地址,在地址后加上版本号。
要特别注意版本号后面要加空格和"."。比如:公网地址:1.0 .
,不能少了最后的点。
docker build -t 公网地址/版本号 .
我的示例:
docker build -t registry.cn-shanghai.aliyuncs.com/wangyuchen0817/wangyuchen_tianchi_text:3.0 .
注意这里仍然应该在tianchi_submit_demo文件夹所在目录下执行命令,不然可能会报错找不到Dockerfile。
执行命令后建立成功:
构建完成后可先验证是否正常运行,正常运行后再进行推送。但是因为赛题中有一部分数据本地没有,提交代码后才自动生成,而我没有在本地自己创建这个数据文件,所以我没有在本地先运行,选择直接推送,也就是这一步跳过了。
如果想自己先在本地运行,请参考win10系统手把手教你docker练习场满分的3.2部分。
## 构建完成后可先验证是否正常运行,正常运行后再进行推送。
CPU镜像:docker run 公网地址/版本号 sh run.sh
GPU镜像:nvidia-docker run 公网地址/版本号 sh run.sh
推送到镜像仓库
docker push 公网地址/版本号
如果出错,可能没登录。这里的公网地址/版本号,就是刚刚docker build -t
后面的内容。
我的示例:
docker push registry.cn-shanghai.aliyuncs.com/wangyuchen0817/wangyuchen_tianchi_text:3.0
这一步完成后就推送成功了。
我们可以在镜像仓库里看到刚刚推送的镜像版本了。
四、提交结果
镜像路径和上面推送时的路径一样,比如我刚刚推送的路径是registry.cn-shanghai.aliyuncs.com/wangyuchen0817/wangyuchen_tianchi_text:3.0
那么我这里填写的就是这个路径。
接着填写自己的用户名和密码,并且提交。然后就等着运行结果最后的得分就好。运行完成会发邮件信息提示。