Docker基础与基于Docker的ROS系统使用说明
http://blog.51cto.com/13480443/2095314http://dockone.io/article/2471有用的命令docker ps:列出所有正在运行的容器docker image ls:列出所有的镜像docker stop <name&am
docker常用命令
docker load -i ./xxx.tar : 将tar包导入为本地镜像
docker ps :列出所有正在运行的容器
docker image ls :列出所有的镜像
docker start <name> :启动容器
docker stop <name> :暂停容器
docker rm <name> :删除容器
docker run -it <name> :启动容器
什么是Docker
Docker是一种软件虚拟化机制,可以在同一个操作系统内核之上实现文件系统、应用程序的隔离。每一个互相隔离的单元称为一个“容器(Container)“。
相比于VMWare、VirtualBox等虚拟机进行硬件虚拟化、并直接启动新的操作系统的方式,因为所有Docker容器都共享宿主机的内核,所以更加节省资源,即便普通PC也能同时运行许多个容器。这就容许软件部署从面向宿主机转变为面向容器进行。
每一个应用程序可以运行在一个容器内,就像运行在一个独立的操作系统一样。这一“操作系统”已经安装了应用软件所依赖的完整运行环境,而且不依赖宿主机的软件环境。软件分发也是直接分发容器的实例(即“镜像”),而非分发程序安装包。用户只需从镜像中启动容器,就可以直接使用软件,这就避免了脆弱的运行时环境依赖问题(“明明在我这里就没问题”)。甚至能让C语言等开发的原生应用程序跨WIndows、Linux、OSX多个系统无差别运行。
为什么要使用Docker进行ROS开发?
ROS是一个典型的具有复杂且脆弱依赖项的系统。各种库都有特定的版本要求,如果依赖项损坏且无法修复,最终只能花一整天时间重装操作系统并再次部署ROS和相关开发工具才能继续使用。因此我们决定将ROS转移到Docker上运行,降低损坏依赖项的风险。并通过统一所有开发人员的软件运行环境,避免可能因为环境问题引起的bug。
我们基于Xubuntu 16 + ROS Kinetic + VNC远程桌面构建了镜像。该镜像中还含有CLion/PyCharm/VsCode等开发工具,以及GIT/ZShell/proxychains等系统工具,可以直接进行ROS开发。
基于Docker的ROS系统使用说明
1、 安装最新版 docker
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
2、安装TiggerVNC Viewer
请从 http://tigervnc.bphinz.com/nightly/ 下载对应自己系统的安装包。注意选择非debug版本的VNC viewer。举例:64位 Ubuntu 16,在页面中选择 Packages for Ubuntu 16.04LTS – amd64 – xtigervncviewer_1.8.80+20180101git7b7b1201-1ubuntu1_amd64.deb
双击下载好的deb包并输入root密码安装。
3、加载ros镜像
在 home/Documents下创建两个文件夹,一个 src ,一个 prog
然后 加载镜像
sudo load docker -i ubuntu_portable_v_1_3.tar
ubuntu_portable_v_1_3.tar为镜像压缩包的名称,由于包比较大,可能需要加载3分钟左右
4、启动ros容器
运行脚本文件 .sh
#!/bin/bash
# 1. mount your source folder in host machine to /persist/src of
# the docker instance.
# 2. mount your clion and pycharm dir to /persist/prog/unix_dev_tools/clion
# and /persist/prog/unix_dev_tools/pycharm
# 3. --privileged option to use host GPU.
# 4. --security-opt seccomp=unconfined option to use GDB
# 5. --cpuset-cpus option should match your PC's core number.
# 5. in TigerVNC, use address localhost:5901 annd password is 'vncpassword'
sudo docker run -it \
-p 5901:5901 \
-p 2222:22 \
--user 0 \
--cpuset-cpus="0-7" \
--privileged \
--name ros-kinetic \
-v $HOME/Documents/src:/persist/src \
-v $HOME/Documents/prog/unix_dev_tools:/persist/prog/unix_dev_tools \
-d \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
sdong/ubuntu_portable:v1.3 zsh
脚本文件运行时提示:
docker error parsing reference... is not a valid repository tag invalid reference format
查资料了解到,问题可能是
(1)容器名中存在大写字母,需改成小写
(2)docker需要升级更新
检查后发现没有大写字母,更新后则提示另一个错误
docker, invalid reference format
仔细检查sh文件,发现
sdong/ubuntu_portable:v1.3 zsh 写成了 sdong./ubuntu_portable:v1.3 zsh
更正后问题解决
5、打开 xtigervncviewer
输入端口号和密码,就可以打开 ros容器了
关机后重启容器
当电脑关机后,容器也会跟着stop,但是镜像依旧存在于列表中,不用再次加载镜像。启动容器前先要 将之前的容器名删除
(1)docker rm <容器名 如:ros-kinetic>
否则直接运行sh文件会提示该容器名已经存在,因为在sh文件中将容器重新命名了
(2)接下来再次运行 .sh脚本就可以了
在sh文件夹下 右键 ,选择 Open in terminal, ./xx.sh 就可以运行脚本了
或者
docker start
镜像与容器的关系
基于镜像新建容器并启动
文章参考
http://blog.51cto.com/13480443/2095314
http://dockone.io/article/2471
更多推荐
所有评论(0)