插件窝 干货文章 Docker 入门终极指南,详细版!别再说不会用 Docker 了!

Docker 入门终极指南,详细版!别再说不会用 Docker 了!

Docker 容器 镜像 Compose 389    来源:    2025-04-13

Docker 终极入门指南

什么是 Docker?

Docker 是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。

核心概念

  • 镜像(Image):Docker 镜像是一个只读模板,包含创建 Docker 容器的指令
  • 容器(Container):镜像的运行实例,可以被启动、停止、删除
  • 仓库(Registry):集中存放镜像的地方,Docker Hub 是官方公共仓库

Docker 安装

Windows/macOS

  1. 下载 Docker Desktop: https://www.docker.com/products/docker-desktop
  2. 按照向导安装
  3. 安装完成后启动 Docker Desktop

Linux (以 Ubuntu 为例)

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加稳定版仓库
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

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

# 验证安装
sudo docker run hello-world

基础命令

镜像操作

# 搜索镜像
docker search ubuntu

# 拉取镜像
docker pull ubuntu:20.04

# 列出本地镜像
docker images

# 删除镜像
docker rmi ubuntu:20.04

# 构建镜像 (需要在 Dockerfile 所在目录执行)
docker build -t my-image:1.0 .

容器操作

# 运行容器
docker run -it ubuntu:20.04 /bin/bash

# 列出运行中的容器
docker ps

# 列出所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop container_id

# 启动已停止的容器
docker start container_id

# 删除容器
docker rm container_id

# 进入运行中的容器
docker exec -it container_id /bin/bash

# 查看容器日志
docker logs container_id

Dockerfile 编写

Dockerfile 是一个文本文件,包含构建镜像所需的指令。

常用指令

  • FROM: 指定基础镜像
  • RUN: 执行命令
  • COPY: 复制文件
  • ADD: 复制并解压文件
  • CMD: 容器启动时执行的命令
  • ENTRYPOINT: 容器启动时执行的命令(可被覆盖)
  • ENV: 设置环境变量
  • EXPOSE: 声明容器暴露的端口
  • WORKDIR: 设置工作目录

示例 Dockerfile

# 使用官方 Python 运行时作为父镜像
FROM python:3.8-slim

# 设置工作目录
WORKDIR /app

# 将当前目录内容复制到容器的 /app 目录中
COPY . /app

# 安装 requirements.txt 中指定的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 使端口 80 可供此容器外的环境使用
EXPOSE 80

# 定义环境变量
ENV NAME World

# 在容器启动时运行 app.py
CMD ["python", "app.py"]

Docker Compose

Docker Compose 用于定义和运行多容器 Docker 应用程序。

安装 (Linux)

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

示例 docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

Compose 命令

# 启动服务
docker-compose up

# 后台启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 查看运行中的服务
docker-compose ps

# 构建或重建服务
docker-compose build

网络与存储

网络管理

# 列出网络
docker network ls

# 创建网络
docker network create my-network

# 将容器连接到网络
docker network connect my-network container_name

# 断开容器与网络的连接
docker network disconnect my-network container_name

数据卷管理

# 创建数据卷
docker volume create my-vol

# 列出数据卷
docker volume ls

# 检查数据卷
docker volume inspect my-vol

# 删除数据卷
docker volume rm my-vol

最佳实践

  1. 使用官方镜像:优先使用官方镜像而非自己构建
  2. 保持镜像精简:删除不必要的文件,使用多阶段构建
  3. 一个容器一个进程:每个容器应该只运行一个主进程
  4. 使用 .dockerignore:排除不必要的文件,减少构建上下文大小
  5. 标签管理:为镜像使用有意义的标签,避免使用 latest
  6. 安全扫描:定期扫描镜像中的漏洞
  7. 资源限制:为容器设置 CPU 和内存限制

常见问题解决

权限问题

# 将用户添加到 docker 组(需要重新登录)
sudo usermod -aG docker $USER

清理资源

# 删除所有停止的容器
docker container prune

# 删除所有未被使用的镜像
docker image prune -a

# 删除所有未被使用的网络
docker network prune

# 删除所有未被使用的卷
docker volume prune

# 删除所有未被使用的资源
docker system prune

端口冲突

# 查看端口占用
sudo netstat -tulnp | grep 80

# 或者使用
sudo lsof -i :80

进阶主题

  1. 多阶段构建:减少最终镜像大小
  2. Swarm 模式:原生集群管理
  3. Kubernetes 集成:大规模容器编排
  4. CI/CD 集成:与 Jenkins/GitLab CI 等工具集成
  5. 监控与日志:Prometheus, ELK 等解决方案
  6. 安全加固:镜像签名, 安全扫描等

通过本指南,您应该已经掌握了 Docker 的基础知识和常用操作。实践是最好的学习方式,建议从简单的项目开始,逐步深入探索 Docker 的强大功能。