
容器管理
docker run -d -p 8080:80 --name my_container nginx:启动一个名为 my_container 的 Nginx 容器,映射主机 8080 端口到容器的 80 端口。
docker ps -a:查看所有容器(包括已停止的)。
docker stop/start/restart my_container:停止/启动/重启容器。
docker rm my_container:删除容器。
镜像管理
docker build -t my_image .:根据当前目录的 Dockerfile 构建镜像并命名为 my_image。
docker images:列出本地镜像。
docker rmi my_image:删除镜像。
日志与调试
docker logs my_container:查看容器日志。
docker exec -it my_container /bin/bash:进入容器交互式终端。
单容器部署
编写 Dockerfile 定义应用环境,构建镜像后通过 docker run 启动。例如部署一个 Python Flask 应用:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]多容器部署(Docker Compose)
使用 docker-compose.yml 定义服务依赖。例如部署一个 Web 应用 + MySQL:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example运行 docker-compose up -d 启动所有服务。
Node.js 应用示例
FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]关键指令说明
FROM:指定基础镜像。COPY:复制文件到容器内。RUN:执行构建命令(如安装依赖)。EXPOSE:声明容器运行时监听的端口。CMD:定义容器启动命令。场景 部署一个 FastAPI 服务,依赖 Redis 缓存,需保证高可用性。
解决方案
FROM python:3.8
WORKDIR /code
COPY ./requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]version: '3'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- redis
redis:
image: redis:alpine
volumes:
- redis_data:/data
volumes:
redis_data:关键点
depends_on 确保 Redis 先启动。volumes 持久化 Redis 数据。Dockerfile 添加健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8000/health || exit 1多阶段构建优化镜像大小
# 构建阶段
FROM python:3.8 as builder
WORKDIR /install
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 运行阶段
FROM python:3.8-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]