Linux环境下Docker部署全指南:从安装到防火墙配置
作为一名长期在Linux环境下工作的开发者,我深刻理解新手在初次接触Docker时可能遇到的困惑。特别是在企业级环境中,防火墙配置不当往往会导致Docker服务无法正常启动,这个问题困扰过无数刚入门的开发者。本文将带你系统性地掌握Docker在Linux平台上的完整部署流程,特别针对防火墙这一关键环节提供专业解决方案。
1. 准备工作与环境检查
在开始安装Docker之前,我们需要确保系统环境满足基本要求。以CentOS 7/8或RHEL 7/8为例,建议使用64位系统内核版本不低于3.10。可以通过以下命令检查系统信息:
uname -r # 查看内核版本
cat /etc/os-release # 查看系统发行版信息
对于生产环境,我强烈建议先更新系统组件到最新状态:
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
常见问题排查:
- 如果遇到"Could not resolve host"错误,需要先配置网络连接
- 如果系统时间不正确,会导致证书验证失败,可使用
ntpdate同步时间
提示:在企业内网环境中,可能需要先配置代理才能访问外部仓库,这需要与网络管理员确认。
2. Docker引擎安装详解
不同于简单地复制粘贴安装命令,我们需要理解每个步骤的作用。以下是经过优化的安装流程:
2.1 配置可靠的软件源
国内用户建议使用阿里云镜像加速下载:
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
对于海外服务器,可以使用官方源:
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
更新软件包索引:
sudo yum makecache fast
2.2 安装Docker核心组件
推荐安装特定版本而非最新版,以确保稳定性:
sudo yum install -y docker-ce-20.10.12 docker-ce-cli-20.10.12 containerd.io
安装完成后验证组件:
rpm -qa | grep docker
2.3 服务管理与自启动配置
启动Docker服务并设为开机自启:
sudo systemctl start docker
sudo systemctl enable docker
验证安装是否成功:
sudo docker run hello-world
3. 防火墙与网络配置最佳实践
许多新手在安装Docker后遇到的最大障碍就是防火墙配置。完全关闭防火墙不是专业做法,我们需要更精细的配置。
3.1 防火墙基本规则配置
对于firewalld用户,建议添加以下规则而非完全禁用防火墙:
sudo firewall-cmd --permanent --zone=public --add-masquerade
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --reload
3.2 Docker与防火墙的深度整合
创建专门的Docker防火墙区域:
sudo firewall-cmd --permanent --new-zone=docker
sudo firewall-cmd --permanent --zone=docker --add-source=172.17.0.0/16
sudo firewall-cmd --permanent --zone=docker --add-interface=docker0
sudo firewall-cmd --reload
3.3 关键端口开放参考
根据使用场景,可能需要开放以下端口:
| 端口号 | 协议 | 用途 | 是否必需 |
|---|---|---|---|
| 2375 | TCP | Docker守护进程API | 可选 |
| 2376 | TCP | TLS加密的Docker API | 可选 |
| 7946 | TCP | 容器网络发现 | 集群需要 |
| 4789 | UDP | overlay网络流量 | 集群需要 |
4. 生产环境优化配置
4.1 镜像加速器配置
创建或修改daemon.json配置文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
应用配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
4.2 存储与日志管理
查看Docker磁盘使用情况:
docker system df
设置日志轮转策略:
sudo tee /etc/logrotate.d/docker <<-'EOF'
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
missingok
delaycompress
copytruncate
}
EOF
4.3 用户权限与安全配置
将当前用户加入docker组(需重新登录生效):
sudo usermod -aG docker $USER
配置TLS证书保护Docker API:
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout ca.key -x509 -days 365 -out ca.crt
5. 常见问题与故障排除
5.1 服务启动失败排查
检查服务状态和日志:
systemctl status docker -l
journalctl -xe -u docker --no-pager
5.2 网络连接问题处理
检查Docker网络配置:
docker network ls
docker inspect <container_id> | grep IPAddress
重置Docker网络:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/network
sudo systemctl start docker
5.3 存储驱动问题解决
检查当前存储驱动:
docker info | grep "Storage Driver"
转换存储驱动为overlay2:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo mkdir -p /var/lib/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"storage-driver": "overlay2"
}
EOF
sudo systemctl start docker
在实际项目中,我发现很多团队在初次部署Docker时都会忽视日志管理和存储限制的配置,这往往在运行一段时间后导致磁盘空间耗尽。建议在安装初期就规划好这些基础配置,避免后期出现生产事故。
480



被折叠的 条评论
为什么被折叠?



