学习docker!!!

发布于:2025-02-14 ⋅ 阅读:(8) ⋅ 点赞:(0)


零基础 Docker 学习路线

第 1 章:Docker 到底是什么?
  1. 为什么需要 Docker?
    • 问题背景:开发环境(代码)和生产环境(服务器)不一致,导致“在我电脑上能运行,到服务器就报错”。
    • 传统虚拟机(VM)的缺点
      • 占用资源多(每个 VM 都要装完整操作系统)
      • 启动慢(分钟级)
    • Docker 的解决方案
      • 容器化:将应用 + 依赖打包成一个轻量级、可移植的“容器”。
      • 容器共享宿主机的操作系统内核,秒级启动。
  2. 核心概念图解
    • 镜像(Image):像“安装包”,包含运行程序所需的一切(代码、库、环境)。
      • 例如:ubuntu:20.04 是一个 Linux 系统镜像。
    • 容器(Container):镜像运行后的实例,像一个轻量级虚拟机。
    • 仓库(Registry):存放镜像的地方,如 Docker Hub(类似手机应用商店)。

第 2 章:安装 Docker(手把手)
  1. Windows/macOS 安装

    • 访问 Docker 官网,下载 Docker Desktop。

    • 安装后打开,桌面右下角出现 Docker 图标即成功。

    • 验证安装:打开命令行,输入:

      bash

      复制

      docker --version  # 显示版本号,如 Docker version 20.10.17
      
  2. Linux 安装(Ubuntu 为例)

    bash

    复制

    # 卸载旧版本(如果有)
    sudo apt-get remove docker docker-engine docker.io containerd runc
    
    # 安装依赖工具
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg lsb-release
    
    # 添加 Docker 官方 GPG 密钥
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
    # 设置仓库
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # 安装 Docker
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
    # 验证安装
    sudo docker run hello-world  # 运行测试容器
    

第 3 章:第一个 Docker 容器
  1. 从镜像运行容器

    bash

    复制

    # 拉取一个官方测试镜像
    docker pull hello-world
    
    # 运行容器
    docker run hello-world
    
    • 输出结果:显示 “Hello from Docker!” 说明成功!
  2. 参数解释

    • docker run = 创建并启动容器。
    • 如果本地没有 hello-world 镜像,Docker 会自动从仓库下载。

第 4 章:镜像操作(Image)
  1. 搜索镜像

    bash

    复制

    docker search ubuntu  # 查找 Ubuntu 相关镜像
    
  2. 拉取镜像

    bash

    复制

    docker pull ubuntu:20.04  # 下载指定版本
    
  3. 查看本地镜像

    bash

    复制

    docker images
    # 输出示例:
    # REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    # ubuntu       20.04     dcfc4b66c6b9   2 weeks ago   72.8MB
    
  4. 删除镜像

    bash

    复制

    docker rmi ubuntu:20.04  # 删除指定镜像
    

第 5 章:容器操作(Container)
  1. 运行一个交互式容器

    bash

    复制

    # 运行 Ubuntu 容器并进入命令行
    docker run -it ubuntu:20.04 /bin/bash
    
    • -it:以交互模式运行(进入容器内部)。
    • /bin/bash:启动后执行的命令(打开 Bash 终端)。
  2. 退出容器

    • 在容器内输入 exit 或按 Ctrl+D
  3. 查看容器

    bash

    复制

    docker ps          # 查看正在运行的容器
    docker ps -a       # 查看所有容器(包括已停止的)
    
  4. 启动/停止容器

    bash

    复制

    docker start 容器ID     # 启动已停止的容器
    docker stop 容器ID      # 停止运行中的容器
    docker restart 容器ID   # 重启容器
    
  5. 进入已运行的容器

    bash

    复制

    docker exec -it 容器ID /bin/bash  # 进入容器终端
    
  6. 删除容器

    bash

    复制

    docker rm 容器ID        # 删除已停止的容器
    docker rm -f 容器ID     # 强制删除运行中的容器
    

第 6 章:Dockerfile 构建镜像(实战)
  1. 编写第一个 Dockerfile

    • 创建一个空文件夹,新建文件 Dockerfile

      dockerfile

      复制

      # 基础镜像(从 Ubuntu 20.04 开始)
      FROM ubuntu:20.04
      
      # 维护者信息(可选)
      LABEL maintainer="yourname@example.com"
      
      # 更新软件包并安装 curl
      RUN apt-get update && apt-get install -y curl
      
      # 设置容器启动时执行的命令
      CMD ["curl", "https://www.baidu.com"]
      
  2. 构建镜像

    bash

    复制

    docker build -t my-curl:1.0 .  # -t 指定镜像名称和标签,. 表示当前目录
    
  3. 运行自定义镜像

    bash

    复制

    docker run my-curl:1.0  # 执行 curl 命令访问百度
    

第 7 章:数据持久化(Volume)
  1. 为什么需要数据卷?

    • 容器删除后,内部数据会丢失,需将数据保存到宿主机。
  2. 挂载数据卷

    bash

    复制

    # 创建数据卷
    docker volume create my-vol
    
    # 运行容器并挂载卷
    docker run -d -v my-vol:/app/data --name my-nginx nginx
    
    • -v my-vol:/app/data:将数据卷 my-vol 挂载到容器的 /app/data 目录。
  3. 直接挂载宿主机目录

    bash

    复制

    docker run -v /home/user/data:/app/data nginx
    

第 8 章:网络配置(容器通信)
  1. 查看 Docker 网络

    bash

    复制

    docker network ls  # 列出所有网络
    
  2. 创建自定义网络

    bash

    复制

    docker network create my-network
    
  3. 容器加入同一网络

    bash

    复制

    docker run --network=my-network --name web nginx
    docker run --network=my-network --name db mysql
    
    • 同一网络中的容器可以通过容器名互相访问(如 web 容器中可直接 ping db)。

第 9 章:Docker Compose(多容器编排)
  1. 安装 Docker Compose

    bash

    复制

    # Linux 安装命令
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  2. 编写 docker-compose.yml

    yaml

    复制

    version: '3'
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: 123456
    
  3. 启动服务

    bash

    复制

    docker-compose up -d    # 后台启动
    docker-compose down     # 停止并删除容器
    

第 10 章:常见问题与练习
  1. 常见错误
    • 端口冲突:修改宿主机端口(如 -p 8080:80)。
    • 权限不足:在命令前加 sudo(Linux)或使用管理员权限运行(Windows)。
  2. 练习任务
    • 任务1:用 Docker 部署一个 Python Flask 应用。
    • 任务2:使用 Docker Compose 组合 Nginx + MySQL + Redis。

资源推荐