docker常用命令汇总(加载,运行,保存,提交,启动,停止,导出,拷贝,挂载等)
因为在工控机上ubuntu环境下,在ROS下运行算法,依赖的基础库可能经常和其他同事的依赖库有冲突,常常是别人用完之后我再运行就缺库了。因此想到用docker来解决此问题,用docker拉取一个ubuntu 18.04的镜像然后在里面装各种库,装坏了只要用之前留有的备份镜像就可以迅速恢复运行环境,我的各种算法就在这个docker镜像里跑。相当于用docker封装了一个我的工程的独立运行环境,无论带
因为在工控机上ubuntu环境下,在ROS下运行算法,依赖的基础库可能经常和其他同事的依赖库有冲突,常常是别人用完之后我再运行就缺库了。因此想到用docker来解决此问题,用docker拉取一个ubuntu 18.04的镜像然后在里面装各种库,装坏了只要用之前留有的备份镜像就可以迅速恢复运行环境,我的各种算法就在这个docker镜像里跑。相当于用docker封装了一个我的工程的独立运行环境,无论带到哪台ubuntu计算机上(前提装有docker),我只要将我的镜像文件拷贝过去就可以立刻跑起来。
docker比虚拟机更好用,独立运行的最小系统,将自己的运行环境与主机隔绝开来,但是又可以共享主机的IP和端口进行通讯。
先介绍一下我对镜像和容器的理解,我理解镜像image就是一个模板,docker load加载镜像image后,可以从这个镜像image运行多个这个模板的实例即容器container,我们进入容器container后进行各种修改操作又需要commit提交到模板镜像image上,这样模板就可以保存我们在容器container中进行的更改。
docker各概念之间关系框图
下面介绍一些使用docker的高频命令:
所有docker命令都不能在容器container里,要在一般的宿主机终端中!
docker 镜像image在同一台电脑上只要先load加载一次(远程docker 仓库pull的可以不用load,本地tar文件需要先load),再run运行一次,下次可以直接attach连接到相应容器container,无需再加载运行。
1.拉取ubuntu系统镜像
sudo docker pull ubuntu:18.04
//18.04为版本号,可按自己需求选择相应版本
2.初次运行ubuntu docker镜像
sudo docker run -it ubuntu:18.04
//运行此最小系统,然后就可以在里面sudo apt-get install .... 安装各种需要的库了
//从docker远程仓库直接pull的镜像可以直接run,可以从.tar文件load后再run
3.加载.tar本地镜像文件
sudo docker load -i ‘路径/XXX.tar’
//小技巧 输完load -i后直接将.tar文件鼠标左键按住拖入终端也可以
sudo docker images
//加载完镜像后,用sudo docker images看看镜像Image是否被加载进来了
4.以host模式运行docker镜像
sudo docker run -it --net=host 镜像仓库名:镜像标签
//例如运行 sudo docker run -it --net=host ubuntu:18.04 bash加载图片中最后一个镜像,
//ubuntu就是这个镜像的仓库名REPOSITORY,18.04就是该镜像的标签代表版本
// --net=host使用host模式和宿主机共用IP端口,既能够独立运行又能和主机上的其他进程
//正常通讯
4.1将宿主机的某个文件夹挂载到docker镜像中的特定路径
sudo docker run -it -v 宿主机路径:映射路径 --net=host 镜像仓库名:镜像标签 bash
//通常需要将自己的程序工程文件放入docker中运行,但是docker容器里通常又没有vscode
//记事本等可视化界面,程序想debug非常麻烦,Debug完后还需要拷贝到容器里。可以之间//将主机上的工程文件挂载为docker容器里的对应路径,这样在宿主机对文件进行更改,
// docker 容器里也随着更改。就比较方便
//例如我想运行镜像ubuntu:18.04实例化为一个容器,然后将我宿主机 /home/Project1映射//为docker 容器内的 /home/Project_test路径,执行以下命令
sudo docke run -it -v /home/Project1:/home/Project_test --net=host ubuntu:18.04 bash
4.2 查看从镜像加载的容器列表
sudo docker ps -a
5.提交在docker镜像中的更改
sudo docker commit -a “你的提交注释” containerID 镜像仓库名:版本号
//如 sudo docker commit -a “wujiangzhu” e34626772 ubuntu_myenv:v0
//将当前我正在运行的容器e34626772 提交到ubuntu_myenv:v0
6.将镜像导出到tar本地文件
sudo docker save -o 要保存成的文件名.tar 镜像仓库:标签
// 如将图中的镜像ubuntu:18.04导出为myenv.tar,执行以下命令
// sudo docker save -o myenv.tar ubuntu:18.04,这样你就能在当前终端的路径下看到myenv.tar,
// 这时就可以用移动硬盘拷贝到工控机或者是其他你需要的设备上了,这个.tar文件就是封// 装了我这个ubuntu小系统,包含我配置的算法依赖的各种库
7.宿主机和docker容器互相之间文件拷贝
//有时候工程会有一些输出数据文件等需要从docker容器中拷贝出来
//从宿主机拷贝docker容器内
sudo docker cp 宿主机文件路径 容器名:容器内路径
//从docker 容器拷贝到宿主机
sudo docker cp 容器名:容器内路径 宿主机文件路径
//查看docker容器的名称
sudo docker ps 查看所有正在运行的容器的信息,最后一列为name
sudo docker ps -a 查看所有容器的信息,最后一列为name如下图
8.启动,停止, 进入docker容器
sudo docker start 容器id //id 用docker ps -a查看
sudo docker stop 容器id
sudo docker attach 容器ID
9.删除宿主机上加载的容器,镜像
为了节省存储和内存空间,需要定期删除不用的镜像和容器,指令如下:
sudo docker rmi 镜像id //镜像id用sudo docker images查看
sudo docker rm 容器id //容器id用sudo docker ps -a查看
更多推荐
所有评论(0)