Docker 配置¶
Docker 是现代开发和部署的核心工具。在机器人开发中,Docker 可以帮你快速搭建一致的开发环境。
1. 什么是 Docker?¶
Docker 是一个容器化平台,把应用和它的依赖打包在一起。
容器 vs 虚拟机:
容器 (Container) 虚拟机 (VM)
┌──────────────┐ ┌──────────────┐
│ App A │ │ App A │
│ Dependencies│ │ Dependencies│
│ 容器运行时 │ │ Guest OS │
├──────────────┤ │ Hypervisor │
│ 主机 OS │ ├──────────────┤
└──────────────┘ │ 主机 OS │
└──────────────┘
轻量、秒启、共享内核 隔离彻底、启动慢、资源占用大
Docker 的核心价值:
- 环境一致:开发、测试、生产环境完全相同
- 快速部署:一条命令启动整个服务栈
- 资源隔离:不同项目互不干扰
- 版本控制:镜像可以版本化管理
2. 安装 Docker¶
# 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
验证安装¶
3. 核心概念¶
镜像(Image)¶
容器(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"]
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:
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 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