Docker容器使用手册——入门篇(上)

目录

  • [1. 简介](#1. 简介)
  • [2. 基本概念](#2. 基本概念)
  • [3. 安装与配置](#3. 安装与配置)
  • [4. 容器管理](#4. 容器管理)
  • [5. 镜像管理](#5. 镜像管理)
  • [6. 网络配置](#6. 网络配置)
  • [7. 存储管理](#7. 存储管理)
  • [8. Docker Compose](#8. Docker Compose)
  • [9. 常见问题与解决方案](#9. 常见问题与解决方案)
  • [10. 最佳实践](#10. 最佳实践)
  • 附录:常用命令速查表

1. 简介

1.1 什么是Docker

Docker是一个开源的容器化平台,它允许开发者打包他们的应用及其依赖项到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

1.2 Docker的优势

  • 简化部署:将应用及其依赖打包到容器中,保证环境一致性
  • 隔离性:容器之间相互隔离,避免环境冲突
  • 轻量级:容器共享主机内核,启动速度快,资源占用少
  • 可移植性:容器可以在不同环境中一致运行
  • 扩展性:易于实现容器编排和自动扩展
  • 版本控制:可以对容器镜像进行版本管理

1.3 Docker的应用场景

  • 应用程序容器化
  • 微服务架构实现
  • 持续集成/持续部署(CI/CD)
  • 开发环境一致性保障
  • 高可用系统构建
  • 测试环境快速搭建

2. 基本概念

2.1 容器(Container)

容器是Docker的基本执行单元,是镜像的运行时实例。容器包含应用及其依赖,但共享主机操作系统内核。

2.2 镜像(Image)

镜像是一个只读的模板,包含运行容器所需的所有文件系统结构和内容。镜像可以基于其他镜像构建,通过Dockerfile定义构建过程。

2.3 Dockerfile

Dockerfile是一个文本文件,包含构建Docker镜像所需的一系列命令。每个命令在镜像中创建一个新的层。

2.4 仓库(Repository)

仓库是集中存放Docker镜像的地方,可以是公开的(如Docker Hub)或私有的。仓库分为公共仓库和私有仓库。

2.5 注册表(Registry)

注册表是存放仓库的服务器,如Docker Hub是最大的公共注册表。

2.6 卷(Volume)

卷是用于持久化数据的机制,允许数据在容器间共享或在容器停止后保留。

3. 安装与配置

3.1 在Windows上安装Docker

  1. 系统要求

    • Windows 10 64位专业版、企业版或教育版(1607+),或Windows 11
    • 启用Hyper-V和容器功能
    • 至少4GB RAM
  2. 安装步骤

    • Docker官网下载Docker Desktop安装包
    • 运行安装程序,按照提示完成安装
    • 安装完成后重启计算机
  3. 验证安装

    • 打开命令提示符或PowerShell
    • 运行docker versiondocker run hello-world验证安装

3.2 在macOS上安装Docker

  1. 系统要求

    • macOS 11 Big Sur或更高版本
    • 至少4GB RAM
  2. 安装步骤

    • Docker官网下载Docker Desktop for Mac安装包
    • 拖动Docker应用到Applications文件夹
    • 从Applications文件夹启动Docker
  3. 验证安装

    • 打开终端
    • 运行docker versiondocker run hello-world验证安装

3.3 在Linux上安装Docker

  1. Ubuntu/Debian安装

    bash 复制代码
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    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"
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
  2. CentOS/RHEL安装

    bash 复制代码
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install docker-ce docker-ce-cli containerd.io
    sudo systemctl start docker
    sudo systemctl enable docker
  3. 验证安装

    bash 复制代码
    sudo docker version
    sudo docker run hello-world

3.4 配置Docker

  1. 配置国内镜像源

    • 编辑/etc/docker/daemon.json(Linux)或在Docker Desktop的设置中配置
    json 复制代码
    {
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com"
      ]
    }
    • 重启Docker服务:sudo systemctl restart docker(Linux)或重启Docker Desktop
  2. 配置用户权限

    bash 复制代码
    sudo usermod -aG docker $USER
    • 重新登录以应用更改

4. 容器管理

4.1 创建与运行容器

  1. 基本命令

    bash 复制代码
    docker run [选项] 镜像名 [命令] [参数]
  2. 常用选项

    • -d: 后台运行容器
    • -p 主机端口:容器端口: 端口映射
    • -v 主机路径:容器路径: 挂载卷
    • --name 容器名: 指定容器名称
    • -e 变量名=值: 设置环境变量
    • --restart=always: 设置容器自动重启
  3. 示例

    bash 复制代码
    # 运行一个Nginx容器,映射80端口,命名为my-nginx
    docker run -d -p 80:80 --name my-nginx nginx
    
    # 运行MySQL容器,设置密码,挂载数据卷
    docker run -d -p 3306:3306 --name mysql \
      -e MYSQL_ROOT_PASSWORD=password \
      -v mysql-data:/var/lib/mysql \
      mysql:8.0

4.2 查看容器

  1. 列出所有运行中的容器

    bash 复制代码
    docker ps
  2. 列出所有容器(包括已停止的)

    bash 复制代码
    docker ps -a
  3. 查看容器详情

    bash 复制代码
    docker inspect 容器名或ID
  4. 查看容器日志

    bash 复制代码
    docker logs [选项] 容器名或ID
    # 实时查看日志
    docker logs -f 容器名或ID
  5. 查看容器内进程

    bash 复制代码
    docker top 容器名或ID

4.3 容器的启动、停止、重启

  1. 启动容器

    bash 复制代码
    docker start 容器名或ID
  2. 停止容器

    bash 复制代码
    docker stop 容器名或ID
  3. 重启容器

    bash 复制代码
    docker restart 容器名或ID
  4. 强制停止容器

    bash 复制代码
    docker kill 容器名或ID

4.4 进入容器

  1. 使用exec进入容器(推荐)

    bash 复制代码
    docker exec -it 容器名或ID /bin/bash
    # 对于Alpine基础的容器
    docker exec -it 容器名或ID /bin/sh
  2. 使用attach连接容器

    bash 复制代码
    docker attach 容器名或ID

4.5 删除容器

  1. 删除单个容器

    bash 复制代码
    docker rm 容器名或ID
  2. 强制删除运行中的容器

    bash 复制代码
    docker rm -f 容器名或ID
  3. 删除所有已停止的容器

    bash 复制代码
    docker container prune

5. 镜像管理

5.1 拉取镜像

bash 复制代码
# 拉取最新版本
 docker pull 镜像名
# 拉取指定版本
docker pull 镜像名:标签

# 示例
docker pull nginx:latest
docker pull mysql:5.7

5.2 查看镜像

bash 复制代码
# 列出所有本地镜像
docker images

# 查看镜像详情
docker inspect 镜像名或ID

# 查看镜像历史
docker history 镜像名或ID

5.3 删除镜像

bash 复制代码
# 删除单个镜像
docker rmi 镜像名或ID

# 强制删除镜像
docker rmi -f 镜像名或ID

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

5.4 构建镜像

  1. 创建Dockerfile

    dockerfile 复制代码
    # 使用官方Python镜像作为基础镜像
    FROM python:3.9-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 复制requirements.txt到容器
    COPY requirements.txt .
    
    # 安装依赖
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 复制应用代码
    COPY . .
    
    # 暴露端口
    EXPOSE 5000
    
    # 设置环境变量
    ENV NAME World
    
    # 运行应用
    CMD ["python", "app.py"]
  2. 构建镜像

    bash 复制代码
    docker build -t 镜像名:标签 路径
    # 示例
    docker build -t myapp:v1 .
  3. 构建优化技巧

    • 使用多阶段构建减小镜像体积
    • 按依赖变化频率排序Dockerfile指令
    • 使用.dockerignore文件排除不需要的文件
    • 选择更小的基础镜像(如Alpine)

5.5 推送镜像

  1. 登录Docker Hub

    bash 复制代码
    docker login
  2. 标记镜像

    bash 复制代码
    docker tag 本地镜像名:标签 用户名/仓库名:标签
  3. 推送镜像

    bash 复制代码
    docker push 用户名/仓库名:标签
相关推荐
峰顶听歌的鲸鱼9 小时前
Kubernetes介绍和部署
运维·笔记·云原生·容器·kubernetes·学习方法
信创天地9 小时前
自动化运维利器赋能信创:Ansible与SaltStack在国产系统的部署与批量管理实战
运维·自动化·ansible
东城绝神9 小时前
《Linux运维总结:基于ARM64+X86_64架构使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群》
linux·运维·mysql·架构·高可用·ndb cluster
creator_Li10 小时前
即时通讯项目--(1)环境搭建
linux·运维·ubuntu
Ka1Yan10 小时前
Docker:基本概念与快速入门
运维·docker·容器
文静小土豆11 小时前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
小技工丨11 小时前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
糠帅傅蓝烧牛肉面13 小时前
单实例多MCP聚合服务:两种实现方案深度对比
前端·docker·ai
4032407313 小时前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@13 小时前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核