因為最近項目必須要使用指定版本的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博客