docker創(chuàng)建鏡像并上傳云端服務(wù)器的實現(xiàn)示例
docker容器與鏡像的關(guān)系
- 鏡像:
- 相當(dāng)于一個類
- 不可修改內(nèi)容
- 容器:
- 對鏡像類的實例,可以在環(huán)境中更新庫
- 容器可以保存為一個新的鏡像
- 再根據(jù)保存的新鏡像可以實例化新鏡像的容器
1.基本鏡像相關(guān)文件創(chuàng)建
1.1 創(chuàng)建dockerfile文件
文件內(nèi)容
# linux基礎(chǔ)系統(tǒng) 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 # 安裝基本環(huán)境庫 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 # 創(chuàng)建自己目錄 RUN mkdir /home/data && chmod 777 /home/data # 將/home/data作為根目錄 WORKDIR /home/data # 本地文件復(fù)制上傳到容器 # 文件上傳文件 # 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權(quán)限 RUN chmod 777 /home/data/do.sh # 執(zhí)行.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.創(chuàng)建do.sh文件
文件內(nèi)容
#!/bin/bash # 進(jìn)入根目錄 cd /home/data # 創(chuàng)建python虛擬環(huán)境,虛擬環(huán)境名為venv python3 -m venv venv # 虛擬環(huán)境安裝相關(guān)庫 /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 創(chuàng)建upload_server_api.py文件
文件內(nèi)容
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 創(chuàng)建upload_server_webui.py文件
文件內(nèi)容
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"當(dāng)前連接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. 創(chuàng)建鏡像操作
2.1 創(chuàng)建鏡像
相關(guān)參數(shù)
參數(shù) | 含義 |
---|---|
- f | dockerfile文件路徑 |
- t | 新鏡像標(biāo)簽名 |
. | 指明docker context為當(dāng)前目錄,context上下文路徑,是指 docker 在構(gòu)建鏡像,有時候想要使用到本機(jī)的文件(比如復(fù)制),docker build 命令得知這個路徑后,會將路徑下的所有內(nèi)容打包 |
進(jìn)入 文件夾目錄
4個文件都在里面
在 test_docker
文件夾目錄下創(chuàng)建鏡像
docker build -f kohya_ss_dockerfile -t wang0724/gpu_python3_ubuntu22:v1 .
查看鏡像
sudo docker image ls
2.3 創(chuàng)建容器
根據(jù)鏡像實例化容器
# 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
創(chuàng)建成功,得到一個id,表明創(chuàng)建成功
查看運行的容器
sudo docker ps
2.2 進(jìn)入環(huán)境容器
進(jìn)入容器
# 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中創(chuàng)建的venv虛擬環(huán)境
文件都在
ls
2.3 激活python虛擬環(huán)境
進(jìn)入python虛擬環(huán)境venv文件目錄
激活python虛擬環(huán)境
source venv/bin/activate
進(jìn)入虛擬環(huán)境后,可以安裝自己需要的python庫
2.4 文件傳輸步驟
文件傳輸?shù)哪康?: 容器中現(xiàn)在只有基本的文件,需要自己上傳自己的需要的文件
注意事項: 需要退出容器才能傳輸文件
2.4.1 退出容器
相關(guān)命令
exit
2.4.2 文件傳輸
本地文件復(fù)制到容器路徑
# sudo docker cp load_file_path 容器id:docker_file_path sudo docker cp kohya_ss 1283aa83664a:/home/data
容器路徑復(fù)制到本地文件
# sudo docker cp 容器id:docker_file_path load_file_path sudo docker cp 1283aa83664a:/home/data a.txt
2.4.3 進(jìn)入容器
進(jìn)入容器
# sudo docker exec -it 容器id /bin/bash sudo docker exec -it 1283aa83664a /bin/bash
2.4.4 查看文件
kohya_ss
已經(jīng)成功傳輸?shù)饺萜髦?/p>
ls
3. 將容器保存為新的鏡像
將上面的容器保存為新的鏡像
# docker commit -m="描述信息" -a="作者" 容器id 目標(biāo)鏡像名: [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.根據(jù)鏡像創(chuàng)建新的鏡像
4.1.制作鏡像
根據(jù)已有的鏡像創(chuàng)建 【就是copy一個】
參數(shù) | 含義 |
---|---|
old | 容器名稱 |
v1 | tag |
os-harbor-svc.default.svc.cloudos:0000/env | 項目路徑 |
-- old:v1 已有鏡像名稱 -- new:v2 新創(chuàng)建鏡像名稱 sudo docker tag old:image1 os-harbor-svc.cloudos:0000/env/new:v2
再次查看鏡像,就發(fā)現(xiàn)多了一個
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
到此這篇關(guān)于docker創(chuàng)建鏡像并上傳云端服務(wù)器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)docker創(chuàng)建鏡像并上傳云端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker-compose的安裝和設(shè)定詳細(xì)步驟
這篇文章主要介紹了Docker-compose的安裝和設(shè)定的相關(guān)資料,需要的朋友可以參考下2017-03-03docker配置openGauss數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了docker配置openGauss數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Docker部署SQL Server 2019 Always On集群的實現(xiàn)
這篇文章主要介紹了Docker部署SQL Server 2019 Always On集群的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04