# roskinetic
**Repository Path**: uanheng/roskinetic
## Basic Information
- **Project Name**: roskinetic
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-09-14
- **Last Updated**: 2021-10-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## docker 镜像说明
本工程借用了 [fcwu](https://github.com/fcwu/docker-ubuntu-vnc-desktop)编写的工程作为底包,在此基础上添加了 `ROS`,`GTSAM`第三方库,`evo`,`kitti2bag`工具.
## docker 使用帮助
### 安装 docker
先卸载旧版本(如果没有装可以跳过)
``` bash
sudo apt-get remove docker docker-engine docker.io containerd runc
```
安装前置软件
``` bash
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
```
添加Docker官方GPG密钥
``` bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
```
添加稳定版仓库
``` bash
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
```
安装Docker
``` bash
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
```
使用国内镜像源加速(可选)
docker hub 中国镜像:https://registry.docker-cn.com
网易云docker hub加速:https://hub-mirror.c.163.com
阿里云个人镜像加速(可选中的可选)
查看以下链接[https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors](https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors),如下图:
创建&&打开文件daemon.json
``` bash
sudo gedit /etc/docker/daemon.json
```
将下面的内容复制到里面(**是上面的镜像连接,下面默认给出网易云镜像加速连接,如果有阿里云的可以替换掉**)
``` json
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
```
重启docker
``` bash
sudo systemctl daemon-reload
sudo systemctl restart docker
```
测试是否安装完毕
``` bash
sudo docker run hello-world
```
出现下列输出即可
``` bash
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
```
创建docker用户组并添加当前用户到docker用户组
``` bash
sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
```
到这里**docker**就安装完毕了,建议重启一下(其实注销用户在登入也可以),这样再用**docker**的就可以不用加**sudo**权限了
### 生成镜像及容器
将本工程拷贝下来后,使用**cd**命令跳转到目录中.
``` bash
git clone https://gitee.com/uanheng/roskinetic.git && cd roskinetic
```
使用**docker build**命令构建新的容器(**container**),这一过程可能非常长,而且会在命令行输出红色**log**,这里注意,并不是出错了,除非你看到了**error**,在构建容器时**waring**也是输出红色,不必担心.
``` bash
docker build -t roskinetic:v1.0 .
```
如下图
完成镜像构建之后,就可以查看镜像ID或者镜像名来构建容器.
这里多说一句,在构建镜像时,由于需要编译ceres,gtsam等优化库,可能会占用大量cpu资源,这里默认是**make -j3**,如果对自己的电脑有信心,也可以改成你**make -j8**及以上.
查看镜像ID及镜像名
``` bash
docker image ls
```
输出
``` bash
REPOSITORY TAG IMAGE ID CREATED SIZE
roskinetic v1.0 8cfc4e929fe1 2 hours ago 4.44GB
rosimage v1.0 c00ffdef50c9 20 hours ago 6.28GB
dorowu/ubuntu-desktop-lxde-vnc bionic 16ac25e8daa0 24 months ago 1.06GB
dorowu/ubuntu-desktop-lxde-vnc xenial c6135474bab7 3 years ago 1.19GB
```
以下两个命令都可以创建容器成功,需要注意,你需要修改**镜像ID**,或**镜像版本号**,以及最重要的**共享文件夹**,并且创建容器时,可能会卡一段时间,不要退出.
(需要配置**共享文件夹**!!!)
(直接复制下面的命令会直接报错,修改**镜像ID**,或**镜像版本号**!!!)
(需要配置**共享文件夹**!!!)
(直接复制下面的命令会直接报错,修改**镜像ID**,或**镜像版本号**!!!)
(需要配置**共享文件夹**!!!)
(直接复制下面的命令会直接报错,修改**镜像ID**,或**镜像版本号**!!!)
(注意,代码中的数据路径默认为 **`/root/workspace/data/`**,如果改动了,需要你手动调整.)
(注意,代码中的数据路径默认为 **`/root/workspace/data/`**,如果改动了,需要你手动调整.)
(注意,代码中的数据路径默认为 **`/root/workspace/data/`**,如果改动了,需要你手动调整.)
``` bash
docker run -p 6080:80 -v /dev/shm:/dev/shm -v /home/uanheng/share/loam_share:/root/workspace --name="roskinetic" 8cfc4e929fe1
```
或
``` bash
docker run -p 6080:80 -v /dev/shm:/dev/shm -v /home/uanheng/share/loam_share:/root/workspace --name="roskinetic" roskinetic:v1.0
```
有如下输出即为成功,构建容器
此时就可以打开浏览器,输入[http://127.0.0.1:6080](http://127.0.0.1:6080).
终端:
到此刻为止,已经成功构建了镜像和容器,刚刚建立容器的窗口输出**ctrl+c**可以退出容器.
现在查看容器
``` bash
docker ps -a
```
可以看到如下输出,说明已经完全成功了.
``` bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5dd1b346e207 8cfc4e929fe1 "/startup.sh" 7 minutes ago Exited (0) 2 minutes ago roskinetic
```
### 关机后如何进入容器
在关机重启后,通过如下命令重新启动和关闭容器.
``` bash
docker start roskinetic
```
或使用容器ID(你自己的容器ID)
``` bash
docker start 5dd1b346e207
```
输出如下
``` bash
roskinetic
```
或
``` bash
5dd1b346e207
```
关闭同理,只要把**start**换成**stop**即可
开启之后,可以在浏览器打开[http://127.0.0.1:6080](http://127.0.0.1:6080)即可.
## 小技巧和报错方案
按住 **`ctrl`+`shift`+`+`** 可以增加终端的字号,或 **`ctrl`+`shift`+`-`** 可以减小终端的字号.
另外在使用同一个镜像创建多个容器时,由于端口均为6080,所以在浏览器打开第二个novnc时可能会出现乱码,这里可以通过清除浏览器缓存解决.还有一种可能就是构建完容器之后,可能会出现连接不上的情况,可以通过重启容器,清楚浏览器缓存,重启浏览器解决.
在构建时容易出现镜像或容器构建失败的情况:
对于构建镜像失败,需要先删除容器
``` bash
# 查看现有容器
docker ps -a
# 删除失败容器
docker container rm ***(容器名或容器ID)
# 查看现有镜像
docker image ls
# 删除镜像(如果有依赖镜像需要先删除子镜像)
docker image rm ***(一般只有镜像ID,名字是一个none)
```
对于构建容器失败
``` bash
# 查看现有容器
docker ps -a
# 删除失败容器
docker container rm ***(容器名或容器ID)
```