📝 291 字 · ☕ 1 分钟阅读
什么是 Docker?
Docker 是一个容器化平台,让你可以把应用及其依赖打包到一个轻量级的「容器」中,在任何 Linux 系统上运行。相比虚拟机,Docker 容器不需要模拟操作系统,启动快(毫秒级)、资源占用少。
安装 Docker
# Ubuntu 24.04 / Debian 12
sudo apt update
sudo apt install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 验证安装
sudo docker run hello-world
Docker 基础命令
# 镜像操作
docker pull nginx:latest # 拉取镜像
docker images # 列出本地镜像
docker rmi nginx # 删除镜像
# 容器操作
docker run -d --name my-nginx -p 8080:80 nginx # 运行容器
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker stop my-nginx # 停止容器
docker start my-nginx # 启动容器
docker rm my-nginx # 删除容器
# 进入容器
docker exec -it my-nginx bash
# 查看日志
docker logs -f my-nginx
编写 Dockerfile
# Dockerfile - Python Flask 应用示例
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
构建和运行:
docker build -t my-flask-app .
docker run -d -p 5000:5000 my-flask-app
Docker Compose 多服务编排
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
docker compose up -d # 启动所有服务
docker compose down # 停止并删除
docker compose logs -f # 查看日志
数据持久化:Volume 和 Bind Mount
# Volume(Docker管理)
docker volume create mydata
docker run -v mydata:/app/data myapp
# Bind Mount(宿主机目录)
docker run -v /host/path:/container/path myapp
常用技巧
# 清理未使用的容器/镜像/网络
docker system prune -a
# 查看容器资源占用
docker stats
# 容器间网络通信(同一网络自动 DNS 解析)
docker network create mynet
docker run --network mynet --name web webapp
docker run --network mynet --name db database
常见问题
Q: 不加 sudo 运行 docker 命令?
sudo usermod -aG docker $USER
# 退出重新登录生效
Q: 容器退出后数据会丢失吗?
容器文件系统是临时的,重启或删除容器后数据丢失。重要数据务必使用 volume 或 bind mount 持久化。
总结
Docker 是现代 DevOps 的基石技术。掌握 docker run/build/compose 三板斧,就能应对绝大多数日常开发场景。