Docker学习
2026/7/21 17:16:49 网站建设 项目流程

一、Ubuntu 安装docker

重要概念:镜像是制作容器(环境)的工具,容器就是环境
由 Canonical 公司支持的开源操作系统,基于 Debian 发行版。它强调用户友好性和桌面体验,同时也非常适用于服务器环境。

它拥有庞大的社区和官方支持,为用户提供了一个图形界面来安装软件,对新手更加友好。更加频繁的更新,确保了系统的现代性和安全性。

1.更新软件包列表, 确保你的本地软件包列表是最新的,执行命令:

sudo apt-get update

2.安装必要的软件包,以便可以通过 HTTPS 使用存储库:

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


3.添加 Docker 的官方 GPG 密钥:

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


4.设置 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


5.安装 Docker 引擎:

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

验证安装是否成功

1.启动docker:

sudo systemctl start docker

2.运行一个简单的Docker命令来验证是否正确安装了Docker引擎:

sudo docker run hello-world

二、常用命令(以nginx为例)

官方仓库可省略不写,版本号不写表示获取最新的版本号

docker pull nginx

2.1 Linux配置镜像站

1.在vi编辑器中修改daemon.json内容

sudo vi /etc/docker/daemon.json

2.默认是命令模式,此时无法直接输入文字。按键盘上的i键(或insert ),进入插入模式,此时左下角会显示-- 插入 --,就可以修改内容了。下三个镜像站背靠较大的开源项目,优先推荐

{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.1panel.live", "https://hub.rat.dev" ] }

输入上述源后按ESC,输入:wq!保存退出。

3.重启docker

sudo service docker restart

2.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 调试容器

启动已经存在的容器(start):sudo docker start 容器名

创建容器但不启动(create):sudo docker create 容器名/容器ID

查看容器的日志:sudo docker logs 容器名/容器ID

滚动查看容器的日志(follow):sudo docker logs 容器名/容器ID-f

2.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/main)

1.在宿主机执行:挂载本地 MR_SLAM 并启动容器
sudo docker run -it \
--name mrslam \
--net=host \
--privileged \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /home/zhang/MR_SLAM:/root/MR_SLAM \
maverickp/mrslam:noetic \
bash

参数解释:
| 参数 | 作用 |
| -------------------------------------- | ------------------------------------------|
| `--net=host` | 容器和宿主机共用网络,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 bash
3. 进入容器中挂载的文件时(需在最前方添加/root/):cd /root/MR_SLAM/Mapping/


4. 编译失败

报错内容:

root@zhang-OMEN-Laptop-15-ek0xxx:~/MR_SLAM/Localization# source ./devel/setup.bash root@zhang-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_SLAM

  • CMake 生成的build/CMakeCache.txt里记录的是宿主机路径

  • 容器里的路径不同 (/root/MR_SLAM/...) → CMake 报错

解决方法:删除编译好的build,devel,install后 重新在容器内编译

rm -rf build devel install

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询