最近在做一个开源项目,遇到开发者问各种问题,发现都是系统和软件版本的差异引起的。于是了解了一下docker的使用,发现docker真是个好东东,基本解决了各种版本差异的问题,真正做到了一键部署使用。
先熟悉一下docker里的概念,docker分为镜像和容器,镜像是一个静态的文件,用于分发部署。容器是镜像运行起来后的运行时对象,可以在容器里安装软件、添加文件等,修改后可以用docker commit将容器打成一个新的镜像。 说的通俗一点,镜像就是一份安装光盘,容器是安装在主机上的操作系统环境。
整体流程如下图所示
1,最基本的镜像有ubuntu20.04等,但这种只有基础的操作系统。如果用于深度学习,最好已经安装了显卡驱动和cuda等工具,可以上这里CUDA | NVIDIA NGC挑选合适的镜像版本。
用docker pull xxx 拉取镜像到本地,然后可以用docker images查看本地镜像列表。
如果需要删除镜像,用docker rmi
2,运行镜像生成一个容器,docker run -it --gpus all
正式用docker时用命令docker run --rm --gpus all
3,在docker的交互命令行可以进行各种操作,跟在宿主机上操作一样。如果需要从宿主机拷贝文件到容器中,在宿主机上运行命令docker cp
可以修改容器里的~/.bashrc,添加自启动命令,这样启动容器后,会自动执行这些命令
4,容器运行环境搭好后,用docker commit
5,发布镜像到阿里云,先上阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台创建一个命名空间,
docker login --username=xxx registry.cn-hangzhou.aliyuncs.com #登录阿里云
docker tag : registry.cn-hangzhou.aliyuncs.com/<命名空间>/:
docker push registry.cn-hangzhou.aliyuncs.com/<命名空间>/:
如果不想发布到网上,只想本地存成一个文件,可以用命令docker export
docker运行中缓存清除,可以用命令docker builder prune,docker system prune
其实我们在阿里云上的云服务器就是阿里基于物理主机给我们开了一个容器而已,我们又在这个容器里用docker新开了更多容器,有点像俄罗斯套娃。我们的现实世界又何尝不是套娃呢。