第 6 節

Docker命令學習

0瀏覽次數0訪問次數--跳出率--平均停留

參考文檔

https://www.runoob.com/docker/docker-tutorial.html

常用命令

常用的標紅了,偶爾用的標綠了,其他了解就行。

命令描述示例
docker run創建並啓動一個新的容器。docker run -it ubuntu bash
docker build通過指定的 Dockerfile 創建一個新的鏡像。docker build -t myimage .
docker pull從 Docker 倉庫拉取鏡像。docker pull ubuntu
docker push將本地鏡像推送到 Docker 倉庫。docker push myimage
docker stop停止一個正在運行的容器。docker stop container_id
docker start啓動一個已經存在的容器。docker start container_id
docker restart重新啓動容器。docker restart container_id
docker ps列出當前正在運行的容器。docker ps
docker rm刪除一個或多個停止的容器。docker rm container_id
docker exec在一個正在運行的容器中執行命令。docker exec -it container_id bash
docker logs查看容器的日誌輸出。docker logs container_id
docker images列出本地所有鏡像。docker images
docker rmi刪除一個或多個鏡像。docker rmi myimage
docker network管理 Docker 網絡。docker network ls
docker volume管理 Docker 數據卷。docker volume ls
docker-compose up啓動 docker-compose.yml 中定義的所有服務。docker-compose up
docker-compose down停止並移除 docker-compose.yml 中定義的所有服務及其相關資源。docker-compose down
docker info顯示 Docker 系統的詳細信息。docker info
docker stats查看正在運行的容器的實時資源使用情況(CPU、內存等)。docker stats
docker inspect查看容器或鏡像的詳細信息(JSON 格式)。docker inspect container_id
docker save將一個鏡像保存為 tar 文件。docker save -o myimage.tar myimage
docker load從 tar 文件中加載鏡像。docker load -i myimage.tar
docker tag為鏡像添加標籤(tag)。docker tag myimage myimage:v1
docker buildx build使用 Buildx 構建多架構鏡像。docker buildx build -t myimage .
docker buildx create創建一個新的 Buildx 構建實例。docker buildx create --use
docker buildx ls列出所有可用的 Buildx 構建實例。docker buildx ls
docker buildx use設置當前的 Buildx 構建實例。docker buildx use mybuilder
docker buildx bake使用 Bake 文件批量構建鏡像。docker buildx bake -f bake.hcl
docker buildx build --push構建鏡像並推送到鏡像倉庫。docker buildx build --push -t myimage .
docker buildx build --platform構建鏡像併為多個平台生成支持。docker buildx build --platform linux/amd64,linux/arm64 -t myimage .

run命令的參數(非常重要)

參數/配置功能説明重要性與參考依據
--name=ros_jazzy_opencv411_cuda128_cudnn971_noble指定容器名稱,便於後續管理替代隨機生成的容器名。
--gpus all允許容器訪問宿主機所有GPU資源,需NVIDIA驅動支持用於CUDA加速等GPU依賴任務。
-e NVIDIA_DRIVER_CAPABILITIES=all啓用NVIDIA驅動的全部功能(如CUDA、圖形渲染)確保容器內GPU功能完整67。
-dit組合參數:- -d:後台運行容器(Detached模式)- -i:保持標準輸入(STDIN)開放- -t:分配偽終端(TTY)允許容器在後台運行並支持交互操作。
--privileged賦予容器完全主機權限(可訪問設備、內核模塊等)用於需要直接操作硬件的場景(如訪問USB設備),但存在安全風險。
--net=host共享宿主機網絡命名空間(容器使用宿主機IP和端口)簡化網絡配置,無NAT,這樣的話,網絡效率更高,局域網設備更容易發現。
--group-add audio--group-add video--group-add dialout將容器用户加入宿主機用户組:- audio:音頻設備訪問- video:視頻設備訪問- dialout:串口設備訪問避免權限問題(如避免無法調用攝像頭、麥克風)。
-e DISPLAY=$DISPLAY-e XAUTHORITY=/home/tungchiahui/.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb配置圖形顯示環境:- 綁定宿主機顯示接口(X11或Wayland)- 設置GUI應用渲染後端支持容器內運行圖形界面應用(如OpenCV可視化)。
-v /tmp/.X11-unix:/tmp/.X11-unix:rw-v /dev/dri:/dev/dri掛載宿主機圖形設備:- X11套接字目錄- 直接渲染管理器(DRI)設備實現容器內圖形顯示。
-v $HOME/.Xauthority:/home/tungchiahui/.Xauthority:ro掛載X11認證文件(只讀)確保容器有權連接宿主機顯示服務。
-v /run/user/1000/wayland-0-v /run/user/1000掛載Wayland顯示協議相關目錄支持Wayland協議的圖形顯示。
--ulimit nofile=1024:524288設置進程**最大可打開文件數(nofile)**的方式,用於控制容器或進程運行時的文件句柄數量限制。--ulimit <限制類型>=<軟限制>:<硬限制>如果默認限制太小,可能會出現 "too many open files" 的錯誤。所以在容器運行或系統服務啓動時,需要調大這個值。--ulimit nofile=4096:65536
-v /home/tungchiahui:/home/tungchiahui掛載宿主機用户目錄到容器內同名路徑實現宿主機與容器間文件共享(如代碼、數據持久化)。
-w /home/tungchiahui設置容器啓動後的默認工作目錄直接進入項目路徑,方便執行命令2324。
tungchiahui/ros-opencv:jazzy-411-cuda128-cudnn971-noble鏡像名稱指定鏡像及標籤,包含:- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1提供預配置的深度學習與機器人開發環境。

下方這條命令一定要在普通用户下運行,不要在root用户下運行,其實加不加sudo加不加sudo -E都無所謂。

用户已經被加到docker組了,不用sudo也行跑,其次,sudo運行的話,你的$HOME變量也不會變,更何況加上-E的話,這樣你的$HOME更不可能變了。

sudo docker run --name=ros_opencv_cuda \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e DISPLAY=$DISPLAY \
-dit \
--privileged \
--net=host \
--group-add audio \
--group-add video \
--group-add dialout \
-e XAUTHORITY=$HOME/.Xauthority \
-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
-e QT_QPA_PLATFORM=xcb \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-v /dev/dri:/dev/dri \
-v $HOME/.Xauthority:$HOME/.Xauthority:ro \
-v /run/user/$(id -u)/wayland-0:/run/user/$(id -u)/wayland-0 \
-v /run/user/$(id -u):/run/user/$(id -u) \
-v $HOME:$HOME \
-w $HOME \
tungchiahui/ros-opencv:humble-411-cuda128-cudnn970-jammy

注意:

  1. NVIDIA_DRIVER_CAPABILITIES=all --gpus all沒有英偉達顯卡請註釋。
  2. --name後面請自己為容器起名。
  3. 最後一行倉庫名稱請你自己找對應的鏡像填上。
  4. ROS1在Fedora發行版下會爆內存,需要添加上下面這個參數,如果你不是Fedora和ROS1,請不要加
--ulimit nofile=1024:524288 \
  1. 如果想用當前用户登陸容器,可以加上下面這幾條,但非常非常不建議**.**
--user $(id -u):$(id -g) \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
音乐页