docker可视化&多容器跨主机通信

主机环境

系统Ubuntu 16.04

1安装docker

1.1在线安装

默认使用当前最新版本

1.更新apt包索引:

sudo apt-get update

2.安装以下包以使apt可以通过HTTPS使用存储库(repository):

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

3.添加Docker官方的GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4.使用下面的命令来设置stable存储库:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

5.再更新一下apt包索引:

sudo apt-get update

6.安装最新版本的Docker CE:

sudo apt-get install -y docker-ce

7.查看当前版本验证是否成功:

docker --version显示当前版本表示安装成功


2拉取镜像

将拉取的ros镜像,安装x11-apps用于弹出gui,设置display变量,进行build产生新镜像

sudo docker build -t imagename - << __EOF__

FROM ros:kinetic-robot            

RUN apt-get update

RUN apt-get install -qqy x11-apps

ENV DISPLAY :0                   

 CMD imagename __EOF__


注释:

ros:kinetic-robot:为ros版本,可根据拉取所需镜像及版本

imagename :镜像build名称前后保持一致

3设置环境变量

XSOCK=/tmp/.X11-unix

XAUTH=/tmp/.docker.xauth

4生成临时文件.docker.xauth

在/tmp目录下,生成临时文件.docker.xauthsudo xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

5创建ROS容器

sudo docker run -ti --name gui -v $XSOCK:$XSOCK -p 3306:3306 -p 8080:8080 -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH imagename /bin/bash

 --name 后为容器名称

--imagename    镜像名称

-p 标识来指定容器端口绑定到主机端口。绑定后访问主机ip:端口便可访问容器程序,若需绑定多个 端口可多次使用-p参数

6 容器导入导出

6.1导出容器--docker export

可以随时导出容器快照

docker export -o 容器快照名.tar container_name

docker export container_id > 容器快照名.tar

-o表示输出到

例:

sudo docker ps -a

CONTAINER ID  IMAGE         COMMAND CREATED  STATUS    PORTS  NAMES

F91CAB8069E4  kinetic-robot  ......              ......              .....            .....          gui

docker export F91CAB8069E4>gui.tar

导出完成后,会产生该快照文件

6.2 导入容器--docker import

可以随时导入容器快照

docker import [options] file|URL|- [REPOSITORY[:TAG]]

例:

sudo docker import gui.tar gui:wqtest

docker images

PEPOSITOTY   TAG     IMAGE ID        CREATED    SIZE

gui:wqtest         latest    1d90cb6b6694    1min ago   1.51GB

7 ROS多机通信

目标:将2台主机中的容器可相互访问,相互操作

场景:有2台主机主机ip分别是主机A:192.168.28.161 主机B192.168.28.172

------------------------------------------------------------------------------------------------------

主机A:

进入容器中安装SVN客户端

sudo start docker newgui

sudo docker exec -it newgui /bin/bash

apt-get install subversion

主机B 

sudo docker run -ti --name gui -p 3690:3690 -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=$XAUTH imagename /bin/bash

上图3690为SVN服务器默认端口。

apt-get install subversion   //安装svn服务器

svnserve --version         //显示版本表示安装成功

创建仓库、添加权限可参考以下连接

https://blog.csdn.net/zengsange/article/details/80618301

svnserve -d -r /usr/svn/            //启动SVN服务

本次用于测试创建仓库名为repository

测试通信:

主机A-newgui容器内:

cd  /svn/test

svn co svn://192.168.28.172:3690/repository    //将主机B gui容器中svn服务器代码checkout到本地,

touch 161.txt                                    /

svn add 161.txt

svn ci -m“192.168.28.161”161.txt

主机B-svn容器内

cd /usr/test/repository

svn update

以上操作均成功,表示主机A-newgui容器和主机B-svn容器可通信

8 docker容器中文件的上传与下载

8.1上传文件

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

[OPTIONS]:保持源目标中的链接

例:docker cp /root/test.txt ecef8319d2c8:/root/

将当前系统/root/test.txt拷贝到容器id为ecef8319d2c8的/root/目录

8.2下载文件

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

[OPTIONS]:保持源目标中的链接

例:docker cp ecef8319d2c8:/root/test.txt /root/

将容器id为ecef8319d2c8的/root/test.txt下载到当前系统/root/目录中


9相关命令

9.1 docker相关命令

1.查看docker服务是否启动systemctl status docker

2.启动docker服务sudo systemctl start docker

3.查看镜像docker images

4.删除镜像 docker rmi images id

5.查看当前活动容器sudo docker ps 

6.查看所有容器sudo docker ps -a

7.删除容器sudo docker rm containerid/names  

8.启动容器sudo docker start containerid/name 

9.容器内可使用exit退出容器 sudo docker exec -it containerid/name 

10.关闭容器sudo docker stop containerid/name   

11.查看主机端口 sudo netstat -tlpn

12.查看当前映射的端口配置docker port containerid容器端口

 

9.2关机重启后进入容器需执行

1.XSOCK=/tmp/.X11-unix2.XAUTH=/tmp/.docker.xauth

3.xhost +si:localuser:root

4.sudo xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

5.sudo docker start yourcontainer6.sudo docker exec -it yourconatiner /bin/bash

10常见问题

docker.xauth

描述:

执行sudo xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -报以下问题

1、Xauth: file /tmp/docker.xauth does not exist

解决方案:

可以去/tmp目录下查看,若文件已产生该文件,可忽略该问题

2、docker.xauth为目录不可写

解决方案:

方案一:关机重启,再次设置环境变量

方案二:删除/tmp下docker.xauth文件夹,再次执行环境变量

MIT-MAGIC-COOKIE-1 KeyError:

描述:

在容器中执行程序报MIT-MAGIC-COOKIE-1 KeyError:Can’t open display: :0

解决方案:

此时执行在主机中执行xhost +si:localuser:root再次执行程序问题解决。

Error:cant open display

描述:

在容器中执行程序报Error:can’t open display:  

解决方案:

先查看主机$DISPLAY的值echo $DISKPLAY若为空则依次在主机和容器中执行export DISPLAY=:0,若主机值不为空则仅在容器中执行即可,再次执行程序问题解决。

port is already allocated

描述:

创建容器时报port is already allocated

解决方案:

表示当前主机中已有容器占用该端口,可使用sudo netstat -tlpn

查看当前主机被暂用端口,此时修改当前映射的主机端口即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335