Docker 快速入门与实用指南

柳三千

文章最后更新时间:2025年04月17日

Docker 快速入门与实用指南

一、Docker 核心概念

  1. 镜像(Image)

    • 静态模板文件,包含运行环境和应用程序代码(如 nginx:latest)。
    • 类比:操作系统的 ISO 安装镜像。
  2. 容器(Container)

    • 镜像的运行实例,拥有独立进程和文件系统。
    • 类比:虚拟机中的操作系统实例。
  3. 仓库(Registry)

    • 镜像存储中心,默认使用 Docker Hub(如 docker.io/library/ubuntu)。

二、Docker 安装与配置

  1. 安装 Docker

    # Ubuntu
    sudo apt-get update && sudo apt-get install docker.io
    # CentOS
    sudo yum install docker
    # macOS/Windows 下载 Docker Desktop
    
  2. 配置镜像加速器(国内用户)
    编辑 /etc/docker/daemon.json

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    

    重启服务:sudo systemctl restart docker


三、常用 Docker 命令

1. 镜像管理

#搜索镜像
docker search [关键词]


# 拉取镜像
docker pull [镜像名]:[标签]
docker pull nginx:latest


# 查看本地镜像
docker images
docker image ls


# 删除镜像
docker rmi [镜像名/ID]  # 删除单个镜像
docker rmi [镜像1] [镜像2]  # 删除多个镜像
docker image prune  # 删除所有悬虚镜像(未被任何容器引用的中间层镜像)

#强制删除(即使有容器正在运行):
docker rmi -f [镜像ID]
docker rmi nginx:alpine  # 删除指定镜像
docker rmi $(docker images -q)  # 删除所有本地镜像(谨慎使用!)


# 导出镜像
docker save -o [文件名.tar] [镜像名]
docker save -o nginx.tar nginx:latest

#从文件导入镜像
docker load -i [文件名.tar]
docker load -i nginx.tar


#查看镜像详细信息
docker inspect [镜像名/ID]

2. 容器操作

# 启动容器(-d 后台运行,-p 端口映射)
docker run -d -p 80:80 --name my_nginx nginx

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 进入容器执行命令
docker exec -it my_nginx /bin/bash

# 停止/启动容器
docker stop my_nginx
docker start my_nginx

# 删除容器
docker rm my_nginx

# 查看容器日志
docker logs -f my_nginx

3. 数据持久化

# 挂载主机目录到容器
docker run -v /host/path:/container/path nginx

# 使用数据卷(自动管理)
docker volume create my_vol
docker run -v my_vol:/data nginx

四、Dockerfile 实战

# 基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制代码并安装依赖
COPY requirements.txt .
RUN pip install -r requirements.txt

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

构建镜像

docker build -t myapp:1.0 .

五、网络与多容器通信

  1. 创建自定义网络

    docker network create my_network
    
  2. 容器加入同一网络

    docker run -d --net=my_network --name app myapp:1.0
    docker run -d --net=my_network --name redis redis:alpine
    

    容器间可直接通过容器名通信(如 app 访问 redis:6379)。


六、Docker Compose 编排

docker-compose.yml 示例:

version: '3'
services:
  web:
    image: myapp:1.0
    ports:
      - "8000:8000"
    volumes:
      - ./logs:/app/logs
    depends_on:
      - redis
  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data

volumes:
  redis_data:

常用命令

docker-compose up -d    # 启动服务
docker-compose down     # 停止并删除容器
docker-compose logs -f  # 查看日志

七、实用技巧与问题排查

  1. 清理无用资源

    docker system prune -a    # 删除所有停止的容器、未使用的镜像和网络
    
  2. 查看容器资源占用

    docker stats
    
  3. 容器内调试工具安装

    # Alpine 镜像安装常用工具
    apk add --no-cache curl vim
    # Ubuntu 镜像
    apt-get update && apt-get install -y net-tools
    
  4. 常见问题排查

    • 容器启动失败:查看日志 docker logs <container_id>
    • 端口冲突:检查 -p 参数或使用 docker ps 查看占用
    • 权限问题:添加 --user $(id -u) 或配置用户组

八、学习资源推荐

掌握以上内容即可应对 90% 的日常开发需求!

文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码