docker创建镜像并上传云端服务器的实现示例

 更新时间:2023年08月09日 09:10:48   作者:图图淘气  
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,本文介绍了如何使用Docker创建镜像,并将其上传到云端,感兴趣的可以了解一下

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 命令得知这个路径后,会将路径下的所有内容打包

进入 文件夹目录

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

到此这篇关于docker创建镜像并上传云端服务器的实现示例的文章就介绍到这了,更多相关docker创建镜像并上传云端内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用Docker快速启动Nacos集群

    如何使用Docker快速启动Nacos集群

    使用 Docker 和 Docker Compose 启动 Nacos 集群是一个快速且高效的方法,它可以让你在隔离的环境中测试和运行 Nacos 服务,并且能够从外部访问,通过遵循上述步骤,你可以轻松地在你的本地机器或服务器上部署 Nacos 集群,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • docker pull镜像失败问题解决方法

    docker pull镜像失败问题解决方法

    在使用Docker拉取镜像时可能会遇到超时失败的问题,通常由网络问题导致,本文介绍了两种解决方法:更改镜像加速地址和添加DNS配置,这些措施可以帮助改善与Docker Hub的连接,提高拉取镜像的成功率,如果问题依旧,请参考更多相关资料或寻求专业帮助
    2024-09-09
  • 使用docker搭建redis主从的方法步骤

    使用docker搭建redis主从的方法步骤

    这篇文章主要介绍了使用docker搭建redis主从的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Docker自定义安装更改默认安装位置简单方法

    Docker自定义安装更改默认安装位置简单方法

    安装Docker的过程相对简单,你只需要双击下载的安装程序并按照提示进行安装即可。在安装过程中,你可以选择自定义安装选项,这篇文章主要给大家介绍了关于Docker自定义安装更改默认安装位置的简单方法,需要的朋友可以参考下
    2024-01-01
  • Docker常用命令Study03详解

    Docker常用命令Study03详解

    这篇文章主要介绍了Docker常用命令Study03详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 使用Docker部署MySQL的实现步骤

    使用Docker部署MySQL的实现步骤

    本文主要介绍了Docker部署MySQL的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • IDEA中进行Docker项目部署的实现步骤

    IDEA中进行Docker项目部署的实现步骤

    这篇文章主要介绍了IDEA中进行Docker项目部署的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 基于docker 搭建Prometheus+Grafana的过程详解

    基于docker 搭建Prometheus+Grafana的过程详解

    这篇文章主要介绍了基于docker 搭建Prometheus+Grafana的过程详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 使用Docker搭建MySQL数据库服务的方法详解

    使用Docker搭建MySQL数据库服务的方法详解

    在现代应用程序开发中,使用数据库是必不可少的,文将介绍如何使用Docker搭建MySQL数据库服务,让你在本地环境中快速部署一个MySQL实例,感兴趣的可以了解下
    2024-03-03
  • CentOS7.6系统下Docker安装部署教程

    CentOS7.6系统下Docker安装部署教程

    这篇文章主要为大家介绍了CentOS7.6系统下Docker的安装部署教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论