Portainer & Harbor

geepair

技术分享|2024-4-22|最后更新: 2024-6-12|
type
Post
status
Published
date
Apr 22, 2024
slug
summary
tags
开发
建站
category
技术分享
icon
password

🤔1.什么是Portainer & Harbor?

  1. Portainer & Harbor 都是与Docker生态系统紧密相关的工具,它们各自扮演着不同的角色。
    1. Portainer是一个开源的容器管理平台
      • 支持Docker、Swarm、Kubernetes和ACI环境的管理
      • 暴露了一个HTTP API,允许用户通过UI自动化操作
      • Portainer能够从注册表拉取Docker镜像,并且可以创建特定环境中的容器
      • Portainer社区版是一个轻量级的服务交付平台,旨在简化Docker和Kubernetes的管理
      Harbor则是由VMWare公司开源的容器镜像仓库
      • 支持与不同的第三方复制适配器集成,用于复制数据,OIDC适配器进行认证和授权,以及扫描适配器进行安全扫描
      • Harbor提供了REST API,可以通过Harbor门户或使用Swagger UI来访问
  1. Portainer主要关注于容器的管理和操作,而Harbor则专注于容器镜像的存储、分发和安全。Portainer可以管理Docker Swarm集群并整合Harbor镜像库。

📝2.Portainer & Harbor如何在实际项目中集成使用?

Harbor作为镜像仓库的使用
Harbor主要用于存储Docker镜像,它支持用户创建项目、添加成员、上传和下载镜像等功能。在实际项目中,可以利用Harbor来管理构建好的Docker镜像,确保镜像的安全存储和高效访问。
Portainer作为容器管理工具的使用
Portainer提供了一个可视化的界面,用于部署、管理和监控Docker容器。它可以与Harbor私有仓库结合使用,通过Portainer可以方便地拉取Harbor上的镜像进行容器部署。
Jenkins与Harbor和Portainer的集成
在DevOps实践中,Jenkins可以用来自动化构建和测试过程,而Harbor则用于存储构建好的镜像。通过配置Jenkins,使其能够拉取代码仓库源码,构建Docker镜像并推送至Harbor仓库。然后,使用Portainer可视化部署工具部署生产服务项目。这种集成方式不仅提高了开发效率,也保证了环境的一致性和安全性。
Harbor的高级配置
在某些情况下,为了提高访问的安全性,Harbor可以配置使用外部代理,如nginx代理,以避免直接暴露IP地址或主机名。这对于企业级的应用尤为重要,因为它可以增加额外的安全层。

📝3.环境安装

3.1 docker安装(以CentOS7为例)

安装yum-utils,配置库的地址
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安装docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
notion image
启动docker
sudo systemctl start docker # 启动 sudo systemctl enable docker # 守护进程 sudo systemctl status docker # 状态 # 镜像基本命令 # 容器基本命令 docker images #查看所有镜像 docker pull nginx:latest #拉取nginx镜像 docker rmi nginx #删除nginx镜像 docker save -o ***.tar ImageName:latest #导出镜像 docker load -i ***.tar #导入镜像 docker image tag ImageName:latest NewImageName:latest #打标签 docker push ImageName:latest #推送镜像 docker ps #查看运行中容器 docker pa -a #查看所有容器 docker run ImageName:latest #从镜像中运行容器 docker start ContainerId #运行容器 docker stop ContainerId #暂停容器 docker restart ContainerId #重新运行容器 docker kill ContainerId #强制暂停容器 docker rm ContainerId #删除容器 docker rm -f ContainerId #强制删除容器 docker logs ContainerId #查看容器日志 docker exec -it ContainerId /bin/bash #进入容器 exit #退出容器 docker commit -m "描述" ContainerId ImageName:latest #从容器中生成新镜像 #日志配置 --log-opt max-size=100m #日志文件最大100M --log-opt max-file=5 #最多五个日志文件,默认值:1 #常见参数 -p 5000:5000 #端口映射 -d #后台运行 -it /bin/bash #交互式容器,进入容器的/bin/bash --restart=always #容器重启策略 --name ContainerName #容器名称 -v /usr/local/auth:/auth #挂载文件 -e REGISTRY_AUTH=htpasswd #配置容器的环境变量
notion image
安装docker-compase
wget https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-linux-x86_64 mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version
notion image

3.2 Harbor安装

harbor支持在线安装和离线安装两种模式
wget https://github.com/goharbor/harbor/releases/download/v2.9.4/harbor-offline-installer-v2.9.4.tgz tar zxvf harbor-offline-installer-v2.9.4.tgz cd harbor && mv harbor.yml.tmpl harbor.yml && vim harbor.yml #编辑配置文件
notion image
  • 修改本地IP(非127.0.0.1)
  • 配置https
  • 默认密码 账号admin 密码123456
./install.sh # 安装运行
notion image
notion image
harbor依赖很多镜像组成服务,这些容器是必须启动,官方推荐配置是2核4G,为了保证这些容器的启动正常,内置了一个容器编排文件:docker-compose.yml
docker-compose up -d # 重新启动各个容器后台运行(重启服务器问题)
notion image
制作harbor服务
[Unit] Description=Harbor Service Requires=docker.service After=docker.service [Service] Type=simple Restart=always WorkingDirectory=/usr/local/harbor ExecStart=/usr/local/bin/docker-compose up [Install] WantedBy=multi-user.target

3.3 Portainer安装

docker拉取镜像
docker pull portainer/portainer-ce
notion image
部署portainer容器
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
notion image
notion image

3.4 Docker Swarm集群

notion image
Docker Swarm 是 Docker 的集群管理工具,Swarm集群的节点分两种:管理节点(manager node),工作节点(work node),两者的主要区别是对集群进行管理需要在管理节点上进行操作,包括集群创建,配置,服务创建,配置等有关工作。除此之后两者没有区别,管理节点和工作节点一样会运行contarner。
集群初始化
docker swarm init docker swarm join-token worker # 操作 docker swarm init #docker swarm init docker swarm join-token worker #查看加入woker的命令。 docker swarm join-token manager #查看加入manager的命令 docker swarm join #加入集群 docker swarm leave #退出集群 docker node ls #查看集群节点 docker node rm #删除某个节点(-f强制删除) docker node inspect #查看节点详情 docker node demote #节点降级 docker node promote #节点升级 docker node update #更新节点
集群服务
创建集群之后便是创建服务,也就是一个集群可以包括多个服务,也就意味上可以在一个集群上部署多个项目,创建服务的时候我们就不需要再对节点进行管理,节点的管理归属集群管理。也就是说创建服务是基于当前集群的节点进行部署,当你需要扩展节点的时候,需要先将节点加入集群,然后再更新服务配置。
docker service create --name testweb --replicas 4 -p 80:80 webapp:latest
Portainer管理
手动管理docker swarm集群是有点繁琐,以服务创建和更新镜像为例,你需要事先在每个节点上面拉取最新的镜像,docker swarm在创建服务或更新服务的时候不会主动从仓库中拉取或更新镜像
notion image
notion image
Portainer连接上之后可以轻松管理docker swarm
notion image
自动化部署(webhook)

4.参考文章

 开启调试