Docker 核心概念
| 概念 | 说明 | 比喻 |
|---|---|---|
| 镜像 (Image) | 一个只读的模板,用于创建容器。相当于面向对象中的 类。 | 一个软件的安装包(.exe) |
| 容器 (Container) | 镜像运行时的实体。容器可以被创建、启动、停止、删除。相当于类的 实例。 | 一个正在运行的软件进程 |
| 仓库 (Registry) | 集中存放镜像的地方。官方仓库是 Docker Hub。 | 应用商店(App Store) |
2026/3/20大约 10 分钟
| 概念 | 说明 | 比喻 |
|---|---|---|
| 镜像 (Image) | 一个只读的模板,用于创建容器。相当于面向对象中的 类。 | 一个软件的安装包(.exe) |
| 容器 (Container) | 镜像运行时的实体。容器可以被创建、启动、停止、删除。相当于类的 实例。 | 一个正在运行的软件进程 |
| 仓库 (Registry) | 集中存放镜像的地方。官方仓库是 Docker Hub。 | 应用商店(App Store) |
Docker 是一个开源的容器化平台,可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器。Docker 的主要目标是通过容器化技术实现应用程序的快速部署、可移植性和可扩展性,从而简化应用程序的开发、测试和部署过程。
容器化是一种虚拟化技术,它通过在操作系统层面隔离应用程序和其依赖的运行环境,使得应用程序可以在一个独立的、封闭的环境中运行,而不受底层操作系统和硬件的影响。
与传统的虚拟机相比,容器化具有以下优势:
V1 和 V2 的区别 是 v2 版本中么有 - 线
| 功能 | docker-compose (V1) | docker compose (V2) | 说明 |
|---|---|---|---|
| 启动服务 | docker-compose up -d |
docker compose up -d |
后台启动所有服务 |
| 停止服务 | docker-compose down |
docker compose down |
停止并移除容器 |
| 查看状态 | docker-compose ps |
docker compose ps |
查看服务状态 |
| 查看日志 | docker-compose logs -f |
docker compose logs -f |
实时查看日志 |
| 构建镜像 | docker-compose build |
docker compose build |
构建服务镜像 |
| 执行命令 | docker-compose exec service sh |
docker compose exec service sh |
在容器内执行命令 |
| 重启服务 | docker-compose restart |
docker compose restart |
重启所有服务 |
| 缩放服务 | docker-compose up --scale service=3 |
docker compose up --scale service=3 |
扩展服务实例数量 |
| 查看配置 | docker-compose config |
docker compose config |
验证和查看配置 |
| 暂停服务 | docker-compose pause |
docker compose pause |
暂停服务容器 |
| 恢复服务 | docker-compose unpause |
docker compose unpause |
恢复暂停的服务 |
Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。通过 Dockerfile,我们可以自动化地构建出包含应用程序及其运行环境的镜像。
Dockerfile 的基本结构如下:
指定基础镜像: FROM <image>[:<tag>] [AS <name>]
Nginx 是一款高性能的开源 HTTP 服务器和反向代理服务器,由俄罗斯程序员 Igor Sysoev 于 2004 年首次发布。它以其高并发、低内存消耗和稳定性著称,被广泛应用于互联网领域。
Nginx 最初是为了解决 C10K 问题(即同时处理 10000 个并发连接)而设计的,如今它已经成为全球最流行的 Web 服务器之一,据统计,全球约 34% 的网站使用 Nginx 作为 Web 服务器。
Nginx 配置文件采用层级结构,由指令(Directive)和块(Block)组成:
# 全局块 - 影响 Nginx 整体运行
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# events 块 - 影响 Nginx 与用户的网络连接
events {
worker_connections 1024;
use epoll;
}
# http 块 - HTTP 服务器相关配置
http {
# http 全局块
include /etc/nginx/mime.types;
default_type application/octet-stream;
# server 块 - 虚拟主机配置
server {
# server 全局块
listen 80;
server_name example.com;
# location 块 - URL 匹配配置
location / {
root /var/www/html;
index index.html;
}
location /api {
proxy_pass http://backend;
}
}
# 可以有多个 server 块
server {
listen 80;
server_name another.com;
# ...
}
}
# stream 块 - TCP/UDP 代理配置(可选)
stream {
server {
listen 3306;
proxy_pass mysql_cluster;
}
}
server {
listen 80;
server_name static.example.com;
# 网站根目录
root /var/www/static;
# 默认首页
index index.html index.htm;
# 字符集
charset utf-8;
# 访问日志
access_log /var/log/nginx/static.access.log main;
error_log /var/log/nginx/static.error.log;
# 默认路由
location / {
# 按顺序查找文件
# 1. 查找 $uri 对应的文件
# 2. 查找 $uri/ 目录下的 index 文件
# 3. 都找不到返回 404
try_files $uri $uri/ =404;
}
}
| 特性 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 客户端 | 服务端 |
| 部署位置 | 客户端侧 | 服务端侧 |
| 客户端感知 | 客户端需要配置代理 | 客户端无感知 |
| 服务端感知 | 服务端不知道真实客户端 | 服务端知道请求来自代理 |
| 典型用途 | 翻墙、缓存、访问控制 | 负载均衡、安全防护、缓存加速 |
| 代表软件 | Squid、V2Ray | Nginx、HAProxy |
| 类型 | 算法示例 | 特点 | 用途 |
|---|---|---|---|
| 对称加密 | AES、ChaCha20 | 加密解密用同一密钥,速度快 | 数据传输加密 |
| 非对称加密 | RSA、ECDSA | 公钥加密、私钥解密,速度慢 | 密钥交换、数字签名 |
server {
listen 80;
server_name example.com;
root /var/www/html;
# 设置过期时间
location ~* \.(jpg|jpeg|png|gif|ico)$ {
expires 30d; # 30 天
}
location ~* \.(css|js)$ {
expires 7d; # 7 天
}
location ~* \.(html|htm)$ {
expires -1; # 不缓存
# 或
expires epoch; # 立即过期
}
# 使用 max
location /static/ {
expires max; # 最大缓存时间
}
# 使用具体时间
location /news/ {
expires 24h; # 24 小时
}
# 使用 modified 参数
location /docs/ {
expires modified +24h; # 基于文件修改时间 + 24小时
}
}