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.dirfiles = 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,mvfiledef 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.namefile_name = os.path.basename(file_path)name,t = os.path.splitext(file_name)fs = name.split('_')fs.remove(fs[-1])oname = '_'.join(fs) + tsave_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 swith 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.rhkb.cn/news/76327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2023年电赛国一必备】A题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 (部分) 摘要 本实验旨在设计和制作一个由两个单相逆变器组成的并联系统,用于为电阻负载供电或并入220V电网。采用基于STM…

【react】react生命周期钩子函数:

文章目录 一、生命周期概念:二、生命周期:三、挂载阶段(constructor > render > componentDidMount):四、更新阶段(render > componentDidUpdate):五、卸载阶段(componentWillUnmount …

il汇编整数相加

在这里尝试了IL汇编字符串连接; IL汇编字符串连接_bcbobo21cn的博客-CSDN博客 下面来看一下IL汇编整数相加; 大概的看一下一些资料,下面语句, ldc.i4 20 ldc.i4 30 add 看上去像是,装载整数20到一个类似于…

VK1056B 液晶LCD显示驱动IC/14x4com工作电压2.4-5.2V稳定测试

LCD液晶显示驱动芯片VK1056B 14x4位的显示RAM适用于各种LED应用产品 产品型号:VK1056B (兼容替代TM系列驱动) 产品品牌:VINKA永嘉微电 封装形式:SOP24 SSOP24 产品年份:新年份 提供专业工程服务&#xff0c…

Django Rest_Framework(三)

文章目录 1. 认证Authentication2. 权限Permissions使用提供的权限举例自定义权限 3. 限流Throttling基本使用可选限流类 4. 过滤Filtering5. 排序Ordering6. 分页Pagination可选分页器 7. 异常处理 ExceptionsREST framework定义的异常 8. 自动生成接口文档coreapi安装依赖设置…

Apache Kafka Learning

目录 一、Kafka 1、Message Queue是什么? 2、Kafka 基础架构 3、Kafka安装 二、Maven项目测试 1、Topic API 2、生产者&消费者 一、Kafka Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式…

LCD驱动芯片VK1024B兼容HT系列驱动芯片,体积更小

产品型号:VK1024B 产品:VINKA/永嘉微电 封装形式:SOP16 产品年份:新年份 工程服务,技术支持,用芯服务 VK1024概述: VK1024B 是 24 点、 内存映象和多功能的 LCD 驱动, VK1024B …

【css】css隐藏元素

display:none&#xff1a;可以隐藏元素。该元素将被隐藏&#xff0c;并且页面将显示为好像该元素不在其中。visibility:hidden&#xff1a; 可以隐藏元素。但是&#xff0c;该元素仍将占用与之前相同的空间。元素将被隐藏&#xff0c;但仍会影响布局。 代码&#xff1a; <!…

C++ - 模板分离编译

模板分离编译 我们先来看一个问题&#xff0c;我们用 stack 容器的声明定义分离的例子来引出这个问题&#xff1a; // stack.h // stack.h #pragma once #include<deque>namespace My_stack {template<class T, class Container std::deque<T>>class stack…

完整模型的训练套路

从心所欲 不逾矩 天大地大 皆可去 一、官方模型的初使用 使用VGG16模型 VGG模型使用代码示例&#xff1a; import torchvision.models from torch import nndataset torchvision.datasets.CIFAR10(/cifar10, False, transformtorchvision.transforms.ToTensor())vgg16_true …

Electron 开发,报handshake failed; returned -1, SSL error code 1,错误

代码说明 在preload.js代码中&#xff0c;暴露参数给渲染线程renderer.js访问&#xff0c; renderer.js 报&#xff1a;ERROR:ssl_client_socket_impl.cc(978)] failed; returned -1, SSL error code 1,错误 问题原因 如题所说&#xff0c;跨进程传递消息&#xff0c;这意味…

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

目录 11、自由风格的CI操作&#xff08;最终&#xff09;Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目…

redis的安装和配置

一、nosql 二、redis的安装和配置 redis的安装&#xff1a; redis常见配置&#xff1a; 配置文件redis.conf

【数据结构】这堆是什么

目录 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1 向上调整算法与向下调整算法 3.2 堆的创建 3.3 建堆的空间复杂度 3.4 堆的插入 3.5 堆的删除 3.6 堆的代码的实现 4.堆的应用 4.1 堆排序 4.2 TOP-K问题 首先&#xff0c;堆是一种数据结构&#xff0c;一种特…

在SAP中使用苹果手机进行条码扫描

适用于iOS的Liquid UI支持使用内置摄像头或第三方设备&#xff08;如Linea Pro&#xff09;进行条形码扫描。它使您能够通过单击在任何 SAP 输入字段中填充数据。它支持&#xff1a;一维和二维条码扫描。此外&#xff0c;编辑扫描的数据或在扫描后对操作进行编程&#xff0c;以…

2023牛客暑期多校训练营6-C-idol!!

奇数的双阶乘等于小于等于本身的奇数的乘积&#xff0c;偶数的双阶乘等于小于等于本身的非零偶数的乘积。 思路&#xff1a;考虑末位0的个数&#xff0c;我们能想到的最小两数相乘有零的就是2*5&#xff0c;所以本题我们思路就是去找因子2的个数以及因子5的个数&#xff0c;2的…

kubernetes基于helm部署gitlab

kubernetes基于helm部署gitlab 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab。 先决条件 已运行的 Kubernetes 集群负载均衡器&#xff0c;为ingress-nginx控制器提供EXTERNAL-IP&#xff0c;本示例使用metallb默认存储类&#xff0c;为gitlab pods提供持久化存储&…

mysql存储过程定时调度

假设我们要创建一个简单的数据库&#xff0c;其中包含两张表&#xff1a;students 表和 courses 表&#xff0c;以及一个存储过程用于插入学生数据。下面是完整的建表语句、插入语句和存储过程&#xff1a; 1】建表 -- 创建 courses 表 CREATE TABLE courses (course_id INT …

回调函数的简单用例

列举项目中一个简单的回调函数用例 ①用MsgInterface_t定义一个结构体s_Lin_MsgInterface&#xff0c;包含两个回调函数成员&#xff1a; ②确定结构体下的回调函数成员的参数&#xff1a; ③传入实参&#xff0c;确定结构体下的回调函数成员的函数名&#xff1a; ④最终回…

【网络】网络层(IP协议)

目录 一、基本概念 二、协议头格式 三、网段划分 四、特殊的IP地址 五、IP地址的数量限制 六、私有IP地址和公网IP地址 七、路由 一、基本概念 IP协议&#xff1a;提供一种能力&#xff0c; 将数据从A主机送到B主机&#xff0c;&#xff08;TCP协议&#xff1a;确保IP协议…