docker制作conda环境+python代码镜像(离线环境下)
我这里是拉取的指定版本24.5.0。
·
先介绍一下我的需求,conda和代码在离线服务器1上,想要将他们打包成docker镜像后放到另一个离线服务器2上使用(迁移)
1.在有网的环境下 拉取基础镜像
我这里是拉取的指定版本24.5.0
docker pull continuumio/miniconda3:24.5.0-0
查看镜像:
docker images
2. 打包基础镜像
docker save -o miniconda3_24_5_0.tar continuumio/miniconda3:24.5.0-0
3.拷贝到离线环境
4.离线下安装镜像
docker load -i <tar文件路径>
docker load -i miniconda3_24_5_0.tar
5.打包conda环境,切到需要打包的环境中
conda activate env1
conda pack -n env1 -o env1.tar.gz
如果显示conda没有pack选项,说明当前虚拟环境还没有安装conda-pack
如果为离线环境,需要在有网的环境下把whl包下载,copy到离线环境,安装:
pip install conda_pack-0.8.0-py2.py3-none-any.whl
如果有网下,则可以直接在当前环境中
pip install conda-pack
6.将自己的conda环境打到基础镜像中
我当前的目录层级是:
test是代码文件夹,app.py是一个flask应用
mv_dir/
│
├── Dockerfile
├── test/
│ ├── app.py
├── env1.tar.gz
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "测试容器部署!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
(1)写Dockerfile
# 使用基于 Miniconda 的镜像
FROM continuumio/miniconda3
# 设置工作目录
WORKDIR /opt
# 复制环境文件和应用程序代码
COPY . /opt
# 创建并激活 Conda 环境 + 解压、创建文件夹、解压到哪
RUN
mkdir -p /opt/conda/envs/env1 && \
tar -zxvf env1.tar.gz -o /opt/conda/envs/env1 && \
conda env create -f /opt/environment.yml && \
conda init bash && \
echo "conda activate myenv" >> /root/.bashrc
# 声明使用的环境
ENV PATH /opt/conda/envs/myenv/bin:$PATH
# 将web服务器的端口8000暴露出来
EXPOSE 8000
# 运行应用程序
CMD ["python", "test/app.py", "--port", "8000"]
(2)打包镜像
在此目录下(含dockerfile的目录)运行
docker build -t 自己取镜像名:自己版本 .
docker build -t test:v1 .
# test是自定义的镜像名称,.表示Dockerfile所在的当前目录。
(3)查看当前镜像即可看到新镜像test
docker images
(4)打包镜像
docker save -o test.tar test:v1
7.打包好的环境和代码放到离线服务器2中
docker load -i test.tar
8.启动容器
docker run --rm -it -p:8000:8000 --name ceshi -v <本机文件夹路径>:<容器文件夹路径> -d test:v1
-it
选项使容器的标准输入保持打开,并分配一个伪终端。--rm
选项告诉 Docker 在容器退出时自动删除它,避免留下无用的容器。- -d 后台运行容器
- -p 宿主机端口:容器端口 映射
- -v <本机文件夹路径>:<容器文件夹路径> 进行数据卷挂载,方便随时修改容器内代码
- --name <容器名称> 是给容器命名,不添加系统会自动生成名称
更多推荐
已为社区贡献5条内容
所有评论(0)