Rocky Linux 8 极速部署Docker:从零到精通的实战手册
1. 环境准备与Docker安装
Rocky Linux 8作为CentOS的继承者,继承了其稳定性和企业级特性,是部署Docker的理想选择。在开始之前,确保你拥有sudo权限的账户,并且系统已经更新到最新状态。我遇到过不少因为系统未更新导致依赖冲突的情况,所以建议先执行:
sudo dnf update -y
接下来安装必要的工具集。这里有个小技巧:如果你不确定某个包的作用,可以用dnf info 包名查看详情。比如yum-utils提供了yum-config-manager这个关键工具,而device-mapper-persistent-data和lvm2是Docker存储驱动的基础:
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
添加软件源时,国内用户建议使用阿里云镜像加速。这里有个坑要注意:Rocky Linux 8的软件源标识是"centos8",虽然系统名称变了但兼容性保持得很好:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker-CE时,makecache fast会建立元数据缓存加速后续操作。实测在2核4G的云服务器上,完整安装过程通常不超过3分钟:
sudo dnf makecache fast
sudo dnf install -y docker-ce docker-ce-cli containerd.io
启动服务后,建议设置开机自启。很多新手会忘记这一步,结果重启服务器后Docker服务没自动运行:
sudo systemctl start docker
sudo systemctl enable docker
验证安装时,除了看版本号,我习惯用docker info检查存储驱动等详细信息。如果看到Storage Driver: overlay2就说明基础环境正常:
docker version
docker info | grep Storage
2. 镜像管理实战技巧
刚装好的Docker就像新手机,需要先下载应用(镜像)才能使用。我强烈建议先配置镜像加速器,否则拉取镜像时可能会慢得怀疑人生。创建或修改/etc/docker/daemon.json:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF
重载配置后,拉取第一个镜像试试。新手常犯的错误是直接拉latest标签,生产环境应该指定具体版本:
sudo systemctl restart docker
docker pull nginx:1.21-alpine
管理本地镜像时,docker images会显示所有镜像,但更推荐用--format参数定制输出。这个命令可以按占用空间排序显示镜像:
docker images --format "{{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k4 -h
清理镜像有讲究,我整理了几个实用命令。删除所有悬空镜像(none标签的中间层镜像)可以节省大量空间:
docker image prune -f
如果要删除特定镜像,记住先删除依赖它的容器。这个组合命令可以强制删除指定镜像及其关联容器:
docker rm -f $(docker ps -aq --filter ancestor=镜像名) 2>/dev/null && docker rmi 镜像名
3. 容器生命周期管理
创建容器时,-it参数组合是交互式容器的黄金搭档。但生产环境更多用-d后台运行,配合--restart实现故障自愈:
docker run -d --name web --restart always -p 80:80 nginx:1.21-alpine
查看容器状态时,docker ps默认只显示运行中容器。我习惯用这个别名快速查看所有容器的简明状态:
alias dps='docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
进入运行中容器有几种方式,但docker exec是最安全的。注意:生产环境慎用-it直接操作,建议通过日志和配置文件管理:
docker exec -it web sh
停止和删除容器时,批量操作能提高效率。这个命令可以停止并删除所有非运行状态的容器:
docker rm -f $(docker ps -aq --filter status=exited)
数据持久化是容器使用的重点。挂载目录时建议用绝对路径,-v参数的宿主机目录如果不存在会自动创建:
docker run -d -v /opt/app:/usr/share/nginx/html --name webapp nginx:1.21-alpine
4. 生产环境进阶配置
日志管理是运维重点,默认的json-file驱动会占用大量磁盘。建议配置日志轮转,在daemon.json中添加:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
资源限制能防止单个容器耗尽系统资源。CPU和内存限制可以这样设置,特别是内存限制能避免OOM杀手误杀重要进程:
docker run -d --name db --memory="2g" --cpus="1.5" -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
网络配置方面,默认的bridge网络可能不满足需求。创建自定义网络能实现更好的隔离和DNS解析:
docker network create --subnet=172.20.0.0/16 mynet
docker run -d --net mynet --ip 172.20.0.2 --name service1 nginx
健康检查是生产环境必备功能。在Dockerfile中添加HEALTHCHECK指令,或运行时指定检查策略:
docker run -d --health-cmd="curl -f http://localhost || exit 1" --health-interval=5s --health-timeout=3s --health-retries=3 nginx
备份恢复方面,建议定期导出重要容器。这个命令可以打包容器文件系统,配合数据卷备份更安全:
docker export web > web_container.tar
cat web_container.tar | docker import - web_backup
更多推荐
所有评论(0)