mac 搭建docker-compose,部署docker应用

Mac搭建Docker Compose部署应用步骤

Mac 上搭建 Docker / Docker Compose 并部署应用 的“从零到可用”清晰步骤(适配 Intel 与 Apple Silicon)。我用两个示例演示:n8n 单服务web+db 典型组合。直接跟着做即可。

1) 安装与准备

方案 A:Docker Desktop(最省事,含 Compose v2)

  1. 去官网下载并安装 Docker Desktop for Mac(M 系列或 Intel 版本对应下载)。

  2. 安装后打开 Docker Desktop,等待右上角鲸鱼图标稳定(Daemon 已就绪)。

  3. 终端验证:

    docker --version
    docker compose version
    

说明:Compose v2 命令为 docker compose ...(空格)。如果你更习惯旧语法 docker-compose,Docker Desktop 也会附带兼容层。

方案 B:Colima(轻量开源替代)

如果不想装 Desktop,可用 Homebrew+Colima:

brew install colima docker docker-compose
colima start
docker --version
docker compose version

Apple Silicon 如需 x86 镜像,可用 colima start --arch x86_64(性能略降)。

2) 目录与权限

为你的项目建一个目录并放置 Compose 文件:

mkdir -p ~/apps/myapp && cd ~/apps/myapp

注意 Mac 文件共享:默认只有你的用户目录是可挂载的(如 ~/apps)。把 volumes: 指向用户目录内的路径,避免权限问题。

3) 示例一:n8n(单服务)

~/apps/n8n/ 下新建 docker-compose.yml

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_SECURE_COOKIE=false
      - GENERIC_TIMEZONE=Asia/Shanghai   # 按需改
    user: "${UID:-1000}:${GID:-1000}"
    volumes:
      - ./data:/home/node/.n8n
    restart: unless-stopped

启动:

cd ~/apps/n8n
# 让容器以你当前用户身份运行(避免生成 root 文件)
export UID && export GID
docker compose up -d
docker compose logs -f

访问:http://localhost:5678

迁移自你之前的命令:这里等价于“后台运行、所有网段可访问(默认映射到 0.0.0.0)、持久化数据卷”的 Compose 版本。

4) 示例二:Web + Postgres(典型两容器)

~/apps/webstack/ 下新建 .envdocker-compose.yml

.env

POSTGRES_PASSWORD=secret123
POSTGRES_DB=appdb
POSTGRES_USER=appuser
TZ=Asia/Shanghai

docker-compose.yml

services:
  db:
    image: postgres:16
    container_name: webstack-db
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_DB=${POSTGRES_DB}
      - TZ=${TZ}
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER"]
      interval: 5s
      timeout: 3s
      retries: 10
    restart: unless-stopped

  web:
    image: nginx:alpine
    container_name: webstack-web
    ports:
      - "8080:80"
    volumes:
      - ./site:/usr/share/nginx/html:ro
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

初始化并启动:

mkdir -p ~/apps/webstack/site ~/apps/webstack/pgdata
echo "<h1>Hello from Nginx</h1>" > ~/apps/webstack/site/index.html
cd ~/apps/webstack
docker compose --env-file .env up -d

访问:http://localhost:8080

5) 常用操作

# 查看运行中容器
docker ps

# 查看项目服务状态
docker compose ps

# 查看日志
docker compose logs -f           # 全部
docker compose logs -f web       # 指定服务

# 构建(如果有 Dockerfile)
docker compose build

# 停止/删除
docker compose down              # 停并删容器(不删卷)
docker compose down -v           # 连带卷一起删(谨慎)

6) Apple Silicon(M1/M2/M3)提示

  • 优先选择 多架构镜像(带 linux/arm64)。

  • 遇到只支持 x86_64 的镜像:

    • Docker Desktop:设置里启用 Use Rosetta for x86/amd64 emulation(性能受影响)。

    • 或手动拉取并指定平台:

      docker pull --platform=linux/amd64 someimage:tag
      docker run --platform=linux/amd64 ...
      
  • 自建镜像建议用 buildx 出多架构包:

    docker buildx create --use
    docker buildx build --platform linux/amd64,linux/arm64 -t your/repo:tag --push .
    

7) 生产化加强(可选)

  • Traefik/Nginx 反向代理 + HTTPS:用 Traefik 作为网关,按域名路由到各服务,自动签发/续签证书。
  • 数据持久化:把数据库、应用数据目录都映射到 ./data 等路径,并纳入 Time Machine/备份。
  • 备份:数据库用 pg_dump/mysqldump + cron(可用一个“backup”服务容器)定时备份至本地或对象存储。
  • .env 管理:敏感变量放 .env,不要提交到仓库。

8) 常见问题排查

  • 卷权限问题:挂载到你用户目录;必要时在服务上加 user: "${UID}:${GID}"
  • 端口被占用:换映射端口,如 "8081:80"
  • 镜像架构不匹配:指定 --platform 或启用 Rosetta。
  • 文件共享失败(Docker Desktop):Settings → Resources → File Sharing 里把工程目录加入可共享路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值