Docker 极简入门:从零到实践的全攻略

前言:为什么你的下一个项目一定要用Docker?
  • 目标读者: 开发人员、运维新手、学生,以及所有听说过Docker但不知从何入手的人。

  • 核心痛点:

    • "在我机器上能跑,为什么到你那就不行?"------环境不一致问题。

    • 配置开发环境耗时费力,新人上手成本高。

    • 依赖冲突、版本混乱。

  • Docker的承诺: "一次构建,到处运行"。通过容器化技术,将应用及其所有依赖打包在一个标准化的单元中。


第一部分:概念篇------理解"集装箱"革命

第一章:Docker到底是什么?
  • 1.1 一个生动的比喻:集装箱

    • 传统运输(裸机/虚拟机) vs 集装箱运输(Docker)。

    • 镜像: 集装箱的蓝图。

    • 容器: 运行中的集装箱实例。

    • 仓库: 存放蓝图的仓库。

  • 1.2 Docker与虚拟机的本质区别

    • 架构图对比:虚拟机需要Guest OS,Docker直接利用主机内核。

    • 核心优势:启动速度极快、资源消耗极低、性能接近原生

第二章:安装Docker,迈出第一步
  • 2.1 在Windows/macOS上安装Docker Desktop

    • 简单步骤和安装后验证。
  • 2.2 在Linux上安装Docker Engine

    • 以Ubuntu为例的安装命令。
  • 【实战操作1】:验证安装成功

    bash

    复制代码
    docker --version
    docker run hello-world
    • 解读 hello-world 命令的输出,理解Docker的工作流程。

第二部分:基础篇------驾驭核心三要素

第三章:镜像------应用的模板
  • 3.1 获取镜像:docker pull

    • 从Docker Hub拉取官方镜像(如Nginx, Redis, Python)。

    • 【实战操作2】: docker pull nginx:latest

  • 3.2 管理镜像:docker imagesdocker rmi

    • 查看本地镜像列表,删除无用镜像。
第四章:容器------运行的实例
  • 4.1 核心生命周期命令

    • docker run:从镜像创建并启动容器。

      • 常用参数:-d(后台运行)、-p(端口映射)、-v(数据卷)、--name(命名容器)。
    • docker ps:查看运行中的容器(加 -a 查看所有)。

    • docker stop / docker start:停止/启动容器。

    • docker rm:删除已停止的容器。

  • 【实战操作3】:运行你的第一个Nginx服务器

    bash

    复制代码
    # 在后台运行nginx,并将主机的8080端口映射到容器的80端口
    docker run -d -p 8080:80 --name my-nginx nginx
    • 打开浏览器访问 http://localhost:8080,看到Welcome to Nginx页面。
第五章:Dockerfile------构建自定义镜像的配方
  • 5.1 Dockerfile核心指令详解

    • FROM:指定基础镜像。

    • WORKDIR:设置工作目录。

    • COPY / ADD:复制文件到镜像。

    • RUN:执行命令(常用于安装依赖)。

    • EXPOSE:声明运行时容器提供的端口。

    • CMD / ENTRYPOINT:指定容器启动时运行的命令。

  • 【实战代码4】:编写一个简单的Python应用Dockerfile

    dockerfile

    复制代码
    # 使用官方Python运行时作为父镜像
    FROM python:3.9-slim
    
    # 设置工作目录为 /app
    WORKDIR /app
    
    # 将当前目录内容复制到容器的 /app 下
    COPY . /app
    
    # 安装 requirements.txt 中指定的任何所需包
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 使端口 80 可供此容器外的环境使用
    EXPOSE 80
    
    # 在容器启动时运行 app.py
    CMD ["python", "app.py"]
  • 5.2 构建镜像:docker build

    • 【实战操作5】: docker build -t my-python-app .

第三部分:实战篇------解决真实世界问题

第六章:数据持久化------让容器状态得以保留
  • 6.1 问题: 容器内的数据在容器删除后会丢失。

  • 6.2 解决方案:数据卷

    • 绑定挂载: 将主机目录挂载到容器。

      • docker run -v /path/on/host:/path/in/container ...
    • 命名卷: 由Docker管理的卷,更易备份和迁移。

      • docker volume create my-vol

      • docker run -v my-vol:/path/in/container ...

  • 【实战操作6】:为MySQL数据库配置数据卷

    bash

    复制代码
    docker run -d --name mysql-db \
        -e MYSQL_ROOT_PASSWORD=my-secret-pw \
        -v mysql_data:/var/lib/mysql \ # 使用命名卷持久化数据
        mysql:8.0
第七章:网络互联------让容器彼此对话
  • 7.1 默认网络: 容器默认可以相互通过IP地址访问。

  • 7.2 自定义网络: 更好的隔离和DNS解析(容器名即主机名)。

    • docker network create my-app-network

    • docker run --network my-app-network --name my-app ...

  • 【实战操作7】:创建一个Python应用连接Redis的微服务

    bash

    复制代码
    # 1. 创建网络
    docker network create app-net
    
    # 2. 启动Redis容器,加入网络
    docker run -d --name redis-server --network app-net redis
    
    # 3. 启动Python应用容器,加入同一网络
    docker run -d --name python-app --network app-net -p 5000:5000 my-python-app
    • 在Python代码中,可以直接通过 redis-server 这个主机名连接到Redis。
第八章:Docker Compose------一键启动多容器应用
  • 8.1 为什么需要Compose? 简化多容器应用的管理和启动。

  • 8.2 编写 docker-compose.yml 文件

    • version:指定版本。

    • services:定义各个服务(容器)。

    • networks / volumes:定义网络和数据卷。

  • 【实战代码8】:将Web应用和数据库编排在一起

    yaml

    复制代码
    version: '3.8'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        depends_on:
          - redis
        networks:
          - app-net
    
      redis:
        image: "redis:alpine"
        networks:
          - app-net
        volumes:
          - redis-data:/data
    
    volumes:
      redis-data:
    networks:
      app-net:
  • 8.3 常用命令

    • docker-compose up -d:启动所有服务。

    • docker-compose down:停止并移除所有服务。

    • docker-compose logs:查看日志。


第四部分:项目实战篇------融会贯通

第九章:综合实战:容器化一个全栈应用
  • 场景: 一个简单的Vue.js前端 + Flask后端 + MySQL数据库的全栈项目。

  • 步骤:

    1. 后端容器化: 编写后端的Dockerfile并构建镜像。

    2. 前端容器化: 使用Nginx服务构建好的静态文件,编写Dockerfile。

    3. 数据库配置: 使用官方MySQL镜像,配置数据卷。

    4. 编写终极 docker-compose.yml 将三个服务编排在一起,定义依赖关系和网络。

    5. 一键运行: 只需 docker-compose up -d,整个应用就在隔离的环境中运行起来。


第五部分:总结与进阶

第十章:最佳实践与小贴士
  • 10.1 编写高效的Dockerfile

    • 使用 .dockerignore 文件。

    • 利用构建缓存,合理安排指令顺序。

    • 一个容器只运行一个进程。

  • 10.2 日常使用技巧

    • docker exec -it <container> bash:进入正在运行的容器。

    • docker logs <container>:查看容器日志。

    • 清理无用镜像和容器:docker system prune

第十一章:总结与后续学习路径
  • 回顾Docker核心价值: 环境标准化、隔离、简化部署。

  • 你已经能够: 构建镜像、运行容器、管理数据与网络、编排多服务应用。

  • 下一步可以探索:

    • Docker Hub和镜像仓库: 分享你的镜像。

    • CI/CD: 在自动化流程中使用Docker。

    • 云原生与Kubernetes: 学习如何在生产环境中管理和编排大量容器。

相关推荐
雨大王5121 分钟前
工业生产执行系统(MES)在汽车制造行业的应用案例
运维·人工智能
Haooog11 分钟前
Docker面试题(不定时更新)
java·docker·面试
Awkwardx14 分钟前
Linux网络编程—数据链路层
linux·运维·网络
树下水月41 分钟前
docker 启动后 如何通过对应的进程 找docker-compose.yaml 编排文件
运维·docker·容器
凯子坚持 c1 小时前
Docker 网络管理深度解析与实践指南
运维·docker·容器
kevin_水滴石穿1 小时前
在镜像生成时从内网获取字体安装包并配置
linux·docker·容器
liwenzhen20051 小时前
Linux OOM 问题之 DMSERVER 受害者
linux·运维·oom
人生匆匆1 小时前
部署使用rathole内网穿透
linux·运维·docker
Prada-88081 小时前
dig常用命令
linux·运维·服务器
boy快快长大1 小时前
下载Dokcer安装到另一台无网CentOS
linux·运维·centos