在Ubuntu服务器上同时运行多个Docker容器有多种方法,以下是主要方案:
1. 直接使用Docker命令
# 分别启动多个容器
docker run -d --name container1 nginx:latest
docker run -d --name container2 redis:latest
docker run -d --name container3 mysql:latest
# 查看所有运行中的容器
docker ps
# 批量停止/启动
docker stop container1 container2 container3
docker start container1 container2 container3
2. 使用Docker Compose(推荐)
创建 docker-compose.yml 文件:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
redis:
image: redis:alpine
networks:
- app-network
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
mysql-data:
运行所有服务:
# 安装Docker Compose(如果未安装)
sudo apt update
sudo apt install docker-compose
# 启动所有容器
docker-compose up -d
# 查看状态
docker-compose ps
# 停止所有容器
docker-compose down
3. 使用Docker Swarm(集群管理)
# 初始化Swarm
docker swarm init
# 部署服务栈
docker stack deploy -c docker-compose.yml myapp
# 查看服务
docker service ls
4. 使用脚本批量管理
创建管理脚本 manage_containers.sh:
#!/bin/bash
containers=("web" "api" "db" "cache")
case "$1" in
start)
for container in "${containers[@]}"; do
docker start $container
done
;;
stop)
for container in "${containers[@]}"; do
docker stop $container
done
;;
restart)
for container in "${containers[@]}"; do
docker restart $container
done
;;
*)
echo "用法: $0 {start|stop|restart}"
exit 1
esac
5. 最佳实践建议
资源管理
# 限制容器资源
docker run -d --name app
--memory="512m"
--cpus="1.0"
--cpu-shares=512
nginx:latest
网络配置
# 创建自定义网络
docker network create my-network
# 容器加入同一网络
docker run -d --name container1 --network my-network nginx
docker run -d --name container2 --network my-network redis
监控和日志
# 查看所有容器状态
docker stats
# 查看所有容器日志
docker-compose logs -f
# 设置日志轮转
docker run --log-driver=json-file
--log-opt max-size=10m
--log-opt max-file=3
nginx:latest
自动重启策略
# 容器崩溃时自动重启
docker run -d --restart=always --name web nginx:latest
# 重启策略选项:
# no - 不自动重启(默认)
# on-failure[:max-retries] - 失败时重启
# always - 总是重启
# unless-stopped - 除非手动停止
6. 使用systemd管理(生产环境)
创建 /etc/systemd/system/docker-app.service:
[Unit]
Description=My Docker Application
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/myapp
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
选择建议
- 少量容器:直接使用
docker run命令 - 开发/测试环境:使用 Docker Compose
- 生产环境多容器:Docker Compose + systemd 或 Docker Swarm
- 大规模集群:考虑 Kubernetes 或 Docker Swarm
注意事项
- 确保有足够的内存和CPU资源
- 配置适当的容器重启策略
- 使用数据卷持久化重要数据
- 设置合理的日志轮转策略
- 为不同容器配置独立的网络命名空间
- 定期更新容器镜像和安全补丁
通过以上方法,您可以在Ubuntu服务器上高效地管理和运行多个Docker容器。
CLOUD技术笔记