【小白友好】Docker 入门详解:从零开始学“应用集装箱”


一、Docker 是什么?

一句话解释 :Docker 是一种容器化技术,你可以把它想象成"应用程序的集装箱",将代码、环境、依赖打包成一个标准化的"箱子",在任何地方都能快速运行。

官方定义:Docker 是一个开源平台,用于开发、部署和运行应用程序。它通过容器(Container)实现环境隔离,确保应用在不同环境中行为一致。


二、为什么用 Docker?
1. 传统部署的痛点
  • 环境不一致:开发环境能跑,生产环境报错。
  • 依赖冲突:多个应用依赖不同版本的库,难以共存。
  • 部署复杂:手动配置服务器,费时费力。
2. Docker 的优势
  • 一致性:容器内包含所有依赖,环境与宿主机隔离。
  • 轻量高效:容器共享操作系统内核,资源占用远低于虚拟机(VM)。
  • 快速启动:秒级启动,适合动态扩缩容。

三、Docker 核心概念
概念 说明 比喻
镜像(Image) 只读模板,包含运行应用所需的代码、库、环境(如一个"安装包")。 类似"光盘镜像"
容器(Container) 镜像的运行实例,相当于一个轻量级虚拟机(实际是进程)。 类似"运行中的程序"
仓库(Registry) 存储和分发镜像的平台(如 Docker Hub)。 类似"应用商店"

四、Docker 安装与验证
1. 安装 Docker(以 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 密钥  
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  

# 安装 Docker 引擎  
sudo apt-get update  
sudo apt-get install docker-ce docker-ce-cli containerd.io  

# 验证安装  
sudo docker run hello-world  # 运行测试容器,看到输出即成功!  
2. 配置用户组(避免每次用 sudo
bash 复制代码
sudo groupadd docker          # 创建 docker 用户组(如果不存在)  
sudo usermod -aG docker $USER # 将当前用户加入组  
newgrp docker                 # 刷新用户组  

五、Docker 基础操作
1. 镜像管理
  • 拉取镜像 :从仓库下载镜像(默认 Docker Hub)。

    bash 复制代码
    docker pull nginx:latest  # 下载最新版 Nginx 镜像  
  • 查看镜像

    bash 复制代码
    docker images  
  • 删除镜像

    bash 复制代码
    docker rmi nginx:latest  
2. 容器管理
  • 运行容器

    bash 复制代码
    docker run -d --name my-nginx -p 80:80 nginx:latest  
    # -d:后台运行  
    # --name:容器名称  
    # -p 宿主机端口:容器端口  
  • 查看容器

    bash 复制代码
    docker ps          # 查看运行中的容器  
    docker ps -a       # 查看所有容器(包括已停止的)  
  • 停止/删除容器

    bash 复制代码
    docker stop my-nginx   # 停止容器  
    docker rm my-nginx     # 删除容器  
  • 进入容器

    bash 复制代码
    docker exec -it my-nginx /bin/bash  # 进入容器内的 Bash 终端  
3. 构建镜像(Dockerfile)
  1. 创建 Dockerfile 文件:

    dockerfile 复制代码
    FROM ubuntu:20.04             # 基础镜像  
    RUN apt-get update && apt-get install -y python3  # 安装 Python3  
    COPY app.py /app              # 复制本地文件到镜像  
    CMD ["python3", "/app/app.py"] # 容器启动命令  
  2. 构建镜像:

    bash 复制代码
    docker build -t my-python-app .  

六、Docker 实际应用场景
1. 环境隔离
  • 同时运行不同版本的 MySQL(5.7 和 8.0),互不干扰。
2. 快速部署
  • 一键部署 WordPress + MySQL:

    bash 复制代码
    docker run --name wordpress -p 8080:80 -d wordpress  
    docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  
3. 持续集成(CI/CD)
  • 在 GitLab CI 中,使用 Docker 镜像作为构建环境,确保每次构建一致。

七、注意事项与常见问题
  1. 数据持久化

    • 容器内数据默认随容器删除而丢失,需挂载宿主机目录:

      bash 复制代码
      docker run -v /宿主机目录:/容器目录 nginx  
  2. 容器权限

    • 避免容器以 root 权限运行,需指定用户:

      dockerfile 复制代码
      USER nobody  
  3. 资源限制

    • 限制容器内存和 CPU 使用:

      bash 复制代码
      docker run -m 512m --cpus=1 nginx  

八、学习资源推荐
  1. 官方文档Docker 官方文档
  2. 交互式教程Play with Docker
  3. 书籍:《Docker 技术入门与实战》

总结

Docker 让应用部署像搭积木一样简单,记住三个核心:

  • 镜像 是模板,容器 是实例,仓库是仓库。
  • 常用命令:docker rundocker builddocker ps

动手运行一个 Nginx 容器,访问 http://localhost:80,感受 Docker 的便捷吧!

相关推荐
magrich11 分钟前
Docker usage on ubuntu
ubuntu·docker·容器
ZZDICT4 小时前
两台互通的服务器使用Docker部署一主两从MySQL8.0.35
运维·服务器·mysql·docker
舌尖上的五香5 小时前
k8s拉取harbor镜像部署
云原生·容器·kubernetes
斯普信专业组5 小时前
深入探讨K8s资源管理和性能优化
容器·性能优化·kubernetes
终端行者5 小时前
k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
容器·kubernetes
人才瘾大5 小时前
docker和k8s
docker·kubernetes
是小崔啊5 小时前
Docker01 - docker快速入门
docker·容器
forth touch5 小时前
Docker快速使用指南
docker·容器