docker创建镜像并上传云端服务器

news2024/10/5 14:10:30

docker创建镜像并上传云端服务器

  • docker容器与镜像的关系
  • 1.基本镜像相关文件创建
    • 1.1 创建dockerfile文件
    • 1.2.创建do.sh文件
    • 1.3 创建upload_server_api.py文件
    • 1.4 创建upload_server_webui.py文件
    • 1.5 文件保存位置
  • 2. 创建镜像操作
    • 2.1 创建镜像
    • 2.3 创建容器
    • 2.2 进入环境容器
    • 2.3 激活python虚拟环境
    • 2.4 文件传输步骤
      • 2.4.1 退出容器
      • 2.4.2 文件传输
      • 2.4.3 进入容器
      • 2.4.4 查看文件
  • 3. 将容器保存为新的镜像
  • 4.根据镜像创建新的镜像
    • 4.1.制作镜像
    • 4.2. 上传镜像到sdg

docker容器与镜像的关系

  • 镜像:
    • 相当于一个类
    • 不可修改内容
  • 容器:
    • 对镜像类的实例,可以在环境中更新库
    • 容器可以保存为一个新的镜像
    • 再根据保存的新镜像可以实例化新镜像的容器

1.基本镜像相关文件创建

1.1 创建dockerfile文件

  • 文件内容
    # linux基础系统
    FROM nvidia/cuda:11.7.1-runtime-ubuntu22.04
    # 修改镜像源
    RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list
    RUN sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list
    RUN sed -i s/ports.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list
    # 安装基本环境库  vim unzip git wget python3 python3-venv python3-pip build-essential libgl-dev libglib2.0-0 wget
    RUN apt update && apt-get -y install vim unzip git wget python3 python3-venv python3-pip build-essential libgl-dev libglib2.0-0 wget
    # pip 代理
    RUN pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
    RUN pip config set global.trusted-host mirrors.cloud.tencent.com
    # 创建自己目录
    RUN mkdir /home/data  && chmod 777 /home/data
    # 将/home/data作为根目录
    WORKDIR /home/data
    
    # 本地文件复制上传到容器
    # 文件上传文件
    # copy load_file_path docker_file_path
    COPY upload_server_api.py /home/data/upload_server_api.py
    COPY upload_server_webui.py /home/data/upload_server_webui.py
    COPY do.sh  /home/data/do.sh
    
    # 赋予.sh权限
    RUN chmod 777 /home/data/do.sh
    # 执行.sh文件
    RUN /home/data/do.sh
    # 暴漏端口,连接的端口
    EXPOSE 7860
    #暴漏 upload_server_api.py端口
    EXPOSE 5566
    #暴漏 upload_server_webui.py端口
    EXPOSE 5560
    ENTRYPOINT ["python3","-m","http.server","2023"]
    

1.2.创建do.sh文件

  • 文件内容
    #!/bin/bash
    # 进入根目录
    cd /home/data
    # 创建python虚拟环境,虚拟环境名为venv
    python3 -m venv venv
    # 虚拟环境安装相关库
    /home/data/venv/bin/python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ bottle
    /home/data/venv/bin/python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ flask
    /home/data/venv/bin/python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ cgai-io
    /home/data/venv/bin/python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ cgai-socket
    /home/data/venv/bin/python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ gradio
    # 后台运行upload_server_api.py,upload_server_webui.py文件
    nohup /home/data/venv/bin/python -u /home/data/upload_server_api.py >/dev/null 2>&1 &
    nohup /home/data/venv/bin/python -u /home/data/upload_server_webui.py >/dev/null 2>&1 &
    

1.3 创建upload_server_api.py文件

  • 文件内容
    import os
    from bottle import route,request,static_file,run
    
    # 文件上传
    @route('/upload',method='POST')
    def do_upload():
        upload = request.files.get('upload')
        _dir = request.forms.get('dir')
        _dir = _dir.replace('\\','/')
        if _dir.endswith('/'):
            _dir = _dir[:-1]
        save_path = f'{_dir}/{upload.filename}'
        print('save_path:',save_path)
        upload.save(save_path,overwrite=True)
        return f'保存文件到:{save_path}'
    
    # 查看目录文件
    @route('/check',method='GET')
    def check():
        _dir = request.query.dir
        files = os.listdir(_dir)
        s = ''
        for i in files:
            s += i + '\n'
        return s
    if __name__=='__main__':
        run(host='0.0.0.0',port=5566)    
    

1.4 创建upload_server_webui.py文件

  • 文件内容
    import os
    import socket
    import gradio as gr
    from cgai_io import copyfile,mvfile
    
    def get_ip():
        s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        s.connect(("8.8.8.8",80))
        a = s.getsockname()      
        return a[0]
    def upload(save_dir,temp_file):
        file_path = temp_file.name
        file_name = os.path.basename(file_path)
        name,t = os.path.splitext(file_name)
        fs = name.split('_')
        fs.remove(fs[-1])
        oname = '_'.join(fs) + t
        save_path = os.path.join(save_dir,oname)
        mvfile(file_path,save_path)
        return f'上传到路径: {save_path}'
    
    def check(save_dir):
        files = os.listdir(save_dir)
        s = ''
        for i in files:
            s += i + '\n'
        return s
    
    with gr.Blocks() as demo:
        gr.Markdown(f"当前连接ip:  {get_ip()}")
        with gr.Column():
            save_dir = gr.Text(label='上传路径',value='/home')
            local_file = gr.File(label='上传文件(注意:1.文件名称不要有下划线_,否则上传后的文件名称可能有误) 2.文件大小超过4G请使用客户端上传')
        with gr.Row():
            upload_btn = gr.Button("上传")
            check_btn = gr.Button('检测')
        tip = gr.Text('',label='')
        upload_btn.click(fn=upload, inputs=[save_dir,local_file], outputs=tip)
        check_btn.click(fn=check, inputs=[save_dir], outputs=tip)
    
    demo.launch(server_name='0.0.0.0',server_port=5560)
    

1.5 文件保存位置

  • 存放在同一个文件夹中,我的存放在test_docker文件夹中
    在这里插入图片描述

2. 创建镜像操作

2.1 创建镜像

  • 相关参数

    参数含义
    - fdockerfile文件路径
    - t新镜像标签名
    . 指明docker context为当前目录,context上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包
  • 进入test_docker文件夹目录

    • 4个文件都在里面
      在这里插入图片描述
  • test_docker文件夹目录下创建镜像

    docker build -f kohya_ss_dockerfile -t wang0724/gpu_python3_ubuntu22:v1 .
    

    在这里插入图片描述

  • 查看镜像

    sudo docker image ls
    

    在这里插入图片描述

2.3 创建容器

  • 根据镜像实例化容器
    # sudo docker run -itd --name=容器名称--runtime=nvidia --gpus all  -p 6161:7860  镜像名称 
    sudo docker run -itd --name=kohya_test --runtime=nvidia --gpus all  -p 6161:7860  wang0724/gpu_python3_ubuntu22:v1
    
    • 创建成功,得到一个id,表明创建成功
      在这里插入图片描述
  • 查看运行的容器
    sudo docker ps 
    
    在这里插入图片描述

2.2 进入环境容器

  • 进入容器
    # sudo docker exec -it 容器id /bin/bash
    sudo docker exec -it 1283aa83664a /bin/bash
    

在这里插入图片描述

  • 查看根目录的文件
    • do.sh upload_server_api.py upload_server_webui.py,do.sh中创建的venv虚拟环境文件都在
      ls
      
      在这里插入图片描述

2.3 激活python虚拟环境

  • 进入python虚拟环境venv文件目录
  • 激活python虚拟环境
    source venv/bin/activate
    
    在这里插入图片描述
  • 进入虚拟环境后,可以安装自己需要的python库

2.4 文件传输步骤

  • 文件传输的目的=:
    • 容器中现在只有基本的文件,需要自己上传自己的需要的文件
  • 注意事项
    • 需要退出容器才能传输文件
      在这里插入图片描述

2.4.1 退出容器

  • 相关命令
    exit
    

在这里插入图片描述

2.4.2 文件传输

  • 本地文件复制到容器路径

    # sudo docker cp load_file_path 容器id:docker_file_path
    sudo docker cp  kohya_ss 1283aa83664a:/home/data
    
  • 容器路径复制到本地文件

    # sudo docker cp 容器id:docker_file_path load_file_path
    sudo docker cp  1283aa83664a:/home/data a.txt
    

2.4.3 进入容器

  • 进入容器
    # sudo docker exec -it 容器id /bin/bash
    sudo docker exec -it 1283aa83664a /bin/bash
    

2.4.4 查看文件

  • kohya_ss已经成功传输到容器中
    ls
    
    在这里插入图片描述

3. 将容器保存为新的镜像

  • 将上面的容器保存为新的镜像
    # docker commit -m="描述信息" -a="作者" 容器id 目标镜像名: [TAG]
    # sudo docker commit -m="test"  -a="w" 1283aa83664a os-harbo.cloudos:11443/home/test:v1
    sudo docker commit -m="image create" -a="wang" 1283aa83664a wang0724/gpu_python3_ubuntu22:v1
    
  • 查看镜像列表
    sudo docker image ls
    
    在这里插入图片描述

4.根据镜像创建新的镜像

4.1.制作镜像

  • 根据已有的镜像创建 【就是copy一个】

    参数含义
    old容器名称
    v1tag
    os-harbor-svc.default.svc.cloudos:0000/env项目路径
    -- old:v1 已有镜像名称
    -- new:v2 新创建镜像名称
    sudo docker tag old:image1 os-harbor-svc.cloudos:0000/env/new:v2
    
  • 再次查看镜像,就发现多了一个
    在这里插入图片描述

4.2. 上传镜像到sdg

  • 登录仓库
    sudo docker login  https://os-harbor-svc.cloudos:0000
    
  • 提交镜像
    sudo docker push os-harbor-svc.cloudos:0000/env/new:v2
    
  • 拉取镜像
    sudo docker pull os-harbor-svc.cloudos:0000/env/new:v2
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode----JavaScript 详情题解(4)

目录 2722. 根据 ID 合并两个数组 2723. 添加两个 Promise 对象 2724. 排序方式 2725. 间隔取消 2726. 使用方法链的计算器 2727. 判断对象是否为空 2624. 蜗牛排序 2694. 事件发射器 2722. 根据 ID 合并两个数组 现给定两个数组 arr1 和 arr2 ,返回一个新…

Flink 系列四 Flink 运行时架构

目录 前言 介绍 1、程序结构 1.1、Source 1.2、Transformation 1.3、Sink 1.4、数据流 2、Flink运行时组件 2.1、Dispatcher 2.2、JobManager 2.3、TaskManager 2.4、ResourceManager 3、任务提交流程 3.1、standalone 模式 3.2、yarn 模式 4、任务调度原理 4…

AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?

视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…

Scrum敏捷开发流程图怎么画?

1. 什么是Scrum敏捷开发流程图? Scrum敏捷开发流程图是一种可视化工具,用于形象地描述Scrum敏捷开发方法中的工作流程和活动。Scrum敏捷开发流程图展示了项目从需求收集到产品交付的整个开发过程,帮助团队理解和跟踪项目进展,促…

vue使用FullCalendar插件实现日历会议预约功能

目录 1. vue 项目使用npm安装插件 2. vue 页面代码(直接复制粘贴可用) 3. vue FullCalendar的内置函数以及配置 前言:此案例是用FullCalendar插件做一个会议日程预约功能,此功能可查看自己的日程安排会议信息等...... FullC…

国产化车载智能座舱方案引领新时代

车载智能座舱是一项集成了多种技术的复杂工程,包括大量的硬件设备、大数据分析、实时交互、用户体验和技术创新研发等。由于涉及的技术领域繁多,智能座舱技术在实际应用中面临很多技术壁垒,如硬件性能、互联互通、集成性、数据采集、存储、处…

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到,发现flink运行一段时间后,不再继续消费的问题。这个问题困扰了我非常久,一开始也很迷茫。又因为比较忙,所以一直没有时间能够去寻找答案,只是通过每天重启…

智慧医院该啥样?白皮书给你答案

注意:案例数据均为虚拟数据 随着云计算、大数据、物联网、区块链、新一代互联网通信等新技术的不断发展,“新基建”的不断升级,新医改的不断深化,智慧医院成为我国医院现代化建设的重要发展方向。 党的十八大以来,数字经济更是上升为国家战略&#xff…

运动式蓝牙耳机哪种好、口碑最好的运动蓝牙耳机

为了保持身体健康,许多人在闲暇时选择进行一些日常运动。其中,很多人喜欢在运动时戴上耳机,让身体随着音乐的节奏运动,希望能够增强运动效果。正因如此,市场上涌现了许多优秀的运动耳机品牌,它们推出了一系…

人脸识别场景下Faiss大规模向量检测性能测试评估分析

在前面的两篇博文中,主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统,感兴趣的话可以自行移步阅读即可: 《基于facenetfaiss开发构建人脸识别系统》 Facenet算法的优点:高准确率&#…

MQTT协议详解「概念、特性、版本及作用」

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议。MQTT通常使用TCP / IP(传输控制协议/Internet协议)作为其传输,但也可以使用其他双向传输。MQ…

vue、uniapp直传阿里云文档

前端实现文件上传到oss(阿里云)适用于vue、react、uni-app,获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云,保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…

【C++】开源:sqlite3数据库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍sqlite3数据库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

【Autolayout自动布局介绍 Objective-C语言】

一、好,我们开始介绍Autolayout 1.什么事Autolayout 好,那么,接下来,我们介绍一下这个Autolayout Autolayout,就是“自动布局” 那么,自动布局,它就是专门用来做UI界面的 那么,UI界面,我们为了适应不同屏幕,要进行自动布局, 所以要使用Autolayout 这个Autolayou…

物理机是什么?有什么优势?可以上堡垒机吗?

你知道物理机是什么?有什么优势?可以上堡垒机吗?今天我们就来简单聊聊。 物理机是什么? 物理机是相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为“寄主”或“宿主”。 物理机有什么…

C# Blazor 学习笔记(11):路由跳转和信息传值

文章目录 前言路由跳转测试用例路由传参/路由约束 前言 Blazor对路由跳转进行了封装。 ASP.NET Core Blazor 路由和导航 NavigationManager 类 本文的主要内容就是全局的跳转 路由跳转 路由跳转就要用到NavigationManager 类。 其实最常用的还是NavigateTo这个跳转函数 测…

AVI怎么转换成MP4格式?教你几种方法轻松转换

MP4格式具有广泛的兼容性,可以在大多数设备和平台上播放。无论是电脑、手机、平板还是电视,都可以播放MP4格式的视频,而且在不同的操作系统和浏览器上也能够正常播放。AVI格式的视频就不一定能这样,因此将AVI转成MP4格式会方便很多…

HCIP静态路由实验

实验要求为: 1、R6为isp,接口IP地址均为公有地址;该设备只能配置IP地址,之后不能进行任何配置; 2、R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3、所有路由器上环回&…

RF手机天线仿真介绍(二):孔径调谐和阻抗调谐

目录 简介孔径调谐阻抗调谐孔径调谐组件选择分析 简介 由于手机运行所需的频段、功能和模式的数量不断增加,现代手机的 RF 前端 (RFFE) 设计也日益复杂。需要采用更多天线,使用载波聚合 (CA)、4x4 MIMO、Wi-Fi MIMO 和新的宽带 5G 频段来提供更高的数据…

wireshark简单使用(一)

前两天为同事处理交换机故障,接触到wireshark使用,意识到这个工具对于工程师来说,查询报文还是必须的,了解基本的使用。 于是接触到一些视频,开始自学。 第一步 查询本机IP地址 cmd---ipconfig 查看本机IP地址和网关…