1. Docker基础环境配置
1.1 系统防火墙管理
在Linux环境下使用Docker时,防火墙配置是首要考虑的问题。CentOS/RHEL系统默认使用firewalld作为防火墙管理工具,而Docker容器需要特定的网络访问权限才能正常运行。以下是详细的防火墙管理操作:
bash复制# 临时停止防火墙服务(立即生效但重启后恢复)
systemctl stop firewalld
# 永久禁用防火墙开机自启(需重启生效)
systemctl disable firewalld
# 验证防火墙状态(Active: inactive表示已关闭)
systemctl status firewalld
重要提示:生产环境中不建议直接关闭防火墙,而应该通过添加特定规则来放行Docker所需端口。测试环境关闭防火墙可以避免初学者的配置困扰。
1.2 Docker服务管理
Docker以系统服务形式运行,使用systemctl进行管理是其标准操作方式。以下是完整的服务管理命令集:
bash复制# 启动Docker引擎
systemctl start docker
# 停止Docker引擎(所有运行中的容器将随之停止)
systemctl stop docker
# 重启Docker服务(配置变更后常用)
systemctl restart docker
# 查看Docker服务状态(关注Active和Loaded状态)
systemctl status docker
# 验证Docker客户端是否可用(显示版本号即成功)
docker -v
典型成功状态显示示例:
Active: active (running)表示服务正常运行Loaded: enabled表示已设置开机自启Docker version 20.10.17之类的版本信息表示客户端连接正常
2. Docker镜像管理实战
2.1 本地镜像操作
镜像作为Docker的核心组件,其管理命令需要熟练掌握:
bash复制# 列出本地所有镜像(包含TAG、IMAGE ID等信息)
docker images
# 将镜像打包为离线文件(适合迁移部署)
docker save -o nginx.tar nginx:1.21.0
# 从tar文件加载镜像(适用于离线环境)
docker load -i nginx.tar
# 删除指定镜像(需先停止相关容器)
docker rmi nginx:1.21.0
镜像操作注意事项:
- 使用
docker images时注意REPOSITORY和TAG的组合才是完整镜像标识 docker save生成的文件可能较大,建议配合gzip压缩- 删除镜像前确保没有容器依赖,否则会报"image is being used"错误
2.2 远程镜像管理
Docker Hub是默认的公共镜像仓库,实际工作中需要掌握其使用方法:
bash复制# 从Docker Hub拉取镜像(不指定tag则默认latest)
docker pull nginx:1.21.0
# 搜索公共镜像(支持名称过滤)
docker search redis
镜像版本选择建议:
- 生产环境避免使用latest标签,明确指定版本号
- 优先选择官方镜像(OFFICIAL标记)
- 注意不同架构的镜像兼容性(如arm64 vs amd64)
3. 容器生命周期管理
3.1 容器基础操作
容器是镜像的运行实例,其管理命令是Docker的核心:
bash复制# 查看运行中的容器(-a显示所有状态)
docker ps -a
# 删除已停止的容器(-f强制删除运行中的)
docker rm 容器ID
# 创建并启动容器(最复杂也最常用的命令)
docker run --name my_nginx -p 8080:80 -d nginx:1.21.0
关键参数解析:
--name:指定容器名称(否则自动生成)-p:端口映射(主机端口:容器端口)-d:后台运行(detached模式)-v:数据卷挂载(后续详述)
3.2 容器网络配置
端口映射是容器网络访问的基础,需要深入理解:
bash复制# 单端口映射(主机8080→容器80)
docker run -p 8080:80 nginx
# 多端口映射(可同时暴露多个服务端口)
docker run -p 8080:80 -p 8443:443 nginx
# 随机主机端口(自动分配可用端口)
docker run -p 80 nginx
网络配置经验:
- 容器内部端口(如nginx的80)通常不可修改
- 主机端口可以任意指定,但要避免冲突
- 生产环境建议使用反向代理管理容器访问
4. 数据持久化方案
4.1 数据卷挂载
Docker默认使用写时复制机制,重要数据必须通过卷持久化:
bash复制# 创建命名卷(Docker自动管理位置)
docker volume create html_volume
# 查看卷详情(包括实际存储路径)
docker volume inspect html_volume
# 运行容器时挂载卷
docker run -v html_volume:/usr/share/nginx/html nginx
4.2 目录绑定挂载
开发环境更常用的直接目录挂载方式:
bash复制# 将主机目录挂载到容器(适合配置文件修改)
docker run -v /host/path:/container/path nginx
# 多目录挂载示例(配置+日志+数据)
docker run \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf:/etc/nginx \
-v /data/nginx/logs:/var/log/nginx \
nginx
数据管理最佳实践:
- 配置文件建议使用目录挂载,方便修改
- 数据库文件建议使用命名卷,便于备份
- 日志文件可挂载到主机或使用日志驱动
5. 典型应用部署示例
5.1 Nginx容器化部署
完整的企业级Nginx部署方案:
bash复制# 创建专用网络(隔离环境)
docker network create nginx_net
# 运行Nginx容器(带数据持久化)
docker run -d \
--name production_nginx \
--network nginx_net \
-p 80:80 -p 443:443 \
-v nginx_data:/usr/share/nginx/html \
-v nginx_conf:/etc/nginx \
-v /etc/letsencrypt:/etc/letsencrypt \
nginx:1.21.0
5.2 Redis容器化部署
内存数据库的特殊配置要点:
bash复制# Redis生产环境部署(带密码和持久化)
docker run -d \
--name redis_cache \
-p 6379:6379 \
-v redis_data:/data \
-e REDIS_PASSWORD=complexpassword \
redis:6.2 \
--save 60 1000 \
--appendonly yes
6. 运维监控与排错
6.1 容器日志查看
日志是排查问题的第一手资料:
bash复制# 查看实时日志(类似tail -f)
docker logs -f 容器名
# 显示最后100行日志
docker logs --tail 100 容器名
# 带时间戳查看日志
docker logs -t 容器名
6.2 容器性能监控
掌握基本的资源监控方法:
bash复制# 查看容器资源占用(类似top)
docker stats
# 查看容器进程列表
docker top 容器名
# 进入容器内部(交互式调试)
docker exec -it 容器名 /bin/bash
排错技巧:
- 先看日志(docker logs)
- 检查资源(docker stats)
- 进入容器(docker exec)验证配置
- 对比正常容器的环境差异
7. 企业级实践建议
7.1 容器安全加固
生产环境必须考虑的安全措施:
- 使用非root用户运行容器(--user参数)
- 限制容器资源(--memory,--cpus)
- 定期更新基础镜像(CVE修复)
- 扫描镜像漏洞(docker scan)
7.2 CI/CD集成
现代开发流程中的Docker实践:
- 多阶段构建减小镜像体积
- 使用.dockerignore文件加速构建
- 镜像标签采用版本号+git commit
- 部署时使用健康检查(--health-cmd)
经过多年容器化实践,我认为Docker真正的价值在于提供一致性的运行环境。从开发到生产的全流程中,最大的效率提升来自于消除了"在我机器上能跑"的问题。对于初学者,建议从单容器应用开始,逐步过渡到多容器编排,最终掌握完整的云原生技术栈。