1 創建docker容器
使用鏡像osrf/ros:humble-desktop-full-jammy創建并運行容器
sudo docker run -it --name ros2_humble??osrf/ros:humble-desktop-full-jammy /ros_entrypoint.sh bash
docker run -it -v d:\docker\ros2_humble:/root/ros2_ws osrf/ros:humble-desktop-full-jammy /ros_entrypoint.sh bash
Docker ps -a
Docker start ros2_humble_test
docker exec -it ros2_humble_test /bin/bash
docker cp hello.c ros2_humble_test:/communication/src/timestamp/src/hello.c
2 拷貝文件到 docker 容器
3 vscode 編輯docker 中文件
4 x11 掛接docker
5 docker 掛接數據
docker run -d -v /local/path:/container/path <image_name>
6 Maboxterm 連接docker 容器
apt update && apt install -y net-tools
service ssh status
netstat -tuln | grep 22
7 掛載一個卷
docker run -it -v d:\docker\ros2_humble:/communication/src/timestamp --name ros2_humble?osrf/ros:humble-desktop-full-jammy /ros_entrypoint.sh bash
cd ~/communication/src
ros2 pkg create --build-type ament_cmake --license Apache-2.0 my_cpp_package --dependencies rclcpp std_msgs
在 Docker 中,你可以將運行中的容器保存為一個新的鏡像,以便后續可以基于這個鏡像快速創建新的容器。這個過程通常使用 docker commit 命令來完成。
使用 docker commit 保存容器為鏡像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
CONTAINER:要保存的容器的名稱或 ID。
REPOSITORY:目標鏡像的倉庫名稱(可選)。
TAG:目標鏡像的標簽(可選,默認為 latest)。
示例
假設你有一個正在運行的容器,名稱為 ros2_humble,你可以使用以下命令將其保存為一個新的鏡像:
docker commit ros2_humble my_ros2_humble_image
ros2_humble 是容器的名稱。
my_ros2_humble_image 是新鏡像的名稱。
如果你想為鏡像指定一個標簽,可以使用以下命令:
docker commit ros2_humble my_ros2_humble_image:v1
my_ros2_humble_image:v1 表示鏡像名稱為 my_ros2_humble_image,標簽為 v1。
高級選項
docker commit 還支持一些高級選項,例如設置作者信息、配置容器的運行參數等。
docker commit --author "Your Name <your.email@example.com>" ros2_humble my_ros2_humble_image:v1
配置容器的運行參數
你可以通過 --change 選項來配置容器的運行參數,例如設置默認的命令或環境變量。例如:
docker commit --change "CMD [\"/ros_entrypoint.sh\", \"bash\"]" ros2_humble my_ros2_humble_image:v1
示例:保存并運行新的鏡像
保存容器為鏡像:
docker commit ros2_humble my_ros2_humble_image:v1
查看新鏡像:
docker images
你應該會看到 my_ros2_humble_image:v1 出現在鏡像列表中。
基于新鏡像運行容器:
docker run -it --name new_ros2_humble my_ros2_humble_image:v1 /ros_entrypoint.sh bash
注意事項
鏡像大小:
使用 docker commit 創建的鏡像會包含容器的所有更改,包括文件系統的變化和運行時的狀態。因此,生成的鏡像可能會比原始鏡像大很多。
如果你希望生成更輕量的鏡像,建議使用 Dockerfile。
鏡像的可移植性:
docker commit 創建的鏡像僅包含當前容器的狀態,不包含構建過程中的上下文信息(如 Dockerfile 中的指令)。因此,這種鏡像在其他環境中可能不如通過 Dockerfile 構建的鏡像靈活。
鏡像的版本管理:
建議為鏡像添加版本標簽(如 v1、v2 等),以便更好地管理不同版本的鏡像。
總結
docker commit 是一個非常方便的工具,可以快速將運行中的容器保存為一個新的鏡像。然而,為了更好地管理鏡像和確保可移植性,建議在可能的情況下使用 Dockerfile 來構建鏡像。如果你只是需要快速保存當前容器的狀態,docker commit 是一個不錯的選擇。