ARTICLE

DMIT Docker 部署指南:安装到多服务编排

在 DMIT 上安装 Docker 与 Compose,构建镜像、多服务编排、数据持久化与安全配置。

为什么用 Docker

Docker 容器化部署让应用与依赖打包在一起,环境一致、迁移方便。DMIT 云服务器支持 Docker,本文介绍在 DMIT 上使用 Docker 部署服务的完整流程。

安装 Docker

# Debian/Ubuntu
apt update
apt install ca-certificates curl gnupg -y
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
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/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 验证
docker --version
docker compose version
docker run hello-world

安装 Docker Compose

Docker Compose 已通过 docker-compose-plugin 安装。验证:

docker compose version

使用 docker compose(空格)而非旧版 docker-compose(连字符)。

基本用法

运行单个容器

# 运行 Nginx
docker run -d --name web -p 80:80 nginx:alpine

# 查看运行中的容器
docker ps

# 查看日志
docker logs web

# 进入容器
docker exec -it web sh

# 停止和删除
docker stop web
docker rm web

使用 Dockerfile 构建镜像

# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
# 构建和运行
docker build -t myapp:latest .
docker run -d --name myapp -p 3000:3000 myapp:latest

Docker Compose 多服务编排

典型 Web 应用:Nginx + Node.js + PostgreSQL。

# docker-compose.yml
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
    depends_on:
      - app

  app:
    build: ./app
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:
# 启动所有服务
docker compose up -d

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f

# 停止
docker compose down

# 重建并启动
docker compose up -d --build

数据持久化

容器本身是无状态的,数据需要通过 volumes 持久化:

# 命名卷(由 Docker 管理)
volumes:
  - db_data:/var/lib/postgresql/data

# 绑定挂载(映射到主机目录)
volumes:
  - ./uploads:/app/uploads
  - ./config:/app/config

网络配置

# 创建自定义网络
docker network create mynet

# 容器间通过服务名通信
services:
  app:
    networks:
      - mynet
  db:
    networks:
      - mynet

networks:
  mynet:
    driver: bridge

同一网络内的容器可以用服务名互相访问(如 db:5432),无需暴露端口到主机。

IPv6 与 Docker

DMIT 默认分配 IPv6,Docker 也支持 IPv6。在 /etc/docker/daemon.json 中启用:

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00:dead:beef::/64",
  "experimental": true,
  "ip6tables": true
}
systemctl restart docker

更多 IPv6 配置见《IPv6 配置教程》。

资源限制

限制容器资源防止单个容器耗尽主机资源:

services:
  app:
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 512M
        reservations:
          memory: 256M

更多资源管理方法见《性能调优指南》。

日志管理

Docker 日志默认无限制增长,需配置日志轮转:

# /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

安全注意事项

  • 不要以 root 运行容器内进程——使用 USER 指令
  • 限制容器权限:security_opt: [no-new-privileges:true]
  • 不要暴露 Docker Socket(2375/2376 端口)到公网
  • 定期更新镜像:docker compose pull && docker compose up -d
  • 使用 .dockerignore 排除敏感文件

SSH 安全加固见《SSH 安全加固》。

备份 Docker 数据

# 备份命名卷
docker run --rm -v db_data:/data -v $(pwd):/backup alpine tar czf /backup/db_data.tar.gz /data

# 恢复
docker run --rm -v db_data:/data -v $(pwd):/backup alpine tar xzf /backup/db_data.tar.gz /data

更多备份策略见《监控与备份》。

常见问题

容器无法访问外网?

# 检查 DNS
docker run --rm alpine nslookup google.com

# 检查网络
docker network inspect bridge

端口被占用?

# 查看占用进程
ss -tlnp | grep :80
# 停止占用进程或更换映射端口

磁盘空间不足?

# 清理无用镜像和容器
docker system prune -a --volumes
# 查看磁盘使用
docker system df

更多故障排查见《故障排查指南》。

检查清单

项目状态
Docker 已安装✓ docker --version
Compose 已安装✓ docker compose version
容器以非 root 运行✓ USER 指令
日志轮转已配置✓ daemon.json
数据已持久化✓ volumes 配置
资源限制已设置✓ deploy.resources
Docker Socket 未暴露✓ 不开放 2375

相关文章:《初次部署检查清单》、《迁移指南》、《成本优化》。

本文核对日期:2026-08-18。Docker 安装命令以官方文档为准。

NEXT STEP

看完教程,选一台合适的 DMIT

用套餐快照按预算与线路筛选,或直接前往官网查看实时库存。

推广披露:通过链接购买可能为推荐者带来佣金,不会增加你的购买价格。