Docker 挂载卷并保存为容器

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 是一个不错的选择。

相关推荐
KIHU快狐1 小时前
KIHU快狐|台式液晶监视器桌面摆放药店用药安全宣传小屏幕
容器
岁岁种桃花儿1 小时前
kubenetes从入门到上天系列第十四篇:Kubernetes的持久化存储
云原生·容器·kubernetes
糟糕喔2 小时前
harbor私有仓库搭建
运维·docker·云原生·容器·kubernetes
就叫飞六吧7 小时前
K8s 端口暴露:集群统一暴露 vs 单 Pod 暴露
云原生·容器·kubernetes
执笔为剑7 小时前
docker环境升级数据库
数据库·docker·容器
于眠牧北8 小时前
ubuntu22.04安装docker以及安装过程中报错解决方法
运维·docker·容器
FriendshipT8 小时前
算法部署知识点:TensorRT、Tensorflow、Flask、Docker、TFLite
算法·docker·flask·tensorflow
摇滚侠10 小时前
虚拟机部署龙虾 OpenClaw,VMware 安装 Linux CentOS 虚拟机操作系统,部署 Docker,部署 OpenClaw
linux·docker·centos
SuniaWang10 小时前
Vue 项目 Docker 多阶段构建部署指南(阿里云)
vue.js·阿里云·docker
AI成长日志11 小时前
【agent专栏】Agent服务化与性能优化——Docker容器化、并发处理、成本控制
docker·容器·性能优化