Harbor仓库搭建及使用
目录
一、docker配置
配置地址:https://www.cnblogs.com/lvlinguang/p/15183571.html
二、安装docker-compose
1、下载docker-compose文件
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2、为docker-compose文件赋予可执行权限
chmod +x /usr/local/bin/docker-compose
3、查看docker-compose版本
docker-compose version
三、安装harbor
1、下载地址
- 官网地址:https://github.com/goharbor/harbor/releases
- 版本:harbor-offline-installer-v2.2.2.tgz
wget https://github.com/goharbor/harbor/releases/download/v2.2.2/harbor-offline-installer-v2.2.2.tgz
2、解压文件
tar -zxvf harbor-offline-installer-v2.2.2.tgz
# 复制配置文件
cp harbor.yml.tmpl harbor.yml
3、修改harbor.yml配置
cd harbor
vim harbor.yml
# 修改如下配置
hostname: 192.168.3.12
http:
port: 6007
harbor_admin_password: Harbor12345
- hostname 这里设置本机的ip
- harbor_admin_password 页面的密码
- 注释掉https部分
4、配置数据库
- 如果你需要将数据存储在数据库中,请按以下配置(非必选)
- harbor默认会将数据存储在本地,为了提高数据的安全性,可将数据存储在数据库中
- 目前Harbor仅支持PostgraSQL数据库,需要手动创建harbor、notary_signer、notary_servers三个数据库,Harbor启动时会自动在对应数据库下生成表
- postgresql数据库安装:https://www.cnblogs.com/lvlinguang/p/16583405.html
vim harbor.yml
# 配置数据库
external_database:
harbor:
host: 127.0.0.1
port: 5432
db_name: harbor
username: harbor_db_username
password: harbor_db_password
ssl_mode: disable
max_idle_conns: 50
max_open_conns: 100
notary_signer:
host: 127.0.0.1
port: 5432
db_name: notary_signer
username: root
password: 123456
ssl_mode: disable
notary_server:
host: 127.0.0.1
port: 5432
db_name: notary_server
username: root
password: 123456
ssl_mode: disable
5、修改daemon.json文件
- 解决docker login 时,提示https问题
- 添加insecure-registries
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries":["192.168.3.12:6007"]
}
6、运行/安装
# 创建日志目录,没有该目录无法创建,不知为何
mkdir /var/log/harbor
./install.sh
7、访问页面
http://192.168.3.12:6007
- 帐号admin,密码Harbor12345
8、修改端口
- 如果需要修改端口请按以下操作
vim /home/apps/harbor/harbor.yml
# 修改端口
http:
port: 1181
vim /etc/docker/daemon.json
"insecure-registries":["192.168.3.12:1181"]
# 停止服务
docker-compose down
# 重新编译
./prepare
# 重新启动
docker-compose up -d
# 重启docker服务
systemctl daemon-reload
systemctl restart docker
9、域名配置
-
如果当前站点需要通过域名配置访问,可以用nginx做反向代理,具体步骤如下
-
nginx配置二级域名:https://www.cnblogs.com/lvlinguang/p/15195403.html
-
通过以上配置nginx后,即可以通过域名访问了,但是docker pull和docker push还是ip地址,通过修改harbor.yml文件来解决
vim /home/apps/harbor/harbor.yml
# 修改如下配置,hostname和port不变
external_url: http://harbor.abc.com
# 停止服务
docker-compose down
# 重新编译
./prepare
# 重新启动
docker-compose up -d
# 重启docker服务
# systemctl restart docker
10、容器名称修改
-
如果你需要修改harbor启动的容器名称,请按以下操作
-
默认启动的harbor及组件名称如下
-
修改docker-compose.yml文件,找到container_name,修改相应的名称,如下
-
修改完成后,重新启动即可
# 停止服务
docker-compose down
# 重新启动
docker-compose up -d
11、设置自动启动
vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/goharbor/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f /home/apps/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /home/apps/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
- systemctl enable harbor
- systemctl start harbor
12、其它操作
# 停止
docker-compose stop
# 运行
docker-compose start
# 登录
docker login -uadmin -pHarbor12345 192.168.3.12:6007
四、管理harbor
# linux登录docker
docker login -uadmin -pHarbor12345 192.168.3.12:6007
# 拉取alpine镜像
docker pull alpine
# 给镜像打标签,注意打标签的格式为 镜像仓库名称/项目名/镜像名:版本号
docker tag docker.io/alpine:latest 192.168.3.12:6007/library/alpine:v1.1.2
# 将镜像推送至harbor
docker push 192.168.3.12:6007/library/alpine:v1.1.2
五、springboot项目配置docker
1.创建Dockerfile文件
- 在项目目录下创建该文件
# jdk版本
FROM java:8
# 临时文件目录
VOLUME /tmp
# 把target目录下的jar包添加到容器里,并重命名为app.jar
ADD target/*.jar app.jar
# ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 "/dev/urandom" 作为 Entropy Source.
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
2.修改pom.xml文件
方式一:使用maven里配置帐号密码
<properties>
<docker.repostory>192.168.3.12:6007</docker.repostory>
<docker.registry.name>library</docker.registry.name>
<docker.image.tag>v1.0.1</docker.image.tag>
<docker.maven.plugin.version>1.4.10</docker.maven.plugin.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- Dockerfile maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${docker.maven.plugin.version}</version>
<configuration>
<contextDirectory>${project.basedir}</contextDirectory>
<!-- harbor 仓库用户名及密码-->
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
<tag>${docker.image.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
maven配置
<!--harbor-->
<server>
<id>192.168.3.12:6007</id>
<username>admin</username>
<password>Harbor12345</password>
</server>
方式二:直接在pom文件里配置帐号密码
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${docker.maven.plugin.version}</version>
<configuration>
<repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
<tag>${docker.image.tag}</tag>
<username>admin</username>
<password>Harbor12345</password>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
六、linux服务器上打包并推送至harbor
1、将springboot项目源码复制到服务器
2、maven打包
- 进入项目目录
mvn -U clean install -Dmaven.test.skip=true
3、打包成docker镜
mvn dockerfile:build
4、将docker镜像推送到Harbor仓库
mvn dockerfile:push
5、其它操作
# 查看镜像
docker images
# 启动镜像
docker run -d --name rapid-web2 -p 8081:8089 192.168.3.12:6007/library/rapid-screen:v1.0.1
6、harbor上查看
七、错误方案
1、停止错误
Network harbor_harbor Error
docker network inspect harbor_harbor
docker network disconnect -f harbor_harbor harbor-jobservice
docker network disconnect -f harbor_harbor harbor-portal
docker network disconnect -f harbor_harbor nginx
docker network disconnect -f harbor_harbor registryctl