当前位置: 首页 > news >正文

【智能系统项目开发与学习记录】Docker 基础

1️⃣ Docker 是什么?

Docker 是一个开源的应用容器引擎,它能把应用程序和依赖包打包到一个轻量级、可移植的容器中,然后发布到任何 Linux 机器上运行。

为什么用 Docker?

  • 容器间相互隔离(像 iPhone 的 App 一样)
  • 启动快、资源占用低
  • 环境一致性,避免 "我电脑上能跑" 问题

官方网站:

  • Docker 官网
  • Docker Hub 仓库

2️⃣ 在 Ubuntu 22.04 上安装 Docker

# 1. 更新软件包列表
sudo apt update# 2. 安装依赖工具
sudo apt install -y ca-certificates curl gnupg# 3. 创建密钥存储目录
sudo install -m 0755 -d /etc/apt/keyrings# 4. 下载Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg# 5. 添加密钥读取权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg# 6. 添加Docker软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 7. 再次更新包列表
sudo apt update# 8. 安装Docker核心组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 9. 创建docker用户组
sudo groupadd docker# 10. 将当前用户加入docker组
sudo usermod -aG docker $USER# 11. 重启系统使权限生效
sudo reboot

验证安装:

# 查看Docker版本
docker version# 运行测试容器
docker run hello-world

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

3️⃣ Docker 基础操作

镜像操作

# 查看本地镜像
docker images# 搜索镜像
docker search 镜像名# 下载镜像
docker pull 镜像名:标签# 删除镜像
docker rmi 镜像ID或名称

容器操作

# 从镜像创建并启动容器
docker run -it --name 容器名 镜像名 /bin/bash# 列出正在运行的容器
docker ps# 列出所有容器(包括已停止)
docker ps -a# 启动/停止/重启容器
docker start 容器名或ID
docker stop 容器名或ID
docker restart 容器名或ID# 删除容器
docker rm 容器名或ID

容器交互

# 进入已运行的容器(推荐方式)
docker exec -it 容器名或ID /bin/bash# 退出容器但不关闭
按 Ctrl+P+Q# 退出并关闭容器
输入 exit

4️⃣ 制作和发布自己的镜像

方法 1:从容器提交

# 提交容器为新镜像
docker commit -m "描述信息" -a "作者" 容器ID 新镜像名:标签

方法 2:使用 Dockerfile (推荐)

# 1. 创建Dockerfile文件
vim Dockerfile# 2. 编写Dockerfile内容(示例)
FROM debian:latest
MAINTAINER YourName "youremail@example.com"
RUN apt update && apt install -y nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]# 3. 构建镜像
docker build -t 镜像名:标签 .

发布到 Docker Hub

# 1. 登录Docker Hub
docker login -u 你的用户名# 2. 为镜像打标签
docker tag 镜像ID 你的用户名/镜像名:标签# 3. 推送镜像
docker push 你的用户名/镜像名:标签

5️⃣ 数据管理与硬件交互

文件拷贝

# 从容器复制到主机
docker cp 容器ID:容器内路径 主机路径# 从主机复制到容器
docker cp 主机文件路径 容器ID:容器内路径

数据卷 (持久化存储)

# 创建数据卷
docker volume create 卷名# 运行容器并挂载数据卷
docker run -it -v 卷名:/容器内路径 镜像名# 挂载主机目录
docker run -it -v /主机绝对路径:/容器内路径 镜像名

硬件设备挂载

# 挂载USB摄像头
docker run -it --device=/dev/video0 镜像名

6️⃣ 容器图形界面 (GUI)

# 1. 在主机安装X Server工具
sudo apt install -y x11-xserver-utils# 2. 允许所有用户访问X Server
xhost +# 3. 启动带GUI支持的容器
docker run -it --env="DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix 镜像名

7️⃣ 容器日常管理

# 清理停止的容器
docker container prune# 清理无用镜像
docker image prune# 查看容器实时性能
docker stats 容器ID# 查看容器日志
docker logs 容器ID# 查看容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID

8️⃣ 在 Docker 中安装 ROS

ROS1 (Melodic)

# 1. 下载ROS镜像
docker pull ros:melodic# 2. 创建并运行容器
docker run -it --network=host -d -v /tmp/.X11-unix:/tmp/.X11-unix --name melodic -e DISPLAY=$DISPLAY ros:melodic# 3. 进入容器
docker exec -it melodic /bin/bash# 4. 安装ROS桌面完整版
apt update && apt install -y ros-melodic-desktop-full# 5. 测试ROS
source /opt/ros/melodic/setup.bash
rosrun turtlesim turtlesim_node

ROS2 (Humble)

# 1. 下载ROS2镜像
docker pull ros:humble# 2. 创建并运行容器
docker run -it --network=host -d -v /tmp/.X11-unix:/tmp/.X11-unix --name humble -e DISPLAY=$DISPLAY ros:humble# 3. 进入容器
docker exec -it humble /bin/bash# 4. 安装ROS2桌面完整版
apt update && apt install -y ros-humble-desktop-full# 5. 测试ROS2
source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node

💡 实用小贴士

  1. 镜像分层原理:Docker 镜像像洋葱一样分层构建,每层都可以被复用,节省存储空间
  2. 容器与虚拟机区别:容器共享主机内核,启动快、资源占用低;虚拟机则是完整操作系统
  3. 最佳实践:一个容器只运行一个应用,通过 Docker Compose 编排多个容器
  4. 避免每次 sudo:将用户加入 docker 组后记得重启系统

需要我帮你制作一份Docker 常用命令速查表吗?这样你在学习过程中可以随时查看,不用翻笔记!

http://www.dtcms.com/a/392161.html

相关文章:

  • 数据展示方案:Prometheus+Grafana+JMeter 备忘
  • flask获取ip地址各种方法
  • 17.6 LangChain多模态实战:语音图像文本融合架构,PPT生成效率提升300%!
  • MyBatis实战教程:SQL映射与动态查询技巧
  • 在 Windows Docker 中通过 vLLM 镜像启动指定大模型的方法与步骤
  • 分类预测 | Matlab实现SSA-BP麻雀搜索算法优化BP神经网络多特征分类预测
  • GO实战项目:基于 `HTML/CSS/JS + Gin + Gorm + 文心一言API`AI 备忘录应用
  • 数据结构【堆(⼆叉树顺序结构)和⼆叉树的链式结构】
  • 我爱学算法之—— 位运算(下)
  • LeetCode第364题_加权嵌套序列和II
  • 云计算和云手机之间的关系
  • 胡服骑射对中国传统文化的影响
  • leetcode-hot-100 (多维动态规划)
  • Chromium 138 编译指南 Ubuntu 篇:depot_tools安装与配置(三)
  • 在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
  • 小杰机器学习高级(four)——基于框架的逻辑回归
  • 基于AI分类得视频孪生鹰眼图像三维逆变换矫正算法
  • [Tongyi] 智能代理搜索范式 | 决策->行动->观察(循环迭代)
  • FLink:窗口分配器(Window Assigners)指定窗口的类型
  • GO实战项目:流量统计系统完整实现(Go+XORM+MySQL + 前端)
  • 零基础-动手学深度学习-13.10. 转置卷积
  • 【Math】初三第一、二单元测试卷(测试稿)
  • 2.Spring AI的聊天模型
  • 【连载6】 C# MVC 日志管理最佳实践:归档清理与多目标输出配置
  • autodl平台jupyterLab的使用
  • React学习教程,从入门到精通,React 开发环境与工具详解 —— 语法知识点、使用方法与案例代码(25)
  • 【C++】容器进阶:deque的“双端优势” vs list的“链式灵活” vs vector的“连续高效”
  • llm的ReAct
  • C++ 参数传递方式详解
  • 前端实战开发(一):从参数优化到布局通信的全流程解决方案