什么是 Docker
Docker 是一个开源的容器化平台,让开发者可以将应用程序和依赖打包成一个轻量级的容器,在任何环境中运行。「在我机器上能跑」的问题从此成为历史。
Docker 核心概念
镜像(Image)
镜像是一个只读的模板,包含应用程序和运行所需的一切。类似于编程中的「类」。
容器(Container)
容器是镜像的运行实例。类似于编程中的「对象」。可以创建、启动、停止、删除。
仓库(Registry)
仓库用于存储和分发镜像。Docker Hub 是最大的公共仓库。
安装 Docker
macOS
# 使用 Homebrew 安装 brew install --cask docker # 或者下载 Docker Desktop # 访问 https://www.docker.com/products/docker-desktop
验证安装
docker --version docker run hello-world
核心命令
镜像操作
# 拉取镜像 docker pull nginx:latest # 查看本地镜像 docker images # 删除镜像 docker rmi nginx:latest
容器操作
# 运行容器 docker run -d -p 8080:80 --name my-nginx nginx # 参数说明: # -d: 后台运行 # -p 8080:80: 端口映射(主机:容器) # --name: 容器名称 # 查看运行中的容器 docker ps # 进入容器 docker exec -it my-nginx bash
实战:搭建开发环境
1. Node.js 开发环境
docker run -d -p 3000:3000 -v $(pwd):/app -w /app node:latest npm start
2. MySQL 数据库
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret --name mysql mysql:8
3. Redis 缓存
docker run -d -p 6379:6379 --name redis redis:alpine
Docker Compose
Docker Compose 用于定义和运行多容器应用。
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
mysql_data:
# 启动所有服务 docker-compose up -d # 停止所有服务 docker-compose down
常见问题
Q: 容器和虚拟机有什么区别?
容器共享宿主机的内核,更轻量(秒级启动),资源占用更少。虚拟机需要完整操作系统,开机慢但隔离性更强。
Q: 如何备份容器数据?
使用数据卷(Volumes)存储重要数据,定期备份数据卷目录。
总结
Docker 是现代开发的必备技能。掌握 Docker,你可以快速搭建开发环境、部署应用程序、实现 CI/CD 自动化。建议每个开发者都学习 Docker。