一、Ubuntu 安装docker重要概念镜像是制作容器环境的工具容器就是环境。由 Canonical 公司支持的开源操作系统基于 Debian 发行版。它强调用户友好性和桌面体验同时也非常适用于服务器环境。它拥有庞大的社区和官方支持为用户提供了一个图形界面来安装软件对新手更加友好。更加频繁的更新确保了系统的现代性和安全性。1.更新软件包列表, 确保你的本地软件包列表是最新的执行命令sudo apt-get update2.安装必要的软件包以便可以通过 HTTPS 使用存储库sudo apt-get install apt-transport-https ca-certificates curl software-properties-common3.添加 Docker 的官方 GPG 密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg4.设置 Docker 稳定版存储库echo deb [archamd64 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/null5.安装 Docker 引擎sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io验证安装是否成功1.启动docker:sudo systemctl start docker2.运行一个简单的Docker命令来验证是否正确安装了Docker引擎sudo docker run hello-world二、常用命令(以nginx为例)官方仓库可省略不写版本号不写表示获取最新的版本号docker pull nginx2.1 Linux配置镜像站1.在vi编辑器中修改daemon.json内容sudo vi /etc/docker/daemon.json2.默认是命令模式此时无法直接输入文字。按键盘上的i键或insert 进入插入模式此时左下角会显示-- 插入 --就可以修改内容了。下三个镜像站背靠较大的开源项目优先推荐{ registry-mirrors: [ https://docker.m.daocloud.io, https://docker.1panel.live, https://hub.rat.dev ] }输入上述源后按ESC输入:wq!保存退出。3.重启dockersudo service docker restart2.2 运行容器运行容器每次运行docker run都会创建一个全新的容器sudodocker runnginx分离运行可在该窗口下执行其他命令sudo docker run -d nginx查看正在运行的容器sudo docker ps查看所有的包括停止的容器sudo docker ps-a删除容器sudo docker rm 容器名删除正在运行的容器udo docker rm -f 容器名给容器命名sudo docker run -d --name 容器名 nginx临时调试容器当容器停止的时候把该容器删除-it进入控制台与容器交互 sudo docker run -it --rm nginx当容器意外崩溃后的重启策略sudo docker run -d --restart always nginx(一直重启)sudo docker run -d --restart unless-stopped nginx(手动停止后就不会再重启)2.3 调试容器启动已经存在的容器startsudo docker start 容器名创建容器但不启动createsudo docker create 容器名/容器ID查看容器的日志sudo docker logs 容器名/容器ID滚动查看容器的日志followsudo docker logs 容器名/容器ID-f2.4docker挂载卷在 Docker 中使用-v或--mount标志可以将本地目录或者文件挂载到容器中从而让容器能够访问和修改宿主机上的文件。这里我们重点讨论-v和--mount两种常用方式来使用卷volume。1.绑定挂载2.命名卷挂载创建新的挂载卷sudo volume creat nginx_htm新的挂载卷绑定容器内的目录sudo docker run -v nginx_htm:/usr/share/nginx/html nginx查看挂载卷在宿主机的真实地址目录sudo docker volume inspect nginx_html对挂载卷的处理命令sudo docker volume list #查看卷 sudo docker volume rm nginx_html #删除卷 sudo docker volume prune -a #删除所有没有容器的卷2.4构建镜像docker build这是 Docker 构建镜像的核心命令作用是根据Dockerfile中的指令一步步打包依赖环境和代码生成可运行的镜像。sudo bash docker/build.sh三、实际使用案例https://github.com/MaverickPeter/MR_SLAM/tree/main1.在宿主机执行挂载本地 MR_SLAM 并启动容器sudo docker run -it \--name mrslam \--nethost \--privileged \-e DISPLAY$DISPLAY \-v /tmp/.X11-unix:/tmp/.X11-unix \-v /home/zhang/MR_SLAM:/root/MR_SLAM \maverickp/mrslam:noetic \bash参数解释| 参数 | 作用 || -------------------------------------- | ------------------------------------------|| --nethost | 容器和宿主机共用网络ROS Master 直接可用 || --privileged | 容器有更多权限兼容底层设备 || -e DISPLAY$DISPLAY | GUI 程序RViz能显示 || -v /tmp/.X11-unix:/tmp/.X11-unix | GUI 显示 || -v /home/zhang/MR_SLAM:/root/MR_SLAM | **挂载本地源码到容器** |-------------------------------------------------------2. 进入容器 sudo docker exec -it mrslam bash3. 进入容器中挂载的文件时需在最前方添加/root/cd /root/MR_SLAM/Mapping/4. 编译失败报错内容rootzhang-OMEN-Laptop-15-ek0xxx:~/MR_SLAM/Localization# source ./devel/setup.bash rootzhang-OMEN-Laptop-15-ek0xxx:~/MR_SLAM/Localization# catkin_make Base path: /root/MR_SLAM/Localization Source space: /root/MR_SLAM/Localization/src Build space: /root/MR_SLAM/Localization/build Devel space: /root/MR_SLAM/Localization/devel Install space: /root/MR_SLAM/Localization/install #### #### Running command: cmake /root/MR_SLAM/Localization/src -DCATKIN_DEVEL_PREFIX/root/MR_SLAM/Localization/devel -DCMAKE_INSTALL_PREFIX/root/MR_SLAM/Localization/install -G Unix Makefiles in /root/MR_SLAM/Localization/build #### CMake Error: The current CMakeCache.txt directory /root/MR_SLAM/Localization/build/CMakeCache.txt is different than the directory /home/zhang/MR_SLAM/Localization/build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt CMake Error: The source /root/MR_SLAM/Localization/src/CMakeLists.txt does not match the source /home/zhang/MR_SLAM/Localization/src/CMakeLists.txt used to generate cache. Re-run cmake with a different source directory. Invoking cmake failed原因本地 MR_SLAM 曾经在宿主机/home/zhang/MR_SLAM/Localization编译过你现在把本地 MR_SLAM挂载到容器/root/MR_SLAMCMake 生成的build/CMakeCache.txt里记录的是宿主机路径容器里的路径不同 (/root/MR_SLAM/...) → CMake 报错解决方法删除编译好的build,devel,install后 重新在容器内编译rm -rf build devel install