Ubuntu Docker精简版快速上手指南

一、环境准备与基础安装

在Ubuntu系统上部署Docker精简版需完成三步配置:首先通过apt更新系统包索引,确保获取最新版本依赖;其次安装Docker核心组件,推荐使用官方维护的docker.io包,该版本经过社区充分验证且兼容性良好;最后配置用户权限,将当前用户加入docker用户组以避免每次操作需sudo提权。

验证安装成功后,建议立即执行docker version检查客户端与服务端通信状态。对于开发环境,可进一步配置国内镜像加速源,在/etc/docker/daemon.json中添加:

  1. {
  2. "registry-mirrors": ["https://<镜像加速器地址>"]
  3. }

重启服务后通过docker info查看镜像拉取速度是否提升。

二、核心概念与基础操作

容器化开发涉及三个关键概念:镜像作为应用模板,容器作为运行实例,仓库作为镜像存储中心。基础操作包含四步工作流:

  1. 镜像管理:使用docker pull从公共仓库获取镜像,通过docker images查看本地镜像列表,docker rmi清理无用镜像
  2. 容器生命周期docker run创建并启动容器,docker stop/start控制运行状态,docker rm删除停止的容器
  3. 进程监控docker ps查看运行中容器,docker logs获取日志输出,docker exec进入容器交互界面
  4. 资源限制:通过-m参数限制内存,--cpus控制CPU配额,防止单个容器占用过多系统资源

以Nginx服务为例,典型部署流程如下:

  1. # 拉取官方镜像
  2. docker pull nginx:alpine
  3. # 启动容器并映射端口
  4. docker run -d -p 8080:80 --name webserver nginx:alpine
  5. # 验证服务
  6. curl http://localhost:8080

三、数据持久化方案

容器默认存储具有临时性,需通过两种机制实现数据持久化:

  1. 数据卷(Volumes):由Docker管理的专用存储空间,通过docker volume create预先创建,在容器启动时通过-v参数挂载。具有三大优势:独立于容器生命周期、支持多容器共享、可跨主机迁移
  2. 主机目录挂载:直接将宿主机目录映射到容器内部,适用于开发环境代码热更新场景。需注意权限配置,建议使用--mount type=bind,source=/host/path,target=/container/path语法

实战案例:MySQL数据库持久化配置

  1. # docker-compose.yml示例
  2. version: '3'
  3. services:
  4. db:
  5. image: mysql:5.7
  6. volumes:
  7. - db_data:/var/lib/mysql
  8. environment:
  9. MYSQL_ROOT_PASSWORD: example
  10. volumes:
  11. db_data:

四、网络配置进阶

容器网络包含四种模式:

  1. 桥接模式(bridge):默认模式,容器通过虚拟网桥通信
  2. 主机模式(host):共享宿主机网络命名空间,性能最佳但安全性较低
  3. 容器模式(container):与其他容器共享网络配置
  4. 无网络模式(none):禁用所有网络功能

端口映射通过-p参数实现,支持三种格式:

  • -p 8080:80:指定宿主机端口映射
  • -p 8080:随机宿主机端口映射
  • -P:随机映射所有暴露端口

自定义网络配置示例:

  1. # 创建自定义网络
  2. docker network create app_network
  3. # 启动容器并加入网络
  4. docker run -d --network app_network --name api_service python:3.9-slim
  5. docker run -d --network app_network --name db_service mysql:5.7
  6. # 容器间可直接通过服务名通信
  7. # api_service容器内可访问db_service:3306

五、编排工具实战

Docker Compose通过YAML文件定义多容器应用,核心组件包括:

  1. 服务定义:每个服务对应一个容器镜像,可配置构建参数、环境变量、依赖关系等
  2. 网络配置:定义内部网络拓扑,支持自定义网络驱动
  3. 卷管理:声明数据卷及其挂载点
  4. 扩展选项:支持容器副本数、重启策略、资源限制等高级配置

以Django应用为例的完整配置:

  1. version: '3.8'
  2. services:
  3. web:
  4. build: .
  5. command: python manage.py runserver 0.0.0.0:8000
  6. volumes:
  7. - .:/code
  8. ports:
  9. - "8000:8000"
  10. depends_on:
  11. - db
  12. db:
  13. image: postgres:13
  14. environment:
  15. - POSTGRES_DB=mydatabase
  16. - POSTGRES_USER=myuser
  17. - POSTGRES_PASSWORD=mypassword
  18. volumes:
  19. - postgres_data:/var/lib/postgresql/data
  20. volumes:
  21. postgres_data:

六、镜像构建最佳实践

编写高效Dockerfile需遵循六项原则:

  1. 基础镜像选择:优先使用Alpine等精简镜像,减少层级和体积
  2. 合并指令:将多个RUN指令合并为单层,减少镜像层数
  3. 依赖管理:先复制依赖文件再执行安装,利用缓存机制加速构建
  4. 用户权限:非必要不使用root用户运行进程
  5. 多阶段构建:分离构建环境和运行环境,仅保留最终产物
  6. 标签管理:为镜像添加语义化版本标签,便于版本控制

优化后的Dockerfile示例:

  1. # 构建阶段
  2. FROM python:3.9-slim as builder
  3. WORKDIR /app
  4. COPY requirements.txt .
  5. RUN pip install --user -r requirements.txt
  6. # 运行阶段
  7. FROM python:3.9-slim
  8. WORKDIR /app
  9. COPY --from=builder /root/.local /root/.local
  10. COPY . .
  11. ENV PATH=/root/.local/bin:$PATH
  12. CMD ["python", "app.py"]

七、安全加固建议

容器安全需重点关注五个方面:

  1. 镜像来源:仅使用可信仓库的官方镜像,定期扫描漏洞
  2. 运行时隔离:启用Seccomp、AppArmor等安全配置文件
  3. 资源限制:防止容器资源耗尽攻击
  4. 网络隔离:使用自定义网络划分安全域
  5. 日志监控:集中收集容器日志,设置异常告警

安全扫描工具使用示例:

  1. # 使用Trivy扫描镜像漏洞
  2. trivy image python:3.9-slim
  3. # 生成Seccomp配置文件
  4. docker run --security-opt seccomp=default.json nginx

通过系统掌握上述技术要点,开发者可在Ubuntu环境下快速构建高效、安全的容器化应用。建议从简单服务开始实践,逐步过渡到复杂分布式系统开发,最终形成完整的容器化开发运维体系。