Docker 是 Linux 上最主流的容器化引擎,基于 Linux 内核的 Namespace、Cgroup、UnionFS
实现轻量级隔离,能把应用与依赖打包成可移植容器,做到 "一次构建、随处运行"。

一、Docker 核心概念(Linux 环境)
镜像(Image):只读模板,包含应用 + 运行环境 + 依赖,分层存储(OverlayFS),可复用、可共享。
容器(Container):镜像的运行实例,有独立进程 / 网络 / 文件系统,轻量、秒级启动。
仓库(Registry):存储 / 分发镜像,如 Docker Hub、阿里云镜像仓库。
Docker Engine:Linux 后台守护进程(dockerd),负责管理镜像、容器、网络、存储。

二、Linux 安装 Docker(主流发行版)
- Ubuntu / Debian(推荐官方源)
bash
# 1. 卸载旧版(如有)
sudo apt remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
# 3. 添加 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 添加 Docker 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 启动并开机自启
sudo systemctl enable --now docker
# 7. 验证
docker --version
docker run hello-world
- CentOS / RHEL / Rocky Linux
bash
# 1. 卸载旧版
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖
sudo yum install -y yum-utils
# 3. 添加 Docker 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 启动并开机自启
sudo systemctl enable --now docker
# 6. 验证
docker --version
docker run hello-world
- 一键脚本(快速安装)
bash
# 官方脚本
curl -fsSL https://get.docker.com | sudo sh
# 国内可换阿里云脚本
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/get-docker.sh | sudo sh
三、Linux 常用 Docker 命令
镜像操作
bash
docker pull nginx # 拉取镜像
docker images # 查看本地镜像
docker rmi nginx # 删除镜像
docker build -t myapp . # 从 Dockerfile 构建镜像
容器操作
bash
docker run -d -p 80:80 nginx # 后台运行,端口映射
docker ps # 查看运行中容器
docker ps -a # 查看所有容器
docker stop <容器ID/名> # 停止容器
docker start <容器ID/名> # 启动容器
docker rm <容器ID/名> # 删除容器
docker exec -it <容器ID> bash # 进入容器终端
系统与日志
bash
docker system df # 查看 Docker 磁盘占用
docker logs <容器ID> # 查看容器日志
docker info # 查看 Docker 信息
四、Linux 下 Docker 核心原理
Namespace:隔离进程、网络、文件系统、用户、UTS、IPC,让容器像独立系统。
Cgroup:限制容器 CPU、内存、磁盘 IO、网络带宽,防止资源抢占。
UnionFS(OverlayFS):镜像分层,共享底层层、只写顶层,节省空间、加速启动。
C/S 架构:docker 客户端通过 API 与 dockerd 守护进程通信。
五、Linux 下 Docker 优势
轻量:比虚拟机小得多,秒级启动,资源占用低。
一致环境:开发 / 测试 / 生产环境完全一致,避免 "在我机器上能跑" 问题。
可移植:一次构建,在任何 Linux 主机 / 云服务器运行。
易扩展:适合微服务、CI/CD、快速扩容场景。
Docker 常用命令速查表(可直接复制)和实用 Dockerfile 编写示例,覆盖日常开发 / 运维高频场景,新手也能快速上手。
一、Docker 常用命令速查表(按场景分类)
bash
# ==================== 1. 基础环境 & 系统信息 ====================
docker --version # 查看 Docker 版本
docker info # 查看 Docker 系统信息(镜像/容器数、驱动、内核等)
docker system df # 查看 Docker 磁盘占用(镜像/容器/卷/构建缓存)
docker system prune # 清理无用资源(停止的容器、悬空镜像、未使用网络)
docker system prune -a # 深度清理(含未使用的镜像,谨慎使用)
# ==================== 2. 镜像操作 ====================
docker pull nginx:1.25 # 拉取指定版本镜像(不加版本默认latest)
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx # 拉取国内镜像
docker images # 列出本地所有镜像
docker images -q # 只显示镜像ID(批量删除用)
docker rmi 镜像ID/镜像名 # 删除单个镜像
docker rmi $(docker images -q) # 删除所有本地镜像(谨慎)
docker tag 原镜像名:版本 新镜像名:版本 # 给镜像打标签(推送仓库用)
docker push 镜像名:版本 # 推送镜像到仓库(需先登录)
docker save -o mynginx.tar nginx:1.25 # 导出镜像为tar包
docker load -i mynginx.tar # 从tar包导入镜像
# ==================== 3. 容器操作(核心) ====================
# 启动容器(高频参数:-d后台 -p端口 -v挂载 -name命名 -it交互)
docker run -d -p 8080:80 --name mynginx -v /host/html:/usr/share/nginx/html nginx:1.25
# 参数说明:
# -d:后台运行 -p 主机端口:容器端口 --name:自定义容器名
# -v:主机目录:容器目录(数据持久化) -it:交互式运行(如bash)
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(含停止的)
docker ps -q # 只显示运行中容器ID
docker stop 容器ID/容器名 # 停止容器(优雅关闭)
docker kill 容器ID/容器名 # 强制停止容器(快速终止)
docker start 容器ID/容器名 # 启动已停止的容器
docker restart 容器ID/容器名 # 重启容器
docker rm 容器ID/容器名 # 删除单个容器(需先停止)
docker rm $(docker ps -aq) # 删除所有容器(谨慎)
docker exec -it 容器ID bash # 进入容器终端(bash/sh)
docker exec -it 容器ID sh # 轻量容器用sh(如alpine镜像)
docker cp 主机文件 容器ID:容器路径 # 主机文件复制到容器
docker cp 容器ID:容器路径 主机文件 # 容器文件复制到主机
docker logs 容器ID/容器名 # 查看容器日志
docker logs -f 容器ID # 实时跟踪日志(类似tail -f)
docker logs --tail 100 容器ID # 查看最后100行日志
docker inspect 容器ID/镜像ID # 查看容器/镜像详细信息(JSON格式)
# ==================== 4. 网络操作 ====================
docker network ls # 查看所有网络
docker network create mynet # 创建自定义桥接网络(容器间互通)
docker run -d --name app1 --network mynet nginx # 容器加入自定义网络
docker network connect mynet 容器ID # 已有容器加入自定义网络
# ==================== 5. 数据卷操作(持久化推荐) ====================
docker volume ls # 查看所有数据卷
docker volume create myvol # 创建命名卷
docker run -d -v myvol:/data nginx # 挂载命名卷到容器
docker volume inspect myvol # 查看卷详情(存储路径)
docker volume rm myvol # 删除数据卷
二、实用 Dockerfile 编写示例(覆盖 3 类常见场景)
Dockerfile 是构建镜像的 "脚本",以下示例可直接复制修改,适配你的业务场景。
示例 1:前端项目(Vue/React)打包部署(Nginx 镜像)
bash
# 阶段1:构建前端项目
FROM node:18-alpine AS build-stage
WORKDIR /app
# 复制依赖文件并安装(利用缓存,修改代码不重新装依赖)
COPY package.json package-lock.json ./
RUN npm install --registry=https://registry.npmmirror.com
# 复制所有代码并打包
COPY . .
RUN npm run build
# 阶段2:部署到Nginx(精简镜像)
FROM nginx:1.25-alpine
# 复制构建好的前端文件到Nginx默认目录
COPY --from=build-stage /app/dist /usr/share/nginx/html
# 复制自定义Nginx配置(可选)
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 暴露端口
EXPOSE 80
# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]
示例 2:后端项目(Java SpringBoot)
bash
# 基础镜像(精简版JRE,比JDK小)
FROM openjdk:17-jre-slim
# 维护者信息(可选)
LABEL maintainer="your@email.com"
# 设置工作目录
WORKDIR /app
# 复制打包好的jar包到容器(注意jar包名称替换成你的)
COPY target/your-app-1.0.0.jar app.jar
# 设置JVM参数(优化内存)
ENV JAVA_OPTS="-Xms512m -Xmx1024m"
# 暴露端口(对应SpringBoot配置的端口)
EXPOSE 8080
# 启动命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
示例 3:Python 项目(Flask/Django)
bash
# 基础镜像
FROM python:3.11-alpine
# 避免pip缓存问题
ENV PIP_NO_CACHE_DIR=1
# 工作目录
WORKDIR /app
# 复制依赖文件并安装(国内源加速)
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制项目代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令(Flask示例,Django替换为:python manage.py runserver 0.0.0.0:5000)
CMD ["python", "app.py"]
三、Dockerfile 构建 & 运行命令(配套示例)
bash
# 进入Dockerfile所在目录
cd /path/to/your/project
# 构建镜像(-t 打标签,格式:名称:版本)
docker build -t my-frontend:v1 .
# 运行镜像(以前端示例为例)
docker run -d -p 80:80 --name my-frontend-app my-frontend:v1
总结
-
命令速查表:按「基础 / 镜像 / 容器 / 网络 / 数据卷」分类,覆盖 90% 日常操作,可直接复制使用; Dockerfile
-
示例:适配前端、Java、Python 三大主流场景,核心优化(如分层构建、国内源、内存优化)已内置; 关键技巧:Dockerfile
-
优先用 COPY 而非 ADD、用 alpine 精简镜像、分层构建减少镜像体积。