docker整体环境转移

最近配了个docker,配完才发现,有点小G,还得自己安装cuda,有点麻烦,如果选择重新在新的cuda镜像上安装,也不轻松,所以找了下资料,搞出来了docker整体转移

首先介绍一个命令

docker commit

docker commit 命令在Docker中用于从修改过的运行中的容器创建新的镜像。在一个Docker容器内进行了更改(比如安装了新的软件包、修改了配置文件、添加了新的文件等)并且希望保留这些更改时,可以使用 docker commit 来捕获这些更改并创建一个新的镜像。这个新镜像将包含容器的当前状态。

使用 docker commit 的基本格式如下:

sh 复制代码
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • CONTAINER 是要提交更改的容器的名称或ID。
  • REPOSITORY[:TAG] 是新创建镜像的仓库名和标签。如果不指定标签,通常会默认使用 latest 标签。

例如,如果有一个名为 mycontainer 的容器,并希望创建一个新镜像叫做 mynewimage,可以这样做:

sh 复制代码
docker commit mycontainer mynewimage

如果您想指定标签,可以这样:

sh 复制代码
docker commit mycontainer mynewimage:v1

注意事项:

  • docker commit 通常不是创建Docker镜像的推荐方法。最佳实践是使用 Dockerfile 来定义镜像的构建过程,因为这种方式更加透明、可重复,并且容易维护。
  • 使用 docker commit 创建的镜像不会包含任何构建历史或者 Dockerfile。因此,它可能不适合需要版本控制和持续集成/持续部署 (CI/CD) 的场景。
  • docker commit 只会保存容器的文件系统更改,不会保存容器的网络配置、挂载的卷、环境变量等信息。

具体步骤

步骤 1: 将 当前 容器的状态保存为镜像

首先,我们需要将 当前 容器的当前状态保存为一个新的Docker镜像。假设 [现有容器名称] 是容器名称,执行以下命令:

sh 复制代码
docker commit [现有容器名称] [新镜像名称]

这会创建一个新镜像,其中包含了 当前 容器的所有更改。

步骤 2: 创建新的Dockerfile

接下来,需要创建一个Dockerfile来构建一个新的基于CUDA的镜像,同时包含 [新镜像名称] 中的状态。例如:

Dockerfile 复制代码
# 使用dockers官网的基础镜像
FROM nvidia/cuda:12.3.1-runtime-ubuntu20.04

# 复制从创建的新的镜像中的文件
COPY --from=[新镜像名称] / /

这个Dockerfile从CUDA的基础镜像开始,然后复制了 [新镜像名称] 中的所有文件和配置。

步骤 3: 构建新的镜像

在Dockerfile所在的目录下运行以下命令来构建新镜像:

sh 复制代码
docker build -t [最终创建的镜像名称] .

这将创建一个名为 [最终创建的镜像名称] 的新镜像,该镜像基于CUDA环境,并包含了从 [新镜像名称] 中复制过来的文件和配置。

步骤 4: 运行新的基于CUDA的容器

最后,使用新创建的基于CUDA的镜像运行容器:

sh 复制代码
docker run --gpus all -it [最终创建的镜像名称]

确保在运行容器时添加 --gpus all 参数,以便容器可以访问宿主机的GPU。

注意事项

  • 在使用 docker commit 时,请注意,任何在容器中进行的更改都会被保存,包括文件系统更改和某些配置更改,但不包括容器的网络配置、已挂载的卷等。
  • 如果容器中有大量数据或复杂配置,这种方法可能会产生一个较大的镜像。
  • 根据具体需求,可能还需要在新镜像中进行额外的配置或安装额外的依赖。
相关推荐
阿里云大数据AI技术12 小时前
阿里云 EMR AI 助手正式发布:从问答工具到全栈智能运维助手
运维·人工智能
辉的技术笔记14 小时前
Dify 自部署为什么跑不动?6 层瓶颈诊断法教你定位
docker
SkyWalking中文站1 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
程序员老赵1 天前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
程序员老赵2 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
火车叼位2 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
小猿姐2 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站3 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站3 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ4 天前
Kubeneters HA Cluster部署
运维