docker镜像配置
前言
conda环境迁移依然可能遇到各种各样的问题,报错很花式。如果追求稳妥,可以选择配置docker环境然后再打包迁移。读了很多篇博文,感觉对于纯新手小白来说很难系统的走完成功创建的流程。这里简单地对基础流程进行阐述。
一、docker是什么?
docker 是一个开源的应用容器引擎,可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。
常见概念通常包括镜像、容器、仓库。
镜像images
简单理解为运行所需要的一个模板,构建后不可改变
容器containers
是image的运行示例,包含了一个极简的Linux系统环境与运行在其中的应用程序。
动态,不会影响到image,除非保存为新镜像。
仓库registry
存储镜像位置。创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用
二、配置步骤
1.docker镜像创建
可以通过dockerfile创建,也可以pull一个基础镜像。这里不详细讲dockerfile的语法,主要讲比较新手小白的直接拉取一个新手镜像。
注意:如果要用到显卡cuda,镜像中需要有驱动!也可以直接用nivida/cuda的基础镜像
docker pull nvidia/cuda:11.0.3-base-ubi8
2.从镜像创建容器
- -id表示在后台运行,退出后容器持续运行
- -v表示挂载数据卷。有时候要运行的代码文件很大,不便于整体迁移和便利性,我们可以将数据文件夹放在自己的主机上再挂载到容器中。
docker run -id --name=() -v 宿主机目录:容器目录 镜像名称
- –gpus all表示使容器可以读到宿主机上的gpu
docker run -id --name=() --gpus all 镜像名称
因此创建命令为:
docker run -id --name=self -v ~/maxine/self-rag(宿主机目录):/home/maxine/self(容器目录) --gpus all 镜像名字
创建容器后,使用以下命令交互进入容器。
docker exec -it 容器名称 /bin/bash
3. docker容器保存为镜像
将容器保存为镜像
docker commit -m "描述信息" 容器id 要创建的镜像名:标签
可用docker images查看目前的镜像。如果要迁移到其他主机,可以用docker save导出tar包。
docker save -o name.tar image_name
4. 迁移到其他主机
先加载导入tar包中的docker
docker load -i name.tar
然后可以使用docker images查看。
给镜像打上tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag centos centos:v1
从新镜像创建容器,由于是从外网迁移到内网,import numpy时会报错所以命令加上–security-optseccomp:unconfined
docker run -id--name=容器名称-v数据卷:容器中的位置--gpus all --security-optseccomp:unconfined 镜像名称
其他
可以直接下载whl文件到本地再用pip install安装,这个whl文件要和cuda以及python版本相对应。例如:flash_attn-2.3.3+cu117torch2.0cxx11abiFALSE-cp310-cp310-linux_x86_64.whl 表示需要cuda11.7,python3.10flash_attn-2.3.3+cu117torch2.0cxx11abiFALSE-cp311-cp311-linux_x86_64.whl 表示需要cuda11.7,python3.11
总结
与conda环境相比,docker的优势是配好后环境运行更加顺利。
这两篇文章主要是记录自己在配置环境过程中踩到的各种坑和经验,希望能对大家有所帮助。
本文详细介绍了Docker的基本概念,如镜像、容器和仓库,以及如何通过dockerfile创建镜像、从镜像创建容器、保存和迁移容器为镜像,以及处理CUDA和Python环境的安装问题。作者分享了配置过程中的经验和常见坑点,旨在帮助新手快速上手。
5458

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



