Docker 封装anaconda环境,生成镜像并打包,纯小白一文读懂(二)


前言

本文主要讲解如何打包本地conda环境并生成镜像和压缩包。如需要配置Docker环境(本文所有docker指令都是使用用户组的用户)具体请看:
Docker 封装anaconda环境,生成镜像并打包,纯小白一文读懂(一).


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是Docker镜像、容器

打包环境前需要对镜像及容器有所了解,这将使你对后续docker指令的理解有所帮助。
Docker镜像文件,也就是image文件,它可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成对应的 Docker 容器。
简单理解就是,将程序打包在image文件(也叫image仓库)里面,运行image文件,生成一个容器生例,其类似于一个隔离箱,不与宿主机环境做交互。只在容器里面跑程序(已将mysql之类的依赖都打包在里面了,不用去配置数据库等环境),安装了Docker的服务器叫做宿主机,在容器内的代码不会受到宿主机环境的影响。
也就是说,别人的程序打包在image里面,自己直接拿过来后不用配置环境,直接生成容器就可以直接在容器里跑。
查看服务器中的所有Docker镜像:

# 列出本机的所有 image 文件:
docker images

在这里插入图片描述
查看服务器中的Docker容器:

# 列出本机的所有 docker容器:
docker ps -a
# 列出本机的运行中的 docker容器:
docker ps

在这里插入图片描述

二、操作步骤

1.拉取镜像

continuumio/anaconda3 镜像是docker镜像库中star数最高的镜像

docker pull continuumio/anaconda3

用 docker images 指令 查看是否拉取成功。

2.用continuumio/anaconda3镜像创建一个名为test的容器

docker run --name test -idt continuumio/anaconda3

-idt中的 -d 指定容器的运行模式,可以使docker 的服务是在后台运行。但加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

执行完该指令后再查看一下容器列表(docker ps -a),发现有名为test的新容器被创建,容器一被创建就自动运行。
在这里插入图片描述

3.进入test容器,查看conda位置

docker exec -it test /bin/bash

用exec进入容器,在使用快捷键退出容器时,不会停止容器。

●在test容器内查看容器内的anaconda的位置

whereis anaconda
#或者使用
conda info --envs

查看完后接着退出容器:

#快捷键
Ctrl+d

在这里插入图片描述
图中可以看出在容器内部,conda的路径是/opt/conda 。

4.在本地环境中将本地环境复制到docker中

●退出容器后,在本地环境中将需要打包的本地复制到docker中:

docker cp /home/b/miniconda3/envs/yolo1.7 test:/opt/conda/envs

其中 : /home/b/miniconda3/envs/yolo1.7 是自己需要打包的本地环境, test是容器名,/opt/conda是在容器内使用 conda info --envs 查看到的根目录。

●接着再进入容器 查看环境是否复制成功(然后再退出容器):
在这里插入图片描述

5.在本地环境中将本地代码复制到docker中

●退出容器后,在本地环境中将需要打包的代码复制到docker中:

 docker cp /home/b/.../tools test:/root/

将本地文件 /home/b/…/tools 复制到test容器的根目录下。

●容器内查看复制结果并退出容器:
在这里插入图片描述
到此为止,该test容器中已经包含我们所需的代码和环境,可以对其进行打包。

6.将容器保存为镜像

●退出容器后,执行:

 docker commit -a 'author' -m 'instruction' test image_test

该命令各字段: test :容器名字 image_test:保存的镜像的名字。

●查看镜像 ,可以看到已经生成了名为image_test的新镜像:
在这里插入图片描述

7.将镜像存为压缩包

●cd到一个指定目录,以便于查找保存的压缩包。
●压缩:

 docker save -o test_tar.tar image_test

test_tar.tar: 压缩包名称 , image_test: 镜像名称。

●在该目录下,可以查看到生成的名为test_tar.tar的压缩包:
在这里插入图片描述
到此为止,本地的conda环境便打包完成。

三、读取镜像

在宿主机上执行:
●将打包好的镜像压缩包拷贝到宿主机上。
●cd 到压缩包目录,执行:

docker load -i test_tar.tar

查看是否读取成功,可发现已经生成了一个名为image_test 的新镜像:
在这里插入图片描述
●用image_test镜像创建一个名为create_test的容器:

docker run --name creat_test -idt image_test

PS:若创建容器时需要对容器内文件与容器外文件做映射,则需要执行以下指令:

docker run --name creat_test -v /home/b/hxb:/root/hxb -idt image_test

-v /home/b/hxb:/root/hxb:该指令可以在创建容器时将 容器外的/home/b/hxb目录映射到容器内的/root/hxb目录。这样可以在容器内直接访问容器外的/home/b/hxb文件夹。

●进入容器内便可发现已经将环境与代码全部打包过来了:
在这里插入图片描述

四、几个常用docker命令

●启动容器:

docker start 'CONTAINER ID'

●停止容器:

docker stop 'CONTAINER ID'

●删除容器(由于容器即使停止也会占用存储空间,所以有必要删除没用的容器来释放空间):

docker rm 'CONTAINER ID'

●删除镜像(需先删除关联的容器):

docker rmi 'IMAGE ID'

●干净卸载docker:

rm -rf /etc/systemd/system/docker.service.d
13 
rm -rf /var/lib/docker
rm -rf /var/run/docker
rm -rf /var/run/docker.pid

五、参考文献

Docker菜鸟教程
docker封装本地anaconda环境
将本地的anaconda环境封装到docker中并导出为压缩包

打包Anaconda环境,可以按照以下步骤进行操作: 1. 首先,确保已经安装了Docker进行了相关配置工作。如果不需要配置Docker,可以跳过这一步。 2. 进入Anaconda环境所在的文件夹。例如,如果Anaconda安装路径是/home/hadoop/anaconda3,而虚拟环境保存路径是/home/hadoop/anaconda3/envs,那么可以使用cd命令进入到envs文件夹下: ``` cd /home/hadoop/anaconda3/envs ``` 3. 使用打包命令将当前目录下的文件打包成zip包。假设要打包的虚拟环境名称是py37,可以使用以下命令: ``` zip -r py37.zip py37 ``` 4. 打包完成后,可以将生成的zip包用于环境迁移或加载到Pyspark任务中。 总结起来,如果需要进行环境迁移或加载到Pyspark任务中,建议使用Anaconda创建的虚拟环境进行打包。但需要注意的是,由于该方式创建的虚拟环境打包后体积一般较大,即使没有安装太多的Python包的情况下。如果只是为了隔离不同开发环境且Python版本基本不变,建议使用virtualenv创建虚拟环境,该方式更加简单。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Docker 封装anaconda环境生成镜像打包小白一文读懂(一)](https://blog.csdn.net/qq_32101863/article/details/120341856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python虚拟环境():Linux基于Anaconda创建虚拟环境打包](https://blog.csdn.net/FutureStone/article/details/128259259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值