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。

参考:Docker:基于ubuntu18.04的介绍,安装与使用 - 最新无死角

posted @ 2023-04-16 12:00  绍荣  阅读(37)  评论(0编辑  收藏  举报