一、Docker 容器重启策略与退出状态码
1.1 容器重启策略(生产环境必配)
Docker 重启策略由Docker 守护进程管理,决定容器异常 / 正常退出后的行为,是服务高可用基础。
表格
| 策略 | 说明 | 适用场景 |
|---|---|---|
| no | 默认,退出不重启 | 本地开发、一次性任务 |
| on-failure | 非 0 退出码才重启 | 业务容器、避免正常退出反复重启 |
| on-failure:n | 最多重启 n 次 | 防止死循环重启耗尽资源 |
| always | 任何退出都重启 | 核心服务、常驻进程 |
| unless-stopped | 退出重启,但守护进程启动时不启动已停止容器 | 需手动维护的服务 |
1.2 核心命令(完整可执行)
bash
运行
# 1. 设置always重启策略(推荐生产)
docker run -itd --restart=always --name host1 busybox sh
# 2. 设置最多重启3次
docker run -itd --restart=on-failure:3 --name host2 busybox sh
# 3. 动态修改已有容器重启策略
docker update --restart=always 容器ID/容器名
1.3 容器退出状态码(快速排错)
表格
| 状态码 | 含义 | 排查方向 |
|---|---|---|
| 0 | 正常退出 | 业务逻辑正常结束 |
| 125 | Docker daemon 错误 | 检查 Docker 服务状态、权限 |
| 126 | 命令无执行权限 | 检查 ENTRYPOINT/CMD 权限 |
| 127 | 命令不存在 | 检查镜像内命令路径、拼写 |
✅ 补充知识点
- 重启策略优先级 :
always>unless-stopped>on-failure>no。 - 重启限制 :容器重启间隔会指数退避(1s→2s→4s... 最长 1min),避免频繁重启。
- 状态查看 :
docker inspect 容器名 | grep Restart可查看重启次数与策略。
二、Docker Compose 容器编排
2.1 核心概念
Docker Compose 是多容器编排工具 ,通过docker-compose.yml(YAML 格式)定义服务,一条命令完成部署 / 启停 / 扩容,替代繁琐docker run命令。
2.2 安装步骤(完整命令)
bash
运行
# 1. 下载指定版本(1.24.1,兼容CentOS7)
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. 添加执行权限
chmod +x /usr/local/bin/docker-compose
# 3. 创建软链接(全局调用)
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 4. 验证安装
docker-compose --version
2.3 YAML 编写规范(避坑必看)
- 禁用Tab 缩进 ,必须用空格,默认缩进 2 个。
- 键值对
key: value冒号后必须加 1 个空格。 - 注释用
#,布尔值(true/false)加引号避免解析异常。 - 文件名必须为
docker-compose.yml或docker-compose.yaml。
2.4 常用命令(完整清单)
bash
运行
# 1. 前台启动(输出日志)
docker-compose up
# 2. 后台启动(生产推荐)
docker-compose up -d
# 3. 重新构建镜像并启动
docker-compose up --build -d
# 4. 停止指定服务
docker-compose stop nginx
# 5. 停止所有服务
docker-compose stop
# 6. 启动指定/所有服务
docker-compose start nginx
docker-compose start
# 7. 重启指定/所有服务
docker-compose restart nginx
docker-compose restart
# 8. 停止并删除容器、网络、数据卷
docker-compose down
# 9. 查看服务状态
docker-compose ps
# 10. 强制终止服务
docker-compose kill 服务名
2.5 实战案例:Nginx 服务编排(完整配置)
步骤 1:编写 docker-compose.yml
yaml
version: '3' # 版本升级,兼容更多特性
services:
webapp:
image: nginx:latest # 指定最新版,避免版本兼容问题
ports:
- "80:80" # 端口映射,左侧宿主机,右侧容器
volumes:
- "/www/html:/usr/share/nginx/html:rw" # 修正容器内默认路径
- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf" # 配置挂载
restart: always # 集成重启策略
步骤 2:准备 Nginx 配置
bash
运行
# 创建配置目录
mkdir -p /opt/nginx /www/html
# 编写nginx.conf
vim /opt/nginx/nginx.conf
nginx
user nginx;
worker_processes auto; # 自动适配CPU核心数
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
}
}
步骤 3:启动服务
bash
运行
docker-compose up -d
✅ 补充知识点
- 版本选择 :
version: '3'支持服务扩容、网络自定义、依赖控制 ,优于version: '2'。 - 依赖配置 :用
depends_on控制启动顺序(如depends_on: - mysql)。 - 网络管理 :Compose 默认创建独立网络,服务间可通过服务名通信。
- 环境变量 :用
environment注入配置,避免硬编码(如environment: - MYSQL_ROOT_PASSWORD=root)。
三、Harbor 企业级私有仓库
3.1 Harbor 核心优势
基于 Docker Registry 二次开发,企业级功能:角色权限、镜像复制、LDAP 集成、审计日志、图形化 UI,是生产环境私有仓库首选。
3.2 架构组件(必知)
- Proxy:反向代理,统一接收请求转发至后端。
- Registry:存储镜像,处理 push/pull。
- Core services:UI、Webhook、Token 认证(核心)。
- Harbor-db:存储用户权限、审计日志。
- Harbor-log:日志收集,便于运维排查。
3.3 部署环境(CentOS7.9)
表格
| 角色 | 配置 | IP |
|---|---|---|
| Harbor 服务端 | 2C4G | 192.168.10.106 |
| Docker 客户端 | 2C4G | 192.168.10.101 |
3.4 部署命令(完整可复制)
步骤 1:基础环境配置(服务端 + 客户端都执行)
bash
运行
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config
步骤 2:下载并解压 Harbor
bash
运行
# 下载离线安装包(v2.4.3稳定版)
wget https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
# 解压
tar -zxvf harbor-offline-installer-v2.4.3.tgz
cd harbor
步骤 3:修改配置文件
bash
运行
# 复制模板配置
cp harbor.yml.tmpl harbor.yml
# 编辑配置
vim harbor.yml
关键修改:
yaml
# 1. 修改为服务器IP
hostname: 192.168.10.106
# 2. 修改管理员密码
harbor_admin_password: Harbor12345
# 3. 注释HTTPS配置(生产环境再开启)
# https:
# port: 443
# certificate: /your/cert/path
# private_key: /your/key/path
步骤 4:安装启动
bash
运行
# 执行安装脚本(自动部署所有容器)
./install.sh
步骤 5:访问验证
浏览器访问:http://192.168.10.106默认账号:admin,密码:Harbor12345
3.5 客户端使用(完整流程)
步骤 1:配置 Docker 信任私有仓库
bash
运行
# 编辑daemon.json
vim /etc/docker/daemon.json
json
{
"insecure-registries": ["192.168.10.106"]
}
bash
运行
# 重载配置并重启Docker
systemctl daemon-reload
systemctl restart docker
步骤 2:登录、推送、拉取镜像
bash
运行
# 1. 登录Harbor
docker login 192.168.10.106
# 输入账号:admin 密码:Harbor12345
# 2. 标记镜像(格式:仓库IP/项目名/镜像名:版本)
docker pull cirros
docker tag cirros 192.168.10.106/kubernetes/cirros:v1
# 3. 推送镜像
docker push 192.168.10.106/kubernetes/cirros:v1
# 4. 拉取镜像(另一台客户端执行)
docker pull 192.168.10.106/kubernetes/cirros:v1
# 5. 退出登录
docker logout 192.168.10.106
✅ 补充知识点
- HTTPS 配置:生产环境必须开启 HTTPS,避免明文传输,通过 Nginx 代理证书。
- 镜像垃圾回收 :
harbor/prepare+docker-compose down -v回收删除镜像的磁盘空间。 - 跨机房复制 :Harbor 支持主从同步,实现多地域镜像一致。
- 权限管理 :项目分
公开/私有,用户可分配管理员/开发/访客角色。 - 安全扫描:集成 Clair 组件,自动扫描镜像漏洞,符合企业安全规范。
四、本章核心总结
- 重启策略 :生产环境必配
always或on-failure,保障服务高可用。 - Docker Compose:YAML 定义多服务,一键编排,简化运维。
- Harbor:企业级私有仓库,解决镜像安全、权限、分发问题,是 Docker 生产化必备组件。