跳转至

Docker 配置

Docker 是现代开发和部署的核心工具。在机器人开发中,Docker 可以帮你快速搭建一致的开发环境。

1. 什么是 Docker?

Docker 是一个容器化平台,把应用和它的依赖打包在一起。

容器 vs 虚拟机:

容器 (Container)              虚拟机 (VM)
┌──────────────┐              ┌──────────────┐
│  App A       │              │  App A       │
│  Dependencies│              │  Dependencies│
│  容器运行时    │              │  Guest OS    │
├──────────────┤              │  Hypervisor  │
│  主机 OS      │              ├──────────────┤
└──────────────┘              │  主机 OS      │
                              └──────────────┘
轻量、秒启、共享内核            隔离彻底、启动慢、资源占用大

Docker 的核心价值

  • 环境一致:开发、测试、生产环境完全相同
  • 快速部署:一条命令启动整个服务栈
  • 资源隔离:不同项目互不干扰
  • 版本控制:镜像可以版本化管理

2. 安装 Docker

# 1. 下载 Docker Desktop
#    https://www.docker.com/products/docker-desktop/

# 2. 安装后打开 Docker Desktop

# 3. 设置 → General → 勾选 "Use the WSL 2 based engine"

# 4. 设置 → Resources → WSL Integration → 启用你的 Ubuntu 发行版
# 方法 1:Homebrew
brew install --cask docker

# 方法 2:官网下载
# https://www.docker.com/products/docker-desktop/
# Ubuntu / Debian
sudo apt update
sudo apt install -y 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

# 添加仓库
echo "deb [arch=$(dpkg --print-architecture) 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

# 安装
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 免 sudo 使用 docker
sudo usermod -aG docker $USER
newgrp docker

验证安装

docker --version
docker run hello-world

3. 核心概念

镜像(Image)

镜像是一个只读模板,包含运行应用所需的一切:
- 操作系统
- 运行时环境
- 应用代码
- 依赖库

类比:镜像 ≈ 安装光盘(ISO)

容器(Container)

容器是镜像的运行实例。
一个镜像可以创建多个容器。

类比:容器 ≈ 正在运行的程序

数据卷(Volume)

容器是临时的,删除后数据丢失。
数据卷用于持久化数据。

类比:数据卷 ≈ 外接硬盘

4. 常用命令

镜像操作

# 拉取镜像
docker pull ubuntu:22.04

# 查看本地镜像
docker images

# 删除镜像
docker rmi ubuntu:22.04

# 构建镜像(需要 Dockerfile)
docker build -t myapp:v1 .

容器操作

# 运行容器(交互模式)
docker run -it ubuntu:22.04 bash

# 运行容器(后台模式)
docker run -d --name myapp nginx

# 查看运行中的容器
docker ps

# 查看所有容器(含已停止的)
docker ps -a

# 停止容器
docker stop myapp

# 启动已停止的容器
docker start myapp

# 删除容器
docker rm myapp

# 进入运行中的容器
docker exec -it myapp bash

# 查看容器日志
docker logs myapp

数据卷

# 创建数据卷
docker volume create mydata

# 运行容器并挂载数据卷
docker run -v mydata:/app/data myapp

# 挂载本地目录
docker run -v $(pwd):/app myapp

# 查看数据卷
docker volume ls

5. Dockerfile

Dockerfile 定义了如何构建一个镜像。

# 基础镜像
FROM python:3.10-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["python", "app.py"]
# 构建镜像
docker build -t myapp:v1 .

# 运行
docker run -p 8000:8000 myapp:v1

6. Docker Compose

当你需要同时运行多个服务时(如 Web + 数据库),用 Docker Compose。

# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - db

  db:
    image: postgres:14
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
# 启动所有服务
docker compose up -d

# 查看状态
docker compose ps

# 停止所有服务
docker compose down

7. 机器人开发中的 Docker

# 运行 ROS 环境(免安装)
docker run -it --net=host ros:humble-desktop

# 运行带 GPU 的容器
docker run -it --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04

常见问题

Docker 命令需要 sudo

sudo usermod -aG docker $USER
newgrp docker

镜像拉取慢(中国用户)

# 配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

下一步


← 返回总览 | 下一页:ROS 环境配置 →