Windows11下Docker使用记录(一)

Docker使用记录(一)

在进行ROS项目开发时,如果只有一台Windows电脑,我们可以考虑使用WSL或Docker来搭建ROS环境。在尝试了两种方式后,我们认为使用Docker容器更为方便和安全。本文的特色在于解决了ROS仿真软件在Docker容器中可视化的问题。

简单介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源 [1](#1)

具体而言,Docker就是一个轻量级的虚拟机,可以让我们在每个独立的container容器(类似 iPhone 的 app)中进行开发而不会干扰host系统,非常安全可靠。

Docker安装

Windows中安装 Docker Desktop: https://www.docker.com/products/docker-desktop/

值得注意的是,官方文档有说明 "借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试,并在 Windows 上的 Microsoft Edge 浏览器中运行容器" [2](#2)

翻译过来就是,在win11 系统中利用WSL2 安装的Ubuntu系统可以共享 win11中安装的docker desktop。只需确保如下设置:

Docker 常用命令

bash 复制代码
docker version  	#查看版本
docker ps 			#列出运行中的containers
docker info			#列出几乎images&containers所有相关信息
docker image ls		#列出所有镜像
docker container ls	#列出运行中的containers
bash 复制代码
docker run <options> <image_name>		#运行指定镜像
docker run -it <image_name>				#以交互模式运行指定镜像
bash 复制代码
docker stop <options> <container_id>	#关闭指定container
bash 复制代码
docker exec <options> <container_id> 	#进入指定容器
docker exec -it <container_id> 			#以交互模式进入指定容器
bash 复制代码
docker pull <image_name>		#从docker hub 里拉取镜像

也可以从Docker Desktop里直接拉取镜像

bash 复制代码
docker push <options> <image_name>		#将本地镜像上传至docker hub,但体积太大的会被拒绝
bash 复制代码
docker commit <options> <container_id> <new_image_name>	#将container转化为image

Docker 可视化

安装VcXsrv,可以看这篇,都是一样的操作。

Docker 使用GPU

确保host主机有Nvidia GPU,下载Nvidia发布的docker images.

可视化rviz、gazebo

当初使用docker就是为了在windows下使用ROS。查阅官方说明[3](#3),在docker container中可视化需要如下操作:

1.docker image 在Ubuntu(WSL2)下创建的

  1. 在 Ubuntu中输入:
bash 复制代码
docker run -it --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" --device=/dev/dri:/dev/dri <docker_image_name> bash



  1. 菜鸟教程 | Docker 教程: https://www.runoob.com/docker/docker-tutorial.html ↩︎

  2. https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers ↩︎

  3. http://wiki.ros.org/docker/Tutorials/GUI ↩︎

相关推荐
时迁2471 小时前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
诡异森林。4 小时前
Docker--Docker网络原理
网络·docker·容器
ALex_zry4 小时前
Docker Macvlan网络配置实战:解决“network already exists“错误
网络·docker·php
IT小辉同学5 小时前
Docker如何更换镜像源提高拉取速度
spring cloud·docker·eureka
matrixlzp5 小时前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij6 小时前
Docker SSH端口转发
docker·ssh
angushine7 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
玄明Hanko8 小时前
生产环境到底能用Docker部署MySQL吗?
后端·mysql·docker
玄明Hanko8 小时前
Quarkus+Docker最全面完整教程:手把手搞定Java云原生
后端·docker·云原生
SimonLiu0098 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器