注意:
1、该流程在linux系统(arm或x86架构)已验证,拉取包时注意是arm架构还是x86架构,arm通常表示为aarch,amd可适用于x86
2、在不关注后台信息的情况下才用开机自启动命令,部署好后需要测试的情况下建议按照非自启动步骤执行,这样才能看到后台信息
一、docker打包
1、拉取Ubuntu 22.04 LTS镜像,下面链接中注意区分架构x86/amd或arm/aarch, 命令中ubuntu:22.04更换对对应地址
查找ubuntu:22.04镜像的地址:
https://docker.aityp.com/i/search?search=ubuntu%EF%BC%9A22.04
docker pull ubuntu:22.04
更改名字
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/ubuntu:22.04 ubuntu:22.04
确认:
docker images | grep ubuntu
2、启动容器(–name指定容器名alg_docker,方便后续操作)
docker run -it --name alg_docker ubuntu:22.04 /bin/bash
3、更新apt包索引
apt update && apt upgrade -y
4、安装wget和ca-certificates(确保HTTPS下载正常)
apt install -y wget ca-certificates
5、下载Miniconda3(对应Linux x86_64架构,版本可根据官网更新)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
6、运行安装脚本(-b表示静默安装,-p指定安装路径)
bash miniconda.sh -b -p /opt/miniconda3
/opt/miniconda/envs/env_name/位置确认好,后面自启动命令中会用到
7、初始化conda(让终端识别conda命令)
/opt/miniconda3/bin/conda init bash
8、刷新环境变量(使conda生效)
source ~/.bashrc
9、查看版本信息
conda --version
10、容器中创建代码目录
mkdir -p /app/code
11、复制代码到容器中
docker cp 本地路径 容器名:容器内路径
docker cp local_code/ alg_docker:/app/code/
列出复制的文件,确认无误:
ls /app/code/
12、虚拟环境准备与代码执行验证
【可省略】 conda初始化
source /opt/anaconda3/etc/profile.d/conda.sh
打开代码地址
cd /app/code/local_code/
创建虚拟环境
conda create -n env_name python=3.12
安装所需要的包
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
激活虚拟环境
conda activate env_name
代码执行验证
python api.py
13、打包
(1)提交
格式:docker commit 容器名 新镜像名:标签 alg_docker
docker commit alg_docker alg_docker:v1
(2)tar打包 alg_docker
docker save -o alg_docker_v1.tar alg_docker:v1
二、验证
1、普通tar包导入
docker load -i alg_docker_v1.tar
2、验证是否导入成功
docker images | grep alg_docker
docker images
3、运行容器alg_docker:v1
一般测试:
docker run -it -d -p 8888:8000 alg_docker:v1 /bin/bash
带有–name和–network(后端需要)alg_docker_api 、 alg_docker:v1
docker run -it -d -p 8888:8000 --name alg_docker_api --network tsnet alg_docker:v1 /bin/bash
4、代码执行
进入容器
docker exec -it 7cf5c1dbfc04 /bin/bash
cd /app/code/local_code/
conda create -n env_name python=3.12
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
conda activate env_name
python api.py
5、在终端中进行curl命令验证
三、启动/开机自启动
1、强制删除已存在的容器(无论是否运行)
alg_docker_api 可换为容器id
docker stop alg_docker_api
docker rm -f alg_docker_api
2、重新创建并运行
docker run -d --restart always -p 8888:8000 --name alg_docker_api --network tsnet
alg_docker:v1 /bin/bash -c "cd /app/code/local_code && /opt/miniconda/envs/env_name/bin/uvicorn api:app --host 0.0.0.0 --port 8000"
docker run -d \
--restart always \
-p 8888:8000 \
--name szr_algorithm_api \
--network tsnet \
szr_algorithm_docker:v4 \
/bin/bash -c "cd /app/code/local_code && /opt/miniconda/envs/env_name/bin/uvicorn api:app --host 0.0.0.0 --port 8000"
/opt/miniconda/envs/env_name/bin/虚拟环境需要确认好位置,在安装miniconda时就记录
3、验证
(1)重启docker
systemctl restart docker
(2)终端中curl命令验证自启动是否成功
四、文件修改
1、从容器中复制出来
docker cp [容器id]:/app/code/local_code ~/文件本地地址
2、在容器运行的状态下,修改后复制回容器中,直接覆盖
docker cp ~/文件本地地址 [容器id]:/app/code/local_code
3、停止容器
docker stop [容器id]
4、开启容器
docker start [容器id]
5、进入容器手动执行命令/或直接执行自启动命令,下面是手动执行命令,自启动命令参考上文相关信息
(1)进入容器
docker exec -it [容器名称或id] /bin/bash
(2)执行代码, api指的是代码名称api.py
cd /app/code/local_code/
conda activate env_name
uvicorn api:app --host 0.0.0.0 --port 8000

1378

被折叠的 条评论
为什么被折叠?



