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

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
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins工具系列 —— 启动 Jenkins 服务报错

错误显示 apt-get 安装 Jenkins 后,自动启动 Jenkins 服务报错。 排查原因 直接运行jenkins命令 发现具体报错log:Failed to start Jetty或Failed to bind to 0.0.0.0/0.0.0.0:8080或Address already in use 说明:这里提示的是8080端口号…

LNMP及论坛搭建(第一个访问,单节点)

LNMP:目前成熟的一个企业网站的应用模式之一,指的是一套协同工作的系统和相关软件 能够提供静态页面服务,也可以提供动态web服务,LNMP是缩写 L:指的是Linux操作系统。 N:指的是nginx,nginx提…

【Vue3项目实战】vue3项目基于el-menu封装左侧菜单栏组件

文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、核心思路三、全量代码3.1 文件目录结构3.2 /sidebar/index.vue 中3.3 /sidebar/sidebarItem.vue 中3.4 路由表结构 四、代码讲解五、SVG组件六、系列文章友链1、[配置husky、stylelint、commitlint,实现git提…

HadoopWEB页面上传文件报错Couldn‘t upload the file course_info.txt

HadoopWEB页面上传文件报错Couldn’t upload the file course_info.txt 右键F2检查发现:文件上传PUT操作的IP地址是节点IP别名识别不到导致 解决方法:在WEB页面访问浏览器所在机器上面配置hosts映射地址(注意:配置的是浏览器访问的地址不是hadoop节点所在…

使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——组合应用

在《使用Golang实现一套流程可配置,适用于广告、推荐系统的业务性框架——简单应用》中,我们看到了各种组合Handler的组件,如HandlerGroup和Layer。这些组件下面的子模块又是不同组件,比如LayerCenter的子组件是Layer。如果此时我…

网络安全(黑客)自学的误区

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 我在之前的回答中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而…

项目中使用非默认字体

项目场景: 由于开发需要,默认的字体不符合开发需求,有时候我们需要引入某种字体到项目中 解决方案: 首先需要下载或引入字体包 然后创建一个 index.css 文件用于声明引入字体名称 font-face {font-family: "YouSheBiao…

C语言多级指针

#include "stdio.h" #include <stdlib.h>int main() {int a 10;//*p int a int *pint* p &a;int** q &p;//int** q int *(*q) int *(q) a//int**q int*(*q) int*(&a) int*&a aint*** k &q;//分析&#xff1a;首先k是个变量&…

大模型系列|基于大模型复杂数据系统架构(二)

张俊林老师在 2023 WAIC AI 开发者论坛的演讲非常有概括性&#xff0c;这边沿着思路进行一定的整理。&#xff08;文章来源&#xff1a;WAIC 2023 | 张俊林&#xff1a;大语言模型带来的交互方式变革&#xff09; 文章目录 1 PlanningProgramming 模式的系统技术架构2 HuggingG…

【Linux】创建与删除用户

新增用户&#xff1a; adduser 用户名【添加用户】 passwd 用户名【设置用户密码】删除用户&#xff1a; userdel -r 用户名【删除用户】

【多模态】23、RO-ViT | 基于 Transformer 的开发词汇目标检测(CVPR2023)

文章目录 一、背景二、方法2.1 基础内容2.2 Region-aware Image-text Pretraining2.3 Open-vocabulary Detector Finetuning 三、效果3.1 细节3.2 开放词汇目标检测效果3.3 Image-text retrieval3.4 Transfer object detection3.5 消融实验 论文&#xff1a;Region-Aware Pretr…

如何解决电脑无声问题:排除故障的几种常见方法

大家好&#xff0c;今天我们来讨论一下处理电脑没有声音的故障。当你突然发现电脑静音无声时&#xff0c;需要逐步排除可能的问题&#xff0c;但总体而言&#xff0c;声音故障是相对容易解决的。接下来&#xff0c;我们将介绍一些排除电脑无声问题的方法。 第一步&#xff1a;…

使用 FastGPT 构建高质量 AI 知识库

作者&#xff1a;余金隆。FastGPT 项目作者&#xff0c;Sealos 项目前端负责人&#xff0c;前 Shopee 前端开发工程师 FastGPT 项目地址&#xff1a;https://github.com/labring/FastGPT/ 引言 自从去年 12 月 ChatGPT 发布以来&#xff0c;带动了一轮新的交互应用革命。尤其在…

安卓:BottomNavigationBar——底部导航栏控件

目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 &#xff08;一&#xff09;、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…

windows物理机 上安装centos ,ubuntu,等多个操作系统的要点

一、摘要 一般情况下&#xff0c;我们的笔记本或工作电脑都默认安装windows 分几个区&#xff0c;当下是win7 win8 win 10 win11 等&#xff0c;突然我们有需求需要安装个centos &#xff0c;后面我们应当怎么做&#xff0c;要点是什么&#xff1f;一定要根据网上的贴子一步步来…

【Golang 接口自动化00】为什么要用Golang做自动化?

目录 为什么使用Golang做自动化 最终想实现的效果 怎么做&#xff1f; 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后&#xff0c;因为没有太多时间和项目来实践&#xff0c;怕止步于此、步Java缺少练习遗忘殆尽的后尘&#xff0c;决定…

【iOS】json数据解析以及简单的网络数据请求

文章目录 前言一、json数据解析二、简单的网络数据请求三、实现访问API得到网络数据总结 前言 近期写完了暑假最后一个任务——天气预报&#xff0c;在里面用到了简单的网络数据请求以及json数据的解析&#xff0c;特此记录博客总结 一、json数据解析 JSON是一种轻量级的数据…

vulnhub靶机Empire_LupinOne

下载地址&#xff1a;https://www.vulnhub.com/entry/empire-lupinone,750/ 主机发现 arp-scan -l nmap --min-rate 10000 -p- 192.168.21.137 nmap -sV -sT -O -p22,80 192.168.21.137 nmap --scriptvuln -p22,80 192.168.21.137 先看一下网页 啥也没有 先看一下nmap扫出来的…

10.物联网操作系统之低功耗管理

一。低功耗管理概念及其应用 1.STM32低功耗设计详解 STM32的电源管理系统主要分为&#xff1a; 备份域 调压器供电电路 ADC电源电路 2.低功耗模式 1.运行模式 2.睡眠模式 3.停机模式 4.待机模式 &#xff08;1&#xff09;睡眠模式 在睡眠模式中&#xff0c;仅关闭了内核时钟&…

带你简单认识淘宝 API 接口,API接口适用场景和业务类型

淘宝 API 接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范。通过开放接口&#xff0c;开发者可以不改变现有系统&#xff0c;直接在原有系统上实现新功能。该规范于 2007 年发布&#xff0c;是目前业界唯一完整覆盖电商系统各相关业务领域的接口标准…