究极缝合怪!
记录Docker打包conda环境+代码&上传至自己的Docker hub
1、从安装Docker开始
-
安装yum工具
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
-
设置docker镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
-
安装Docker
yum install -y docker-ce
-
先输入:sudo systemctl start docker,再输入:sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl enable docker
Docker安装over
2、将Conda项目打包成镜像
-
先安装一个miniconda基础的镜像
docker pull continuumio/miniconda3
-
进入容器
docker run --name test -idt continuumio/miniconda3
-idt中的 -d 指定容器的运行模式,让docker 服务后台运行。
-
查看一下容器列表
docker ps -a
-
进入test容器,查看conda位置
docker exec -it test /bin/bash
查看conda位置:
conda info --envs
查看完后接着退出容器:
exit
-
在本地环境中将本地环境复制到docker中
退出容器后,在本地环境中将需要打包的本地复制到docker中
docker cp /root/miniconda3/envs/你的conda环境 test:/opt/conda/envs
- /home/b/miniconda3/envs/pipe 是自己需要打包的本地环境
- test是容器名,/opt/conda是在容器内conda的根目录。
-
着再进入容器 查看环境是否复制成功
docker exec -it test /bin/bash
conda info --envs
exit
-
在本地环境中将本地代码复制到docker中
退出容器后,在本地环境中将需要打包的代码复制到docker中
docker cp /data/代码路径 test:/root/
docker exec -it test /bin/bash
ls /root/
exit
-
将容器保存为镜像
docker commit -a '你的名字' -m '代码描述' test image_test
- -a:作者
- -m:提交的描述信息
- test:容器名字
- image_test:保存的镜像的名字
-
将镜像存为压缩包【这步可以直接把压缩包给另一个机器,不走docker hub】
docker save -o test_tar.tar image_test
- test_tar.tar:压缩包名称
- image_test: 镜像名称
读取镜像【如果是用压缩包的话,就是上面的第9步才看这里】
-
将打包好的镜像压缩包拷贝到宿主机上。
-
cd 到压缩包目录,执行:
docker load -i test_tar.tar
-
用image_test镜像创建一个名为create_test的容器:
docker run --name create_test -idt image_test
-
如果需要容器内文件与容器外文件做映射,则用以下指令创建容器:
docker run --name create_test -v /home/path:/root/ -idt image_test
-v 宿主机路径 容器路径:该指令可以在创建容器时宿主机路径映射到容器路径。这样可以在容器内直接访问宿主机的文件夹。 -
进入容器:
docker exec -it create_test /bin/bash
上传镜像
-
登陆Docker Hub :
用户在 Docker Hub 上完成注册后,创建一个repository。
然后在命令行中进行登陆
docker login -u <用户名>
成功显示:Login Succeeded
退出:
docker logout
-
给本地镜像打tag
docker tag 镜像名字和标签
docker tag local-image:tagname new-repo:tagname
附上删除镜像的命令:
docker rmi <image>
-
上传镜像
用户可以通过 docker push 命令,把自己创建的镜像上传到仓库中来共享。
docker push new-repo:tagname
这步可能会出现【denied: requested access to the resource is denied】这个问题
有可能的解决方法是:1、重新login一下 2、确定自己在docker hub创建了repository,然后tag要和创建的repository名一样,可以参考docker hub官网给的提示:
3、网不好的话多试几次,万一网好了呢