docker微基础
云计算运维之docker
Docker
从零到上手
理解容器化原理,掌握核心概念与常用命令,学会把应用打包、运行、编排部署。
什么是 Docker?
Docker 是一个容器化平台,把应用和它所有依赖打包成一个轻量、可移植的"容器"。容器在任何环境里运行效果完全一致——笔记本、服务器、云主机都没区别。
它解决的核心问题是那句经典借口:"在我机器上明明能跑啊"。
| 对比项 | Docker 容器 | 传统虚拟机 |
|---|---|---|
| 启动速度 | 秒级(<1s) | 分钟级 |
| 磁盘占用 | MB 级 | GB 级 |
| 系统内核 | 与宿主机共享 | 各自完整 OS |
| 可移植性 | 极高 | 中等 |
| 隔离方式 | 进程级隔离 | 硬件级隔离 |
类比:容器就像标准集装箱——不管装什么货,船(服务器)只需支持标准接口,装卸统一处理。
核心概念
只读模板,包含代码、运行时和依赖。相当于"类",从它创建容器实例。
镜像的运行实例。每个容器独立隔离,有自己的文件系统和网络。
构建镜像的"配方",声明式描述如何一层层组装出镜像。
存储和分发镜像的服务,Docker Hub 是最大的公共仓库。
容器外的持久化存储,容器删除后数据依然保留。
虚拟网络,让容器之间互通,并控制哪些端口对外暴露。
安装 Docker
macOS / Windows
下载安装 Docker Desktop,含 Engine、CLI 和图形界面,开箱即用。访问 docker.com/products/docker-desktop 选对应系统版本。
Linux(官方脚本)
# 下载并运行官方安装脚本 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 把当前用户加入 docker 组 sudo usermod -aG docker $USER
验证安装
docker --version # Docker version 26.1.0, build a5ee5b1 docker run hello-world # Hello from Docker! 安装成功。
运行第一个容器
一条命令启动 Nginx Web 服务器:
docker run -d -p 8080:80 --name my-nginx nginx
-d 后台运行 · -p 8080:80 本机 8080 映射到容器 80 端口 · --name 给容器命名。打开浏览器访问 http://localhost:8080 即可看到欢迎页。
常用容器管理操作:
# 查看运行中的容器 docker ps # 停止 / 重新启动 docker stop my-nginx docker start my-nginx # 进入容器内部(交互式 Shell) docker exec -it my-nginx bash # 实时查看日志 docker logs -f my-nginx # 强制删除容器 docker rm -f my-nginx
编写 Dockerfile
在项目根目录创建 Dockerfile,把应用打包成镜像。以 Node.js 为例:
# 1. 选择基础镜像(alpine 版体积小) FROM node:20-alpine # 2. 设置工作目录 WORKDIR /app # 3. 先复制依赖文件,利用层缓存加速构建 COPY package*.json ./ RUN npm install --production # 4. 复制项目代码 COPY . . # 5. 声明容器对外端口 EXPOSE 3000 # 6. 容器启动命令 CMD ["node", "app.js"]
# 构建镜像,-t 指定名称与标签 docker build -t my-app:1.0 . # 运行容器 docker run -d -p 3000:3000 my-app:1.0
为什么先 COPY package.json? Docker 按层缓存构建。只要 package.json 没改变,npm install 层直接复用缓存,不重新安装,大幅加快后续构建速度。
Docker Compose
真实应用通常由多个服务组成——Web + 数据库 + 缓存。Compose 用一个 YAML 文件定义整套服务,一条命令全部启动。
# docker-compose.yml services: web: build: . ports: - "3000:3000" environment: - DATABASE_URL=postgres://user:pass@db:5432/mydb depends_on: - db - redis db: image: postgres:16-alpine volumes: - pg_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=secret redis: image: redis:7-alpine volumes: pg_data:
# 一键启动所有服务(后台运行) docker compose up -d # 查看服务状态 docker compose ps # 停止并清理(保留数据卷) docker compose down # 停止并删除数据卷 docker compose down -v
常用命令速查
docker ps -a列出所有容器(含已停止)docker images列出本地所有镜像docker pull <image>从仓库拉取镜像docker push <image>推送镜像到仓库docker logs -f <name>实时跟踪容器日志docker exec -it <name> sh进入容器交互式 Shelldocker inspect <name>查看容器或镜像详细信息docker stats实时查看容器资源用量docker volume ls列出所有数据卷docker system prune清理未使用的资源(慎用)下一步:研究多阶段构建(Multi-stage Build)来压缩镜像体积,或把镜像推送到 Docker Hub 与团队共享。