• 使用Docker提交参加阿里云比赛


    因为参加某个比赛需要构建docker镜像来提交模型,这里记录下过程
    首先docker是什么东西?按我个人的理解就是类似于一个小的虚拟环境,把运行时候需要装的东西都打包进去。

    最开始的时候是需要下载docker软件,我用的是Ubuntu,安装docker比较简单直接

    sudo docker apt-get install docker.io
    
    • 1

    构建镜像的时候最好有一个基础镜像,这里推荐从阿里云的公共镜像上下载
    https://tianchi.aliyun.com/forum/postDetail?spm=5176.12281988.0.0.79652966dOneDf&postId=67720

    然后还需要申请一个镜像仓库,这里推荐用阿里云的免费个人镜像仓库,创建个人实例即可
    https://www.aliyun.com/product/acr?
    在这里插入图片描述

    使用基础镜像来构建自己的镜像,首先要拉取基础镜像,使用sudo docker pull <镜像仓库:版本号>
    这里拉取pytorch的镜像:

    sudo docker pull registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-py3 
    
    • 1

    拉取好以后使用sudo docker images查看所有镜像,这里的TAG其实就是镜像名冒号后所谓的版本号
    在这里插入图片描述
    在需要打包成镜像的的文件夹下创建Dockerfile,这个相当于打包镜像时的配置文件

    # Base Images 
    ## 从天池基础镜像构建(from的base img 根据自己的需要更换,建议使用天池open list镜像链接:https://tianchi.aliyun.com/forum/postDetail?postId=67720) 
    FROM registry.cn-shanghai.aliyuncs.com/webshell_contest/webshell_detection:base
    #FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3 
    ##安装python依赖包 
    
    #RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
    #RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 
    ## 把当前文件夹里的文件构建到镜像的根目录下,并设置为默认工作目录 
    COPY run.sh run.sh
    ADD . / 
    WORKDIR / 
    ## 镜像启动后统一执行 sh run.sh 
    CMD ["sh", "run.sh"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    由于我们需要构建的镜像里还包含一些没有用到的包,需要想办法导入,阿里云官网上写的介绍是在Dockerfile下写RUN pip进行导入,实际这个方法比较费时间,特别是调试的时候需要多次打包,每次打包的时候docker都会执行命令去尝试用pip安装这些包到打包后的docker镜像里。

    正确的方法应该是进入镜像安装好需要的包和设置,这样打包的时候就不用重复设置
    sudo docker run -it 来进入镜像

    sudo docker run -it registry.cn-shanghai.aliyuncs.com/tcc-public/pytorch:latest-py3  /bin/bash
    
    • 1

    进入以后指定清华源升级pip,然后直接安装所需的python包

    pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    • 1

    然后同时需要用locale看下默认编码是否是UTF-8,如果不是的话需要更改系统的编码为utf-8不然容易乱码
    修改编码:https://blog.csdn.net/qq_43519779/article/details/116566862

    同时在py文件开头加上指定utf-8编码的抬头:

    # -*- coding: utf-8 -*-
    
    • 1

    做完配置以后,另起一个命令对话框,输入sudo docker ps查看所有正在运行的容器
    在这里插入图片描述
    这里这个33ed12c4e55就是刚刚我们进入的容器,配置完成以后可以把这个容器推送为新的镜像

    sudo docker commit <镜像id> <镜像仓库:版本号>
    
    • 1

    使用上述命令来构建新的镜像,可以直接使用相同的镜像仓库:版本号来覆盖之前的镜像,原来的镜像不会消失只不过会变成None

    在这里插入图片描述

    这里可以看到原来镜像的TAG变成None了,如果不需要使用的话就可以用sudo docker rmi <镜像id> -f来强制删除这个镜像
    在这里插入图片描述
    这样就准备好了一个拥有我们所需要所有包的镜像,可以在需要打包的文件目录,使用

    sudo docker build -t <镜像仓库名:版本号> .
    
    • 1

    来打包镜像,注意最后一个 . 是打包的路径,当前路径就是 . 所以不能省略

    打包好以后直接使用sudo push <镜像仓库名:版本号>就可以把镜像推送到云端,注意这一步需要输入密码来对登录之前申请的镜像仓库

  • 相关阅读:
    Java进阶学习
    数据库服务Amozon DynamoDB(入门分享)
    《Effective C++》知识点(7)--模板与范型编程
    mysql log理解
    java如何进阶?
    可靠传输具体实现
    贪心算法 题型总结
    元宇宙构建基石:三维重建技术
    7、系统管理
    Unity-UML类图讲解
  • 原文地址:https://blog.csdn.net/qq_43199509/article/details/127647080