docker相关
1 从阿里云上传下载docker image
- 访问cr.console.aliyun.com,进入自己的容器镜像服务器/实例列表/镜像仓库/基本信息
根据《操作指南》操作,就可以实现上传或下载镜像文件
2 执行镜像文件
- sudo docker images # 查看镜像文件
- sudo docker run -itd [IAMGE ID] # 在后台执行镜像文件
- sudo docker ps -a # 查看后台运行的容器
- sudo docker exec -it [CONTAINER ID] /bin/bash # 在指定容器中执行命令/bin/bash
3 在Docker Container中执行ros包中的节点
- 找到catkin_ws所在目录,并执行source ./devel/setup.bash,初始化catkin环境
- roscore #执行rosmaster
- rosrun 包名 节点名 # 执行包中节点
若想有多个terminal,就执行多次2和3步骤
4 安装ros:noetic Docker Image
就是说安装一个Docker ros Image,在上面将我们的包部署在ros的镜像文件中,这样就可以发布给别人使用并展现我们所编码的ros应用程序
- sudo docker pull ros:noetic # 默认从hub.docker.com中获取ros:noetic镜像文件
- sudo docker images # 查看当前系统中的docker镜像文件
- sudo docker run -itd -v$(pwd):/data ros:noetic # 将宿主机和虚拟机的文件系统关联起来,$(pwd)为宿主机上catkin_ws所在目录,而/data为ros容器中的/data所在目录。执行之后,在/data中就会有宿主机上的文件
- 在/下创建catkin_ws文件夹,并将/data下的src拷贝到当前目录下,执行catkin_make失败
- echo ‘source /opt/ros/neotic/setup.bash‘ >> /root/.bashrc # 添加到bash环境变量中
- cat /root/.bashrc # 检查是否添加成功
- source /root/.bashrc
- 再次执行catkin_make就可以成功编译代码了
- exit推出terminal环境
5 上传自己Docker Image到阿里云
-
在Docker环境中制作了Ros包之后,退出Docker环境
-
sudo docker ps -a # 查看当前有哪些Docker Container还在运行,并记录Container Id
-
sudo docker commit [容器id] [新的容器名] # 生成一个新的容器
-
sudo docker images # 查看新生成的容器
-
上传的方式,可以通过查看阿里云:容器镜像服务器/实例列表/镜像仓库/基本信息/【操作指南】第三条
第3条如下: 将镜像推送到Registry $ docker login --username=namtaerg registry.cn-hangzhou.aliyuncs.com $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/mars_deimos/ros_primary:[镜像版本号] $ docker push registry.cn-hangzhou.aliyuncs.com/mars_deimos/ros_primary:[镜像版本号]
6 上传自己的Docker Image到hub.docker.com
- 在hub.docker.com上注册账号,创建repository
- 在本地先退出阿里云账号(若登录了阿里云),使用sudo docker logout
- docker login # 本地登录hub.docker.com的账号信息,退出使用 docker logout
- sudo docker images # 查看本地的docker images,选择其中一个上传的image,并打标签
- docker tag [选择本地REPOSITORY中的某一个image名称] [hub.docker.com上的命名空间]/[仓库名]:version
- docker push [hub.docker.com上的命名空间]/[仓库名]:version # 这样就上传到hub.docker.com上了
- 退出账号下载docker image进行验证
- docker pull [hub.docker.com上的命名空间]/[仓库名]:version
- docker images # 可以看到刚刚pull的镜像文件
- docker run -itd [hub.docker.com上的命名空间]/[仓库名]:version # 运行该镜像文件
- docker ps -a # 查看运行的容器
- 之后就可以进去对应的容器,进行相关操作
7 常用指令
-
停止所有容器: docker stop $(docker ps -aq)
-
删除所有容器: docker rm $(docker ps -aq)
-
删除所有镜像: docker rmi $(docker ps -aq) -f # 表示强制删除,否则有时候有些Image不能够删除
-
启动已停止的容器: docker start [容器名或id]
-
列出所有容器: docker ps -a
-
列出所有镜像: docker images
-
进入已启动的容器: docker exec -it [容器id] /bin/bash
-
创建容器: docker run -itd [Docker Images名字]
docker run -d
--restart=always
--net=bredge-zwh
-v /opt/DATA/zwh/2.ChiPeak:/2.ChiPeak
--ip=192.168.1.100
--name ub18.04-10.0cu-zwh-face 841d44dd4b3c /bin/sh
-c "while true;do echo hello world;sleep 1;done"
# -d 后台运行容器
# --net=bredge-zwh 桥接网络,或许虚拟网卡的名称
# --restart=always 每次重启,都按照该设置(避免重起之后,预分配的静态ip消失)
# -v 把宿主的/opt/DATA/zwh/2.ChiPeak目录挂载到2.ChiPeak(会自动创建目录)
# --ip=192.168.1.100 静态分配的ip,按照自己的需求进行更改
# -c 仅仅表示后面的为一个字符串
# ub18.04-10.0cu-zwh-face 为镜像names,换成镜像 id 也可
# /bin/sh 表示虚拟机运行之后要执行的命令
# "while true;do echo hello world;sleep 1;done" ,执行该命令的主要原因是,
# 容器在没有进行运行时会自动关闭,所有手动给他创建一个循环进程,防止其stop。