Docker 高级管理:Compose 容器编排与私有仓库实战

一、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 命令不存在 检查镜像内命令路径、拼写

✅ 补充知识点

  1. 重启策略优先级always > unless-stopped > on-failure > no
  2. 重启限制 :容器重启间隔会指数退避(1s→2s→4s... 最长 1min),避免频繁重启。
  3. 状态查看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 编写规范(避坑必看)

  1. 禁用Tab 缩进 ,必须用空格,默认缩进 2 个。
  2. 键值对key: value冒号后必须加 1 个空格。
  3. 注释用#,布尔值(true/false)加引号避免解析异常。
  4. 文件名必须为docker-compose.ymldocker-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

✅ 补充知识点

  1. 版本选择version: '3'支持服务扩容、网络自定义、依赖控制 ,优于version: '2'
  2. 依赖配置 :用depends_on控制启动顺序(如depends_on: - mysql)。
  3. 网络管理 :Compose 默认创建独立网络,服务间可通过服务名通信。
  4. 环境变量 :用environment注入配置,避免硬编码(如environment: - MYSQL_ROOT_PASSWORD=root)。

三、Harbor 企业级私有仓库

3.1 Harbor 核心优势

基于 Docker Registry 二次开发,企业级功能:角色权限、镜像复制、LDAP 集成、审计日志、图形化 UI,是生产环境私有仓库首选。

3.2 架构组件(必知)

  1. Proxy:反向代理,统一接收请求转发至后端。
  2. Registry:存储镜像,处理 push/pull。
  3. Core services:UI、Webhook、Token 认证(核心)。
  4. Harbor-db:存储用户权限、审计日志。
  5. 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

✅ 补充知识点

  1. HTTPS 配置:生产环境必须开启 HTTPS,避免明文传输,通过 Nginx 代理证书。
  2. 镜像垃圾回收harbor/prepare + docker-compose down -v 回收删除镜像的磁盘空间。
  3. 跨机房复制 :Harbor 支持主从同步,实现多地域镜像一致。
  4. 权限管理 :项目分公开/私有,用户可分配管理员/开发/访客角色。
  5. 安全扫描:集成 Clair 组件,自动扫描镜像漏洞,符合企业安全规范。

四、本章核心总结

  1. 重启策略 :生产环境必配alwayson-failure,保障服务高可用。
  2. Docker Compose:YAML 定义多服务,一键编排,简化运维。
  3. Harbor:企业级私有仓库,解决镜像安全、权限、分发问题,是 Docker 生产化必备组件。
相关推荐
步步为营DotNet1 小时前
深入探究.NET 11中的 Native AOT 性能优化与实践
安全·云原生·.net
脑子加油站1 小时前
K8S-RBAC认证中心
云原生·容器·kubernetes·rbac认证
MrSYJ2 小时前
到底怎么使用nginx配置一个前后端分离的项目
微服务·云原生·架构
东北甜妹2 小时前
K8s RBAC 和持久化存储
云原生·容器·kubernetes
IT大白鼠2 小时前
云原生AI工具链:架构、组件、应用与发展趋势
人工智能·云原生·架构
正在走向自律2 小时前
KES数据库表空间自动创建特性详解:从传统运维痛点到云原生存储落地
运维·云原生·国产数据库·kes
一个天蝎座 白勺 程序猿3 小时前
KES表空间管理的智能化演进:从手动目录创建到云原生弹性存储的自动化之路
运维·云原生·自动化·kingbasees
霑潇雨3 小时前
原生 Zookeeper 实现分布式锁案例
java·分布式·zookeeper·云原生·maven
云游牧者3 小时前
K8S灰度发布与蓝绿部署实战指南-CSDN博客
运维·云原生·容器·kubernetes·发布策略