Docker基础概念
1.1 什么是Docker
Docker的出现是为了解决软件开发过程中的环境配置问题。软件的运行需要满足两个核心条件:操作系统配置正确,依赖库和组件完整安装。以Python应用为例,用户的电脑必须配备Python运行时的环境、各种第三方依赖包、正确的环境变量配置。当老旧模块和新环境产生冲突时,兼容性更是麻烦的问
题。在此背景下诞生了Docker。
Docker是一个开源的容器化平台,它使用操作系统级别的虚拟化技术,将应用程序及其依赖项打包到一个轻量级、可移植的容器中。容器可以在任何支持Docker的环境中运行,确保应用程序的一致性和可移植性。
1.2 核心概念
Container
容器是镜像的运行实例,就像是一个独立运行的小型虚拟环境。它本质上是一个被隔离的进程,拥有自己的文件系统、网络和进程空间,但与宿主机共享操作系统内核。就像面向对象编程中从"类"创建出来的"对象"一样,一个镜像可以启动多个容器实例,每个容器都有自己的运行状态和数据。

Image
镜像是一个只读的模板文件,包含了运行某个应用程序所需的完整环境:代码、运行时库、系统工具、环境变量、配置文件等所有依赖。它就像面向对象编程中的"类"定义,描述了容器应该是什么样子,但本身不能直接运行,需要通过镜像来创建和启动容器实例。
Dockerfile
Dockerfile是一个纯文本文件,包含了一系列构建镜像的指令和命令。它定义了从选择基础镜像开始,到安装依赖、复制代码、设置环境变量、暴露端口等一步步构建最终镜像的完整过程。相当于是制作镜像的"配方"或"脚本",让镜像构建过程可重复、可版本控制。
Repository
仓库是存储和分发镜像的中心化服务,就像代码的Git仓库一样。Docker Hub是最大的公共镜像仓库,提供了大量官方和社区维护的镜像供下载使用。企业也可以搭建私有仓库来存储内部镜像,实现镜像的版本管理、分发和共享。
1.3 Docker vs 传统虚拟机
| 特性 | Docker容器 | 传统虚拟机 |
|---|---|---|
| 启动时间 | 秒级启动 | 分钟级启动 |
| 资源占用 | 轻量级,共享内核 | 重量级,独立OS |
| 性能 | 接近原生性能 | 有一定性能损耗 |
| 隔离性 | 进程级隔离 | 硬件级隔离 |
| 可移植性 | 高度可移植 | 相对较低 |
1.4 Docker vs 传统虚拟机
网上已有很多安装配置教程,不再赘述,具体可参考官网:https://docs.docker.com/desktop/
1.5 Docker基础命令
Docker常用指令:https://www.runoob.com/docker/docker-command-manual.html
Dockerfile编写指南
2.1 基本语法
# 基础镜像 - 必须是第一条指令
FROM ubuntu:20.04
# 设置工作目录
WORKDIR /app
# 复制文件到容器
COPY . .
COPY requirements.txt /app/
# 添加文件(支持URL和自动解压)
ADD https://example.com/file.tar.gz /tmp/
# 执行命令(构建时)
RUN apt-get update && apt-get install -y python3
# 暴露端口
EXPOSE 8080
# 设置环境变量
ENV NODE_ENV=production
# 容器启动命令
CMD ["python3", "app.py"]
2.2 常用指令 / Common Instructions
| 指令 / Instruction | 作用 / Function | 示例 / Example |
|---|---|---|
| FROM | 指定基础镜像 / Specify base image | FROM node:16-alpine |
| RUN | 执行Shell命令 / Execute Shell commands | RUN npm install |
| COPY | 复制本地文件 / Copy local files | COPY src/ /app/src/ |
| ADD | 复制文件(功能更多)/ Copy files (more features) | ADD file.tar.gz /tmp/ |
| WORKDIR | 设置工作目录 / Set working directory | WORKDIR /usr/src/app |
| EXPOSE | 声明端口 / Declare port | EXPOSE 3000 |
| ENV | 设置环境变量 / Set environment variables | ENV PATH=/app:$PATH |
| CMD | 默认启动命令 / Default startup command | CMD ["npm", "start"] |
| ENTRYPOINT | 入口点命令 / Entry point command | ENTRYPOINT ["java", "-jar"] |
2.3 以Python Flask为例 / Python Flask Example
# 使用官方Python镜像 / Use official Python image
FROM python:3.9-slim
# 设置工作目录 / Set working directory
WORKDIR /app
# 复制依赖文件 / Copy dependency file
COPY requirements.txt .
# 安装依赖 / Install dependencies
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码 / Copy application code
COPY . .
# 暴露端口 / Expose port
EXPOSE 5000
# 设置环境变量 / Set environment variables
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
# 启动命令 / Startup command
CMD ["flask", "run", "--host=0.0.0.0"]
3. Docker核心优势 / Docker Core Advantages
- 一致性 / Consistency:确保开发、测试、生产环境一致 / Ensures consistency across development, testing, and production environments
- 可移植性 / Portability:在任何支持Docker的环境中运行 / Runs in any environment that supports Docker
- 资源效率 / Resource Efficiency:比传统虚拟机更轻量级 / More lightweight than traditional virtual machines
- 快速部署 / Rapid Deployment:秒级启动和扩展 / Second-level startup and scaling
