1. 为什么需要Docker与Docker Compose?
在云原生时代,容器化技术已经成为开发和运维的标配。Docker作为最流行的容器引擎,允许开发者将应用及其依赖打包成轻量级、可移植的容器。而Docker Compose则是用于定义和运行多容器Docker应用的工具,通过一个YAML文件就能配置所有服务。
我最初接触Docker是在2016年,当时团队面临"在我机器上能跑"的经典问题。自从采用Docker后,环境一致性问题减少了80%以上。而Docker Compose更是让我们的微服务部署从原来的半天缩短到15分钟。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Docker-CE安装全指南
2.1 系统环境准备
在安装Docker前,需要确保系统满足以下要求:
- 64位Linux发行版(Ubuntu 16.04+/CentOS 7+)
- 内核版本3.10及以上(通过
uname -r检查) - 至少2GB可用磁盘空间
- 推荐4GB以上内存
注意:生产环境建议禁用swap,因为Docker的性能监控工具cgroups v1对swap支持不佳。
2.2 Ubuntu系统安装步骤
对于Ubuntu用户,以下是经过我多次验证的可靠安装流程:
- 卸载旧版本(如果有):
bash复制sudo apt-get remove docker docker-engine docker.io containerd runc
- 设置仓库:
bash复制sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 添加Docker官方GPG密钥:
bash复制sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
- 设置稳定版仓库:
bash复制echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装Docker引擎:
bash复制sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 验证安装:
bash复制sudo docker run hello-world
2.3 CentOS系统安装差异
CentOS的安装流程与Ubuntu类似,但有以下关键区别:
- 必须首先安装
yum-utils:
bash复制sudo yum install -y yum-utils
- 仓库设置命令不同:
bash复制sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装后需要手动启动服务:
bash复制sudo systemctl start docker
sudo systemctl enable docker
经验:CentOS 7默认使用devicemapper存储驱动,建议改为overlay2以获得更好性能。修改方法是在
/etc/docker/daemon.json中添加:json复制{ "storage-driver": "overlay2" }
3. Docker Compose独立安装方案
虽然新版Docker已内置compose-plugin,但很多项目仍在使用独立的docker-compose。以下是两种安装方式:
3.1 官方二进制安装(推荐)
这是最通用的方法,适用于所有Linux发行版:
bash复制sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash复制docker-compose --version
3.2 通过pip安装
对于Python环境完善的主机,也可以使用pip安装:
bash复制sudo pip install docker-compose
避坑提示:如果同时存在pip和二进制安装的版本,可能会产生冲突。建议只选择一种安装方式。
4. 常见问题排查与优化
4.1 权限问题解决方案
默认情况下,Docker需要sudo权限。为了免sudo使用docker,可以:
- 创建docker用户组(如果不存在):
bash复制sudo groupadd docker
- 将当前用户加入docker组:
bash复制sudo usermod -aG docker $USER
- 重新登录或运行:
bash复制newgrp docker
警告:在生产环境中,谨慎使用此方法,因为这相当于给了用户root权限。
4.2 镜像加速配置
国内用户经常会遇到拉取镜像慢的问题。可以通过配置镜像加速解决:
- 创建或修改
/etc/docker/daemon.json:
json复制{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
- 重启Docker服务:
bash复制sudo systemctl restart docker
4.3 磁盘空间管理
Docker会占用大量磁盘空间,特别是频繁构建镜像时。建议:
- 定期清理无用对象:
bash复制docker system prune
- 查看磁盘使用情况:
bash复制docker system df
- 对于生产环境,建议单独挂载大容量磁盘到
/var/lib/docker
5. 实战:使用Docker Compose部署应用
5.1 编写docker-compose.yml
以下是一个典型的web应用+数据库的compose文件示例:
yaml复制version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
5.2 常用命令速查
- 启动服务:
docker-compose up -d - 停止服务:
docker-compose down - 查看日志:
docker-compose logs -f - 重建服务:
docker-compose up -d --build - 执行命令:
docker-compose exec service_name command
5.3 性能优化技巧
- 对于开发环境,可以启用缓存:
yaml复制services:
web:
build:
context: .
cache_from:
- myapp:latest
- 限制资源使用:
yaml复制services:
db:
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
- 使用
.env文件管理环境变量,避免硬编码敏感信息
6. 版本管理与升级策略
6.1 查看当前版本
bash复制docker --version
docker-compose --version
6.2 Docker升级方法
对于Ubuntu:
bash复制sudo apt-get update
sudo apt-get upgrade docker-ce
对于CentOS:
bash复制sudo yum update docker-ce
6.3 Docker Compose升级
如果是二进制安装:
bash复制sudo rm /usr/local/bin/docker-compose
# 然后重新安装新版本
如果是pip安装:
bash复制sudo pip install --upgrade docker-compose
重要:升级前建议备份重要的容器和数据。我曾在一次升级中遇到过不兼容问题,导致需要重建部分容器。
7. 安全最佳实践
7.1 非root用户运行
考虑使用rootless模式运行Docker:
bash复制dockerd-rootless-setuptool.sh install
7.2 镜像安全扫描
使用内置工具扫描镜像漏洞:
bash复制docker scan <image-name>
7.3 网络隔离
为不同项目创建独立网络:
bash复制docker network create my_project_network
然后在compose文件中指定:
yaml复制networks:
default:
name: my_project_network
driver: bridge
7.4 定期审计
检查运行容器的安全配置:
bash复制docker container ls --quiet | xargs docker container inspect
我在实际运维中发现,很多安全问题都源于默认配置。建议至少每季度进行一次完整的安全审计。
