因为最近项目必须要使用指定版本的solidworks和maxwell(都只能在win系统上使用), 且目前的ubuntu容器是没有桌面的,导致我运行不了一些带图形的ros2功能。无奈之下,决定使用docker-compose写一下配置文件,彻底解决问题。
docker的基本操作和ros2安装看这篇文章的第一、二个专题:
实验环境搭建集锦-CSDN博客
dockerfile和docker-compose.yml的区别
dockerfile构建镜像,但没有运行镜像。需要用docker run运行
docker-compose.yml构建镜像也运行镜像,更适合多个镜像容器的编辑。编辑后直接使用 sudo docker compose up构建并运行(前提:默认文件名为docker-compose.yml)
使用docker-compose.yml安装windows-in-docker
建立一个docker-compose-win.yml文件
version: "3"
services:windows:image: dockurr/windowscontainer_name: windowsdevices:- /dev/kvmcap_add:- NET_ADMINports:- 8006:8006- 3389:3389/tcp- 3389:3389/udpstop_grace_period: 2mrestart: on-failureenvironment:VERSION: win10RAM_SIZE: 8GCPU_CORES: 4DISK_SIZE: 100G
尽量不要使用下面的目录挂载,没啥用不说,还总给报错。而且putty或者filezilla也是不管用的,因为docker容器本质上都是linux系统,只不过运行的可能会是win/ubuntu/其他。
volumes: - /mnt/sharedisk/win10:C:\\User
这里开命令行证实一下,docker容器里并没有C:\\User这种路径,只有
如果在主机上运行docker cp,主机上的文件也只会复制到底层linux的文件目录下
docker cp docker-compose-linux.yml windows:/tmp
在宿主机上安装docker-compose并运行:
yay -S docker-compose
sudo docker compose -f docker-compose-win.yml up
如果每次都重新运行一次sudo docker compose -f docker-compose-win.yml up,会更换一个新的container id,但是已经安装好的软件还是会被保留的,因为并没有改变名字或者里面的设置。
所以每次需要打开的时候,直接运行
sudo docker start 容器id
想传输文件/下载的话,我一般会用百度网盘。目前用着还没啥问题,体验感很好。像我这里的port设置的是8006,所以我访问的网址就是主机网址:8006,http就可以登陆上去
另外,也可以通过安装支持RDP远程访问的软件, 在软件服务器地址和端口内容中分别填写IP地址
和tcp/udp的port,在我这里是3389(我安装的软件是Remmina)。用户名填写为docker,密码不填写
根据Docker的设计,卷的大小通常是在创建时确定的,且默认情况下不支持动态扩容。因此,直接通过修改docker-compose文件来扩展现有卷的大小是不可能的,除非使用特定的存储驱动或文件系统支持动态调整。如果想要把这个容器从100G扩大到120G或者缩小,需要
sudo docker compose -f docker-compose-win.yml down -v //删除卷
sudo docker rm 容器id //直接删除容器
sudo docker compose -f docker-compose-win.yml up//重建资源
其他方法相对来说麻烦很多,这里就不提了。唯一的问题就在于需要重新安装各种软件,这个会有些麻烦,所以我最后还是没舍得再折腾扩容,100g足够跑solidworks,maxwell和comsol,还是很够用的。
使用docker-compose.yml安装ubuntu-desktop
建立一个docker-compose-linux.yml文件
version: "3"
services:ubuntu:image: colinchang/ubuntu-desktopcontainer_name: ubuntu_desktopshm_size: 1gports:- "主机地址:6901:6901" #这么写可以限制本地访问environment:RAM_SIZE: 4GCPU_CORES: 2DISK_SIZE: 80GVNC_PW: 123456user: rootrestart: always目前的用户名是kasm_user,密码是123456
输入以下命令:
sudo docker compose -f docker-compose-linux.yml up
正在构建,需要保持网络畅通
可以先登陆上桌面,创建新的用户后,修改一下文件,让它不再使用root登陆就可以加强安全性。这个登陆用的用户名在没有创建新用户之前是无法通过文件被改变的。
另外就是个人发现,如果
ports:- 6901:6901
则firefox和chrome都可以通过https+本地路径+端口登陆上去,注意这里必须换成https,但是firefox登陆上去会报错,显示无法查看剪切板的内容
如果
ports:- "主机地址:6901:6901"
则只有chrome可以登陆上去,但不会有报错。最后放张图~
目前电脑上有的容器可以通过sudo docker ps -a命令来查看
剩下就都是老生常谈了,关于ros2安装的部分可以移步这篇文章
实验环境搭建集锦_isaac lab pycharm-CSDN博客