Docker 创建及部署完整流程
一、Docker 环境准备
1. 安装 Docker
-
Linux:
curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker
-
Windows/macOS:
下载 Docker Desktop
2. 验证安装
docker --version
docker run hello-world
二、Docker 镜像创建流程
1. 编写 Dockerfile
# 基础镜像
FROM node:16-alpine# 设置工作目录
WORKDIR /app# 复制文件
COPY package*.json ./
COPY . .# 安装依赖
RUN npm install# 暴露端口
EXPOSE 3000# 启动命令
CMD ["npm", "start"]
2. 构建镜像
docker build -t my-app:1.0 .
3. 查看镜像
docker images
三、Docker 容器运行
1. 运行容器
docker run -d -p 3000:3000 --name my-app-container my-app:1.0
2. 常用操作命令
# 查看运行中的容器
docker ps# 查看所有容器
docker ps -a# 停止容器
docker stop my-app-container# 启动已停止的容器
docker start my-app-container# 进入容器
docker exec -it my-app-container sh# 查看日志
docker logs -f my-app-container
四、Docker 部署方案
1. 单机部署
# 带环境变量运行
docker run -d -p 3000:3000 \-e NODE_ENV=production \--name my-app-prod \my-app:1.0
2. Docker Compose 部署
创建 docker-compose.yml
:
version: '3.8'
services:app:image: my-app:1.0ports:- "3000:3000"environment:- NODE_ENV=productionvolumes:- ./logs:/app/logs
启动服务:
docker-compose up -d
3. 生产环境部署 (Swarm/Kubernetes)
Docker Swarm 示例:
# 初始化Swarm
docker swarm init# 部署服务
docker stack deploy -c docker-compose.yml my-app
Kubernetes 示例 (deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-appimage: my-app:1.0ports:- containerPort: 3000
五、镜像管理
1. 推送到 Docker Hub
# 登录
docker login# 标记镜像
docker tag my-app:1.0 username/my-app:1.0# 推送
docker push username/my-app:1.0
2. 私有仓库使用
# 拉取私有仓库镜像
docker pull registry.example.com/my-app:1.0# 推送镜像到私有仓库
docker tag my-app:1.0 registry.example.com/my-app:1.0
docker push registry.example.com/my-app:1.0
六、最佳实践
-
镜像优化:
# 多阶段构建示例 FROM node:16 as builder WORKDIR /app COPY . . RUN npm install && npm run buildFROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html
-
安全建议:
- 不要以 root 用户运行容器
- 定期更新基础镜像
- 扫描镜像漏洞 (
docker scan my-app:1.0
)
-
监控与日志:
# 查看资源使用 docker stats# 日志驱动配置 docker run --log-driver=syslog ...
-
网络配置:
# 创建自定义网络 docker network create my-network# 连接容器到网络 docker run --network=my-network ...
七、常用工具链
-
开发工具:
- Docker Desktop (GUI管理)
- VS Code Docker 扩展
-
CI/CD 集成:
# GitHub Actions 示例 jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- run: docker build -t my-app .
-
编排工具:
- Docker Compose
- Kubernetes
- Docker Swarm
-
监控工具:
- cAdvisor
- Portainer (可视化管理)
按照这个流程,您可以完成从开发到生产的完整 Docker 应用生命周期管理。