【项目】-Docker入门实战:从零到一运行FastDDS Shapes Demo

一、什么是Docker?

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中。容器与虚拟机不同,它直接运行在宿主机的操作系统内核上,无需额外的操作系统层,因此启动更快、资源占用更少。

核心概念:

镜像(Image):只读模板,包含运行应用所需的所有文件和配置

容器(Container):镜像的运行实例,可启动、停止、删除

仓库(Registry):存储镜像的地方,如Docker Hub

二、Docker安装验证实战

  1. 安装Docker(Ubuntu 22.04)

更新包索引

sudo apt update

安装依赖包

sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加Docker官方GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加Docker仓库

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装Docker引擎

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io

启动Docker服务

sudo systemctl start docker

sudo systemctl enable docker

将当前用户加入docker组(避免每次sudo)

sudo usermod -aG docker $USER

注销重新登录或执行:

newgrp docker

  1. 验证安装成功

检查Docker版本

docker --version

输出:Docker version 28.2.2, build 28.2.2-0ubuntu1~22.04.1

检查服务状态

sudo systemctl status docker

应该显示 active (running)

运行测试容器

docker run hello-world

看到"Hello from Docker!"说明安装成功

三、加载和运行FastDDS Shapes Demo

  1. 加载本地镜像

进入镜像文件所在目录

cd /opt/fast-dds/pakage/ubuntu-fastdds-shape

加载tar格式的镜像

docker load -i "ubuntu-fastdds-shapes-demo v3.2.2.tar"

输出:Loaded image: ubuntu-fastdds-shapes-demo:v3.2.2

查看已加载的镜像

docker images

应该看到:ubuntu-fastdds-shapes-demo v3.2.2

  1. 配置X11显示(GUI应用必备)

允许Docker访问X11显示

xhost +local:docker

或者允许所有连接(开发环境用)

xhost +

  1. 运行FastDDS Shapes Demo

单机模式(一个容器同时运行发布者和订阅者):

docker run -it --rm

-e DISPLAY=$DISPLAY

-v /tmp/.X11-unix:/tmp/.X11-unix

ubuntu-fastdds-shapes-demo:v3.2.2

分布式模式(多个容器通信):

终端1 - 发布者

docker run -it --rm

-e DISPLAY=$DISPLAY

-v /tmp/.X11-unix:/tmp/.X11-unix

ubuntu-fastdds-shapes-demo:v3.2.2

/bin/bash -c "cd /root && ./entrypoint.bash publisher"

终端2 - 订阅者

docker run -it --rm

-e DISPLAY=$DISPLAY

-v /tmp/.X11-unix:/tmp/.X11-unix

ubuntu-fastdds-shapes-demo:v3.2.2

/bin/bash -c "cd /root && ./entrypoint.bash subscriber"

四、常见问题排查

  1. X11显示问题

检查DISPLAY变量

echo $DISPLAY

应该是 :0 或 :1

如果为空,设置DISPLAY

export DISPLAY=:0

检查X11权限

xhost

应该显示:access control disabled, clients can connect from any host

如果提示权限错误,尝试:

sudo xhost +

  1. 磁盘空间不足

查看磁盘使用情况

df -h

如果根分区空间不足,清理:

清理Docker缓存

docker system prune -a -f

清理系统日志

sudo journalctl --vacuum-time=1d

sudo rm -f /var/log/.log.

sudo rm -f /var/log/*.gz

清理apt缓存

sudo apt clean

sudo apt autoremove --purge -y

  1. 网络问题

如果无法拉取镜像,配置国内镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": [

"https://docker.mirrors.ustc.edu.cn",

"https://hub-mirror.c.163.com"

]

}

EOF

sudo systemctl restart docker

五、Docker常用命令速查

查看运行中的容器

docker ps

查看所有容器(包括已停止的)

docker ps -a

停止容器

docker stop <容器ID或名称>

删除容器

docker rm <容器ID或名称>

删除镜像

docker rmi <镜像ID或名称>

查看容器日志

docker logs <容器ID>

进入运行中的容器

docker exec -it <容器ID> /bin/bash

查看容器资源使用

docker stats

清理所有停止的容器和未使用的镜像

docker system prune

六、FastDDS Shapes Demo使用说明

界面功能

Publisher窗口(发布者):

Shape:选择形状(Square/Circle/Triangle)

Color:选择颜色(Red/Green/Blue/Yellow等)

Size:调整形状大小

Speed:调整移动速度

Start/Stop:开始/停止发布

Subscriber窗口(订阅者):

实时显示接收到的形状

形状会移动、旋转

支持多对多通信

核心概念

Publisher:数据发布者,创建并发送形状信息

Subscriber:数据订阅者,接收并显示形状

Topic:数据主题(Square、Circle、Triangle)

Domain:通信域(默认0)

QoS:服务质量,控制传输可靠性

分布式通信演示

打开多个终端,分别运行发布者和订阅者,可以观察到:

所有订阅者都会收到所有发布者的形状

实时看到形状的创建、移动、删除

演示了DDS的发布-订阅模式

七、总结

通过FastDDS Shapes Demo的实战,我们掌握了Docker的核心操作:

镜像管理:加载、查看、删除镜像

容器运行:启动、停止、进入容器

GUI应用:配置X11显示运行图形界面

问题排查:磁盘空间、网络、权限问题处理

Docker的容器化技术让应用部署变得简单、一致、可移植,是现代开发和运维的必备技能

相关推荐
运维栈记13 小时前
虚拟化网络的根基-网络命名空间
网络·docker·容器
Hellc00715 小时前
Docker网络冲突排查与解决方案:完整指南
网络·docker·容器
hanyi_qwe15 小时前
发布策略 【K8S (三)】
docker·容器·kubernetes
眠りたいです15 小时前
Docker核心技术和实现原理第二部分:docker镜像与网络原理
运维·网络·docker·容器
德育处主任16 小时前
『NAS』在群晖部署图片压缩工具-Squoosh
前端·javascript·docker
Mr. Cao code16 小时前
Docker数据管理:持久化存储最佳实践
java·docker·容器
盛夏52018 小时前
Docker容器化部署SpringBoot+Vue项目:从零到一在阿里云宝塔面板的实践指南
阿里云·docker·云计算
Cyber4K18 小时前
【Kubernetes专项】DockerFile、数据持计划、网络模式及资源配额
运维·网络·云原生·容器·kubernetes
鲨莎分不晴19 小时前
Docker 网络深度解析:打破容器的“孤岛效应”
网络·docker·容器
Zsr102319 小时前
K8s核心组件Pod:基础篇
云原生·容器·kubernetes