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

相关推荐
❀͜͡傀儡师4 小时前
docker一键部署HFish蜜罐
运维·docker·容器
DO_Community4 小时前
DigitalOcean容器注册表推出多注册表支持功能
服务器·数据库·docker·kubernetes
dnpao4 小时前
linux onlyoffice服务向docker容器中添加中文字体
linux·运维·docker
回忆是昨天里的海4 小时前
k8s暴露服务-Ingress环境部署
云原生·容器·kubernetes
tzhou644525 小时前
Kubernetes Pod 入门
云原生·容器·kubernetes
java_logo5 小时前
Dify 开源 LLM 应用开发平台企业级 Docker Compose 部署手册
docker·容器·开源·dify部署·dify部署文档·dify部署方案·dify部署教程
jarreyer6 小时前
【docker的gpu加速相关问题解决记录】
运维·docker·容器
韭菜钟6 小时前
制作自定义Docker镜像并部署使用
运维·docker·容器
椰汁菠萝7 小时前
docker部署gitlab
docker·容器·gitlab
知识分享小能手7 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中安装 Docker 容器 —— 知识点详解(26)
学习·ubuntu·docker