目录
简介
在当今云计算与容器化技术飞速发展的时代,Docker 作为容器化领域的领军技术,已成为开发与运维团队不可或缺的工具。本文将探讨 Docker Compose 多容器编排工具与 Harbor 企业级私有仓库的核心技术,帮助读者掌握从容器管理到镜像安全存储的完整解决方案。
一、Docker 容器重启策略与状态码解析
(一)Docker 容器重启策略详解
Docker 容器的重启策略是面向生产环境的重要机制,由 Docker 守护进程控制,在开发过程中可忽略,但在生产部署中至关重要。常见的重启策略包括:
- no(默认策略):容器退出时不进行重启,适用于开发测试场景。
- on-failure:仅在容器非正常退出(退出状态码非 0)时重启,是生产环境中常用的策略之一。
- on-failure:3:在 on-failure 基础上,限制最多重启 3 次,避免容器反复重启消耗系统资源。
- always:无论容器以何种状态退出,都会立即重启,确保服务持续运行。
- unless-stopped:与 always 类似,但 Docker 守护进程启动时已停止的容器不会重启。
示例命令:
# 启动一个始终重启的容器
docker run -itd --restart=always --name host1 busybox sh
该命令通过 --restart=always
参数指定容器退出时始终重启,确保 host1 容器保持运行状态。
(二)Docker 容器常见退出状态码
通过容器退出状态码可快速判断容器运行情况:
状态码 |
说明 |
0 |
容器正常退出,表明容器内的进程成功执行完毕。 |
125 |
Docker 守护进程本身出现错误,需检查 Docker 服务状态。 |
126 |
容器启动后要执行的默认命令无法调用,可能是命令权限问题或路径错误。 |
127 |
容器启动后要执行的默认命令不存在,需确认命令名称是否正确。 |
其他 |
容器内正常执行的命令返回的状态码,需根据具体命令逻辑分析。 |
二、Docker Compose 工具深度应用
(一)Docker Compose 简介与安装
Docker Compose 的前身是 Fig,是定义和运行多个 Docker 容器的强大工具。通过一个配置文件即可定义多个容器,并使用一条命令启动,极大简化了多容器应用的部署。
安装步骤:
- 使用 curl 下载对应版本的 Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
该命令从 GitHub 下载指定版本的 Docker Compose 二进制文件并保存到 /usr/local/bin
目录。
- 添加执行权限并创建软链接:
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
chmod +x
赋予文件执行权限,ln -s
创建软链接以便在任何目录都能执行 docker-compose
命令。
- 验证安装:
docker-compose --version
输出版本信息则表示安装成功。
(二)YAML 文件格式与编写规范
Docker Compose 使用 YAML 格式的配置文件,YAML 是一种可读性高的标记语言,语法比 XML 简单。编写时需注意:
- 不支持制表符(tab)缩进,必须使用空格。
- 通常开头缩进两个空格,保持格式统一。
- 冒号、逗号、横杆等字符后需缩进一个空格。
- 使用
#
号添加注释。 - 包含特殊字符时用单引号括起来,布尔值也需用引号括起-。
(三)Docker Compose 基本操作命令
1. 容器运行
- 前台运行:
docker-compose up
,将容器日志输出到前台,按 Ctrl+C 停止。 - 后台运行:
docker-compose up -d
,容器在后台运行,是生产环境的常用方式。 - 重新构建运行:
docker-compose up --build -d
,在启动前重新构建镜像。
2. 容器控制
- 关闭指定容器:
docker-compose stop <容器名称>
,如 docker-compose stop nginx
停止名为 nginx 的容器-。 - 全部关闭:
docker-compose stop
,停止所有由 Compose 管理的容器。 - 启动指定容器:
docker-compose start <容器名称>
,启动已停止的指定容器-。 - 全部启动:
docker-compose start
,启动所有已停止的容器。 - 重启指定容器:
docker-compose restart <容器名称>
,重启指定容器-。 - 全部重启:
docker-compose restart
,重启所有容器。
3. 容器删除
docker-compose down
命令用于停止并删除容器、网络等资源,是清理环境的常用命令。
(四)Docker Compose 案例演示
以部署 Nginx 服务为例,演示 Compose 的实际应用:
1. 编写 docker-compose.yaml 文件
version: '2'
services:
webapp:
image: 'nginx'
ports:
- "80:80"
volumes:
- "/www/html:/www/html:rw"
- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"
-
version
指定 Compose 文件格式版本。 -
services.webapp
定义名为 webapp 的服务。 -
image
指定使用 nginx 镜像。 -
ports
将容器的 80 端口映射到主机的 80 端口。 -
volumes
设置卷挂载,实现数据持久化和配置自定义,/www/html:/www/html:rw
表示读写权限挂载。
2. 配置 Nginx
创建 nginx 配置文件并上传到 Docker 主机:
mkdir /opt/nginx
vim /opt/nginx/nginx.conf
在配置文件中设置工作进程数、事件连接数、HTTP 服务等参数,如:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /www/html;
index index.html index.htm index.php;
}
# 其他配置...
}
}
该配置定义了一个基本的 Nginx 服务,监听 80 端口,根目录为 /www/html
-。
3. 执行部署
docker-compose up -d
该命令在后台启动 Nginx 容器,根据配置文件完成服务部署。
4. 查看容器状态
docker-compose ps
命令列出当前运行的容器及其状态,确认 Nginx 服务是否正常启动。
三、Harbor 企业级私有仓库搭建与管理
(一)Harbor 基础概念
1. Harbor 简介
Harbor 是 VMware 开源的企业级 Docker Registry 项目,基于 Docker 开源的 Registry 构建,添加了管理 UI、基于角色的访问控制、LDAP/AD 集成、审计日志等企业级功能。作为私有仓库,Harbor 提供了更好的性能和安全性,提升了镜像传输和管理效率。
2. Harbor 的核心优势
- 基于角色的访问控制:用户和仓库按项目组织,不同用户在项目中拥有不同权限。
- 镜像复制策略:支持在多实例间复制(同步)镜像,适用于负载平衡、高可用性等复杂场景。
- LDAP/AD 集成:与企业现有的 LDAP/AD 系统集成,实现统一的用户认证和管理。
- 镜像管理功能:支持删除镜像和垃圾回收,释放存储空间。
- 图形化界面:提供直观的 UI,方便用户浏览、搜索镜像和管理项目。
- 审计与 API:记录所有操作日志,提供 RESTful API 便于与外部系统集成-。
3. Harbor 架构组成
Harbor 主要由以下组件构成:
- Proxy:前置反向代理,统一接收浏览器和 Docker 客户端的请求并转发到后端服务。
- Registry:存储 Docker 镜像,处理 push/pull 命令,通过 Token 服务实现访问控制-。
- Core services:核心服务,包括 UI(图形界面)、Webhook(获取镜像状态变化)和 Token 服务(签发访问令牌)-。
- Database (Harbor-db):存储用户权限、审计日志、镜像分组等数据。
- Log collector (Harbor-log):收集各组件日志,用于监控和分析。
(二)Harbor 部署实战
1. 环境准备
操作系统 |
主机名 |
配置 |
IP |
CentOS 7.9 2009 |
harbor |
2C4G |
192.168.10.106 |
CentOS 7.9 2009 |
client |
2C4G |
192.168.10.101 |
2. 基础环境设置(两台主机均需操作)
- 关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
停止并禁用防火墙,确保网络通信正常。
- 关闭 selinux:
setenforce 0
sed -i "s/.*SELINUX=.*$/SELINUX=disabled/g" /etc/selinux/config
临时和永久关闭 selinux,避免其对 Docker 操作产生干扰。
3. 下载与安装
- 下载安装包:从 GitHub 下载 Harbor 离线安装包,如 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
解压后得到 harbor 目录,包含安装脚本和配置文件模板-。
4. 配置 Harbor
- 复制配置文件模板:
cp harbor.yml.tmpl harbor.yml
创建默认配置文件。
- 编辑配置文件:
vim harbor.yml
修改以下关键配置:
hostname: 192.168.10.106 # 设置为当前主机 IP
harbor_admin_password: Harbor12345 # 管理员密码
# 注释掉 https 相关配置,使用 http 访问
hostname
配置为 Harbor 服务器的 IP 地址,harbor_admin_password
设置管理员登录密码-。
5. 执行安装
./install.sh
安装脚本会检查 Docker 和 Docker Compose 版本,加载 Harbor 镜像,并启动各组件容器。成功安装后会显示 "Harbor has been installed and started successfully"。
6. 访问与验证
在浏览器中输入 http://192.168.10.106
,使用默认用户名 admin
和配置的密码 Harbor12345
登录。登录后可创建项目和用户,如创建名为 kubernetes
的项目和 zhangsan
用户-。
(三)Harbor 客户端应用
1. 配置 Docker 信任私有仓库
在所有 Docker 主机上添加以下配置到 /etc/docker/daemon.json
:
{
"insecure-registries": ["192.168.10.106"]
}
该配置告知 Docker 信任指定的私有仓库,避免因证书问题导致操作失败。
重启 Docker 服务使配置生效:
systemctl daemon-reload
systemctl restart docker
。
2. 登录 Harbor 仓库
docker login 192.168.10.106 -u zhangsan -p Aptech1!
使用创建的用户账号登录 Harbor 仓库,-u
指定用户名,-p
指定密码。
3. 推送镜像到 Harbor
# 拉取一个示例镜像
docker pull cirros
# 为镜像打标签,格式为 [仓库地址]/[项目名]/[镜像名]:[版本]
docker tag cirros 192.168.10.106/kubernetes/cirros:v1
# 推送镜像到 Harbor
docker push 192.168.10.106/kubernetes/cirros:v1
docker tag
命令为镜像添加 Harbor 仓库的标签,docker push
命令将镜像推送到指定仓库和项目-。
4. 从 Harbor 拉取镜像
在另一台主机上重复配置步骤后,使用以下命令拉取镜像:
docker pull 192.168.10.106/kubernetes/cirros:v1
验证镜像是否能从 Harbor 成功拉取。
5. 退出 Harbor 登录
docker logout 192.168.10.106
退出当前 Harbor 仓库登录。
四、总结
本文全面介绍了 Docker Compose 与 Harbor 私有仓库的核心技术与实践操作。Docker Compose 通过 YAML 配置文件和简单命令,实现了多容器应用的高效编排与管理,极大提升了开发和部署效率。Harbor 作为企业级私有仓库,提供了安全、可控的镜像管理解决方案,满足了企业在镜像存储、传输和权限控制等方面的需求。
通过掌握这些技术,开发与运维团队能够构建更加灵活、可靠的容器化应用架构,为现代化软件开发与部署奠定坚实基础。在实际应用中,可根据企业具体需求,进一步优化 Docker Compose 配置和 Harbor 安全策略,确保容器化环境的稳定运行与高效管理。