由于自己最近mentor要求保存conda环境到docker hub,以下记录自己的踩坑过程和部署过程。
Docker 安装和使用
此部分主要参考Docker官方文档:https://docs.docker.com/engine/install/ubuntu/
Ubuntu Docker安装
bug: Get Permission Denied
原因
摘自docker mannual上的一段话
Manage Docker as a non-root user
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.
If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.
解决办法
-
使用sudo获取管理员权限,运行docker命令
#如下命令可以正常执行 sudo docker run ubuntu:15.10 /bin/echo "Hello world"
-
docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令。
sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用
搜索可用镜像
docker search anaconda
拉取你中意的镜像
docker pull continuumio/anaconda3
我这里因为要存储conda的环境,所以我pull的是anaconda,也可以搜索到其他的docker的环境,例如
docker pull ubuntu:18.4 # 18.4为版本号
启动该镜像并且运行bash命令:
docker run -it continuumio/anaconda3 /bin/bash
环境封装
制作镜像
记新打包成的镜像名为new_anaconda
sudo -s
docker pull continuumio/anaconda3
docker run -it --name new_anaconda continuumio/anaconda3 /bin/bash
激活new_anaconda
docker start new_anaconda
进入new_anaconda
docker contain new_anaconda
- 执行
whereis anaconda
可知容器中anaconda的路径为/opt/conda/envs
在查找到的anaconda路径下,创建新的为env
的路径cd /opt/conda/envs
,此时还没有创建环境,ls为空。
新建一个终端,查找到系统内安装的anaconda3环境路径,一般在your_anaconda3_path/envs
,这里有你创建好的环境。 - 通过
docker cp
指令,将系统中的环境全部复制到docker的anaconda3环境路径下,此时docker中的anaconda已经可以使用配好的环境了,可以用 source activate 指令自行证实一下。
docker cp your_anaconda3_path/envs/envs_name container_name:/opt/conda/envs `
导出镜像
- 记导出的镜像名字为
new_anaconda_image
docker commit new_anaconda new_anaconda_image
docker save new_anaconda_image -o new_anaconda_image.tar
注意:一定要导出为.tar文件格式
- 在新服务器上导入镜像
sudo -s
docker load < new_anaconda_image.tar
修改docker container名字
后面push
的时候需要修改,这里先不管。
上传image到docker hub
- 注册docker hub:https://hub.docker.com/
- 把 Docker Image Push 到 Docker Hub 上
打開 terminal 輸入docker images
,畫面如下:
要把 Docker Image Push 到 Docker Hub 上,需要把 Docker Image 加上 tag,如下指令:
$ docker tag mytomcat jackyohhub/mytomcat
使用的Docker tag格式如下:
docker tag ${Image Name} DockerHub帳號/Image Name
執行結果的畫面如下:
3. 輸入
docker login
指令登入到 Docker Hub
4. 使用 docker pus
h 指令把 Docker Image Push 到 Docker Hub。
测试
把docker pull下来
$ docker pull jackyohhub/mytomcat
啟動 Docker Container,指令如下
docker run -p 8080:8080 jackyohhub/mytomcat
啟動完成之後就可以使用 Browser 查看結果,輸入 URL 位址為 http://localhost:8080
可以看到是否成功。
参考
1. 记录一次将本地的基于Anaconda的Pytorch开发环境打包成Docker镜像并迁移到其他服务器上的全过程
2. 如何将anaconda中的环境封装成docker
3. Day6:把 Docker Image Push 到 Docker Hub