【小白友好】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 的便捷吧!

相关推荐
从零开始学习人工智能3 小时前
Docker 镜像导出与导入:export/import vs save/load
运维·docker·容器
基哥的奋斗历程5 小时前
Kubernetes 存储 Downward API
云原生·容器·kubernetes
跳跳的向阳花11 小时前
08、Docker学习,常用安装:ClickHouse
学习·clickhouse·docker
weixin_4258782313 小时前
k8s 自动伸缩的场景与工作原理
java·容器·kubernetes
lzz的编码时刻13 小时前
K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority
云原生·容器·kubernetes
码哝小鱼13 小时前
docker stack常用命令
docker·容器·eureka
NorthCastle16 小时前
Centos7 上 卸载 docker
运维·docker·容器
{⌐■_■}16 小时前
【Kubernetes】RBAC(基于角色的访问控制)如何设置?如何管理 Kubernetes 的权限?
云原生·容器·kubernetes
kfepiza16 小时前
docker mysql 笔记250406
docker·容器
kfepiza17 小时前
`docker run --restart no,always,on-failure,unless-stopped` 笔记250406
docker·容器