在 Ubuntu 上使用 Docker Compose 的完整步骤
一 安装与准备
- 安装 Docker(如尚未安装):
- 更新索引并安装:sudo apt update && sudo apt install -y docker.io
- 启动并设置开机自启:sudo systemctl start docker && sudo systemctl enable docker
- 验证:sudo docker run --rm hello-world
- 安装 Docker Compose(任选其一)
- APT 插件方式(推荐,便于后续升级):sudo apt-get update && sudo apt-get install -y docker-compose-plugin
- 二进制方式(通用):
- 下载并安装(请将 v2.27.0 替换为最新稳定版本):
sudo curl -L “https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
- 赋权:sudo chmod +x /usr/local/bin/docker-compose
- 验证:docker-compose --version 或 docker compose version
- 免 sudo 使用 Docker(可选)
- 将当前用户加入 docker 组:sudo usermod -aG docker $USER,然后重新登录或重启会话。
二 快速上手示例 Nginx
- 准备目录与页面:
- mkdir -p ~/compose-demo/app && cd ~/compose-demo
- 写入页面:echo ‘
Docker Compose on Ubuntu
’ > app/index.html
- 创建 Compose 文件 docker-compose.yml:
- 使用插件:创建文件内容为
version: “3.8”
services:
web:
image: nginx:alpine
ports:
- “8000:80”
volumes:
- ./app:/usr/share/nginx/html
- 使用二进制:创建文件内容为
version: “3.8”
services:
web:
image: nginx:alpine
ports:
- “8000:80”
volumes:
- ./app:/usr/share/nginx/html
- 启动与验证:
- 启动:docker compose up -d(或 docker-compose up -d)
- 状态:docker compose ps(或 docker-compose ps)
- 访问:浏览器打开 http://localhost:8000(服务器用服务器 IP:8000)
- 日志:docker compose logs -f(或 docker-compose logs -f)
- 进入容器:docker compose exec web sh(或 docker-compose exec web sh)
三 常用命令速查
- 启动/停止/重启:docker compose up -d / down / restart
- 查看状态与日志:docker compose ps、docker compose logs -f
- 进入容器:docker compose exec
- 重建与清理:docker compose build、docker compose up --build、docker compose down -v(-v 同时删除卷)
四 生产可用的最小实践
- 使用命名卷持久化数据(示例为 postgres):
- version: “3.8”
services:
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: example
volumes:
- pg-data:/var/lib/postgresql/data
volumes:
pg-data:
- 设置项目开机自启(systemd 服务示例):
- 新建:sudo nano /etc/systemd/system/docker-compose-app.service
- 内容(按需修改路径与文件名):
[Unit]
Description=Docker Compose App
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/path/to/compose-demo
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
- 启用并启动:sudo systemctl enable --now docker-compose-app
- 安全与维护
- 避免在生产使用 latest 标签,固定版本号(如 nginx:1.26、postgres:15)
- 将敏感信息放入 .env 并使用 env_file 或 secrets 管理
- 仅暴露必要端口,使用 restart: unless-stopped 提升可用性。