一、Docker 是什么

Docker 是一个开源的 容器化平台,用于将应用程序及其依赖打包成可移植的容器,实现快速部署与一致的运行环境。

一句话概括:

Docker = 一次构建,处处运行。

它彻底改变了开发、测试与运维的工作方式,是现代 DevOps 和微服务体系的核心工具。


二、Docker 的核心特性

特性描述
轻量级基于内核虚拟化,无需完整操作系统
快速启动秒级启动应用
可移植性强一致的环境,避免“在我机器上能跑”的问题
模块化支持分层镜像与复用
版本控制镜像可追踪、回滚
生态丰富拥有庞大的 Docker Hub 仓库
跨平台支持 Linux、macOS、Windows

三、Docker 基本架构


+-----------------------------------------------+ | Docker CLI | +-----------------------------------------------+ | Docker Daemon (dockerd) | | - 镜像管理 - 容器运行 - 网络/卷管理 | +-----------------------------------------------+ | Linux Kernel (Namespaces, Cgroups) | +-----------------------------------------------+ | Host OS / Virtual Machine | +-----------------------------------------------+


四、Docker 安装与配置

1. 安装

sudo apt update sudo apt install docker.io -y

2. 启动 Docker

sudo systemctl start docker sudo systemctl enable docker

3. 验证

docker run hello-world

输出 “Hello from Docker!” 表示成功。


五、常用命令

命令说明
docker pull拉取镜像
docker images查看镜像列表
docker run启动容器
docker ps -a查看容器
docker exec -it进入容器
docker stop/start/rm停止 / 启动 / 删除容器
docker logs查看容器日志
docker network ls查看网络
docker volume ls查看卷

六、镜像管理

拉取镜像

docker pull nginx:latest

构建自定义镜像

Dockerfile 示例:


FROM python:3.10 WORKDIR /app COPY . . RUN pip install flask CMD ["python", "app.py"]

构建镜像:


docker build -t myflask:v1 .

查看镜像:


docker images

删除镜像:


docker rmi myflask:v1


七、容器管理

启动容器

docker run -d -p 8080:80 nginx

命名容器

docker run -d --name web nginx

查看容器信息

docker inspect web

进入容器

docker exec -it web /bin/bash

停止与删除

docker stop web docker rm web


八、端口与网络映射

端口映射

docker run -d -p 8080:80 nginx

访问:


http://localhost:8080

创建自定义网络

docker network create mynet docker run -d --network=mynet --name=db mysql:8 docker run -d --network=mynet --name=web nginx

容器可通过服务名通信(db:3306)。

参考案例:www.rohjp.cn


九、数据卷(Volume)

创建与挂载

docker volume create data docker run -d -v data:/var/lib/mysql mysql:8

挂载主机目录:


docker run -v /home/app:/usr/src/app python:3.10

查看卷:


docker volume ls


十、Dockerfile 深入

指令说明
指令作用
FROM指定基础镜像
RUN执行命令
COPY复制文件
WORKDIR设置工作目录
ENV设置环境变量
EXPOSE声明端口
CMD容器启动命令
ENTRYPOINT入口命令
示例

FROM node:18 WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]


十一、容器日志与调试

查看日志:


docker logs -f web

查看容器内运行状态:


docker top web

导出容器:


docker export web > web.tar


十二、容器与镜像备份

导出镜像:


docker save -o myflask.tar myflask:v1

导入镜像:


docker load -i myflask.tar


十三、多阶段构建

减少镜像体积:


FROM node:18 as builder WORKDIR /app COPY . . RUN npm install && npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html


十四、Docker Compose 一体化部署

docker-compose.yml


version: "3.9" services: web: build: . ports: - "8080:80" depends_on: - db db: image: mysql:8 environment: MYSQL_ROOT_PASSWORD: 123456

运行:


docker-compose up -d


十五、容器网络模式

模式说明
bridge默认模式,私有网络
host与主机共享网络
none无网络
container与其他容器共享网络

示例:


docker run --network host nginx


十六、资源限制


docker run -d --cpus="1.5" --memory="512m" nginx

查看资源使用情况:


docker stats


十七、安全与权限

  • 使用非 root 用户运行:

    
    

    RUN adduser --disabled-password appuser USER appuser

  • 限制容器权限:

    
    

    docker run --cap-drop ALL nginx

  • 启用安全配置:

    
    

    docker scan myimage


十八、Docker Registry(私有仓库)

搭建私有镜像仓库:


docker run -d -p 5000:5000 --name registry registry:2

推送镜像:


docker tag myflask:v1 localhost:5000/myflask:v1 docker push localhost:5000/myflask:v1

拉取镜像:


docker pull localhost:5000/myflask:v1


十九、与 CI/CD 集成

GitLab CI 示例:


stages: - build - deploy build: stage: build script: - docker build -t myapp:$CI_COMMIT_SHA . - docker push myregistry.com/myapp:$CI_COMMIT_SHA

Jenkins Pipeline 示例:


stage('Build Docker') { steps { sh 'docker build -t myapp:latest .' sh 'docker-compose up -d' } }


二十、企业级实战场景

场景实践方案
微服务架构部署每个服务独立容器,统一网络
开发测试环境一致性同一镜像运行在不同平台
CI/CD 自动化发布Jenkins + Docker 构建与部署
高可用负载均衡Docker + Nginx + Compose 集群
日志与监控系统ELK 堆栈(Elasticsearch + Logstash + Kibana)
数据分析平台容器化部署 Hadoop/Spark
AI 推理服务GPU 容器化环境统一管理
安全隔离与沙箱每个容器独立运行环境

更多推荐