Docker基础与基于Docker的ROS系统使用说明

docker常用命令

docker load -i  ./xxx.tar : 将tar包导入为本地镜像
docker ps   :列出所有正在运行的容器
docker image ls     :列出所有的镜像
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系统使用说明
http://192.168.10.37:8090/pages/viewpage.action?pageId=21758212

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 就可以运行脚本了

文章参考
http://blog.51cto.com/13480443/2095314
http://dockone.io/article/2471

猜你喜欢

转载自blog.csdn.net/xihuanzhi1854/article/details/81673196
今日推荐