Docker 是现代开发的必备技能。本文从零开始,带你理解 Docker 的核心概念并上手实操。
什么是 Docker?
Docker 是一个容器化平台,可以把应用及其依赖打包到一个可移植的容器中,在任何环境中运行。
镜像 vs 容器:
- 镜像(Image):只读模板,类似操作系统的 ISO 文件
- 容器(Container):镜像的运行实例,类似虚拟机
📦 安装 Docker
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sudo sh
# 验证安装
sudo docker --version
# 免 sudo 运行(需重新登录)
sudo usermod -aG docker $USER
🏃 基础操作
拉取并运行镜像
docker run hello-world # 测试安装
docker run -d -p 80:80 nginx # 运行 Nginx
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
容器管理
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(含已停止的)
docker stop container_id # 停止容器
docker start container_id # 启动已停止的容器
docker rm container_id # 删除容器
docker logs container_id # 查看容器日志
镜像管理
docker images # 查看本地镜像
docker pull ubuntu:22.04 # 拉取镜像
docker rmi image_id # 删除镜像
docker system prune # 清理未使用的镜像和容器
🐳 Docker Compose — 多容器管理
创建 docker-compose.yml 文件:
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=123456
docker-compose up -d # 启动所有服务
docker-compose down # 停止所有服务
docker-compose ps # 查看服务状态
📂 数据持久化(Volume)
容器删除后数据会丢失,用 Volume 来持久化:
docker run -v /host/data:/container/data image_name
# 或者用 named volume
docker volume create mydata
docker run -v mydata:/data image_name
🌐 网络
docker network create mynet # 创建网络
docker run --network mynet --name app1 image1
docker run --network mynet --name app2 image2
# 容器之间可以通过名称互相访问!
🔧 Dockerfile — 构建自己的镜像
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
docker build -t myapp:latest .
docker run -p 5000:5000 myapp:latest
💡 实用小技巧
- 忘记某个命令的参数?
docker 命令 --help - 进入运行中的容器:
docker exec -it container_id bash - 查看容器资源占用:
docker stats - 清理所有无用资源:
docker system prune -a
下一篇预告:用 Docker 部署一个完整的 Web 应用(Nginx + Flask + MySQL)。
评论 (0)