Docker
Docker 是一款轻量级的容器化平台,帮助开发者在任何环境下快速部署应用程序。它以容器的形式封装应用程序及其依赖环境,实现一致性、快速启动、资源隔离等优势。本篇文章将详细介绍 Docker 的基础指令及其工作原理,随后带你进入 Docker Compose 的进阶使用。
Docker 的核心原理
Docker 基于 镜像、容器、网络 和 数据卷 构建。
- 镜像(Image):不可变的只读模板,包含应用及其运行环境。
- 容器(Container):镜像的运行实例,应用运行的隔离环境。
- 网络(Network):提供容器之间及外部的通信能力。
- 数据卷(Volume):用于持久化存储,避免容器删除时数据丢失。
Docker 通过 Cgroups 和 Namespace 提供隔离和资源控制,同时依赖 UnionFS(联合文件系统) 实现镜像的层级存储。
Docker 基础指令
1. 镜像管理
1.1 获取镜像
从远程仓库(如 Docker Hub)拉取镜像:
docker pull <image>:<tag> # 示例 docker pull nginx:latest
1.2 列出本地镜像
查看已下载的镜像:
docker images
1.3 删除镜像
清理不再需要的镜像:
docker rmi <image>:<tag> # 强制删除 docker rmi -f <image>:<tag>
1.4 构建镜像
通过
Dockerfile
自定义构建镜像:docker build -t <image>:<tag> <context> # 示例 docker build -t myapp:1.0 .
1.5 检查镜像层
查看镜像的分层信息:
docker history <image>:<tag>
2. 容器管理
2.1 启动容器
基于镜像运行容器:
docker run [OPTIONS] <image> # 示例 docker run -d -p 8080:80 --name web nginx
- 常见选项:
d
:后台运行容器。p
:端口映射,格式为宿主机端口:容器端口
。-name
:为容器指定名称。v
:挂载数据卷。
2.2 查看容器
列出正在运行的容器:
docker ps
显示所有容器(包括停止的):
docker ps -a
2.3 停止与删除容器
停止容器:
docker stop <container>
删除容器:
docker rm <container>
2.4 进入容器
进入正在运行的容器交互模式:
docker exec -it <container> /bin/bash
2.5 查看容器日志
获取容器输出的日志:
docker logs <container> # 实时日志 docker logs -f <container>
2.6 检查容器资源
监控容器的 CPU、内存等使用情况:
docker stats
3. 网络管理
3.1 列出网络
查看所有网络:
docker network ls
3.2 创建网络
创建自定义网络:
docker network create <network-name>
3.3 启动容器连接网络
运行容器时指定网络:
docker run --network <network-name> <image>
3.4 查看容器网络
查看容器的网络配置:
docker inspect <container>
4. 数据卷管理
4.1 创建数据卷
定义持久化存储:
docker volume create <volume-name>
4.2 挂载数据卷
将数据卷挂载到容器:
docker run -v <volume-name>:<container-path> <image>
4.3 列出数据卷
查看现有的数据卷:
docker volume ls
4.4 删除数据卷
清理不再需要的数据卷:
docker volume rm <volume-name>
5. Dockerfile 指令
Dockerfile 是构建镜像的脚本,以下是常用指令:
# 基础镜像 FROM <base-image> # 设置维护者信息 MAINTAINER <name> # 拷贝文件到镜像 COPY <src> <dest> # 运行命令 RUN <command> # 容器启动命令 CMD ["executable", "param1", "param2"] # 暴露端口 EXPOSE <port> # 设置工作目录 WORKDIR <path>
示例:
FROM nginx:latest COPY index.html /usr/share/nginx/html EXPOSE 80
构建镜像:
docker build -t my-nginx:1.0 .
Docker Compose
Docker Compose 是用于定义和运行多容器应用的工具,基于
docker-compose.yml
文件简化管理。1. 安装 Docker Compose
在大多数系统中,Docker Desktop 已内置 Docker Compose。检查版本:
docker-compose version
2. Docker Compose 文件格式
Compose 文件采用 YAML 格式,主要部分包括:
- services:定义服务。
- volumes:定义数据卷。
- networks:定义网络。
示例:
version: "3.9" services: web: image: nginx ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html app: build: context: ./app networks: - app-network volumes: app-data: networks: app-network:
3. 常用指令
3.1 启动服务
启动所有服务:
docker-compose up
后台运行:
docker-compose up -d
3.2 查看服务状态
列出当前运行的服务:
docker-compose ps
3.3 停止服务
停止并清理服务:
docker-compose down
3.4 构建服务
重新构建服务:
docker-compose build
3.5 调试日志
查看服务日志:
docker-compose logs
实时日志:
docker-compose logs -f
4. 高级功能
4.1 配置扩展
Compose 支持多环境文件:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
4.2 Scale
扩展服务实例数量:
docker-compose up --scale <service>=<count>
4.3 环境变量
在
.env
文件中定义变量:APP_PORT=8080
在 Compose 文件中引用:
ports: - "${APP_PORT}:80"
5. 示例项目
完整示例:
version: "3.9" services: database: image: postgres:13 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: password volumes: - db-data:/var/lib/postgresql/data backend: build: context: ./backend depends_on: - database ports: - "5000:5000" frontend: build: context: ./frontend ports: - "3000:3000" depends_on: - backend volumes: db-data:
运行服务:
docker-compose up -d