1、docker harbor搭建和使用(参考docker harbor搭建和使用)

(1) 官网获取 https://github.com/goharbor/harbor/releases harbor下载地址
eg.https://github.com/goharbor/harbor/releases/download/v2.7.0-rc1/harbor-offline-installer-v2.7.0-rc1.tgz
服务器

wget https://github.com/goharbor/harbor/releases/download/v2.7.0-rc1/harbor-offline-installer-v2.7.0-rc1.tgz

(2) 编辑 harbor.yml.tmpl

hostname 这个是域名,需要修改成大家公司自己的域名,如果是自己测试,可以随便填个域名,然后在/etc/hosts中解析域名到127.0.0.1就好
http.port 这个是端口,默认是80,一般不改,除非80端口被占用了
https 这个是https配置,需要提供SSL证书,如果是自己生成的证书,需要在docker配置文件中设置insecure-registries,否则docker会认为这是不安全的域名,下文会说,等会自己生成一个证书再回来修改
harbor_admin_password 这是harbor提供的管理后台的管理员密码
database 这个节点下面的配置是harbor自己依赖的数据库密码以及连接参数
data_volume 这是harbor数据存储的目录,不用修改,之后可以在docker-compose.yml中挂载宿主机目录,只要记住这个目录就好

(3) 下载镜像并生成docker-compose

mv harbor.yml.tmpl harbor.yml
./install.sh

安装完成后会在当前目录生成一些文件,其中有一个眼熟的文件docker-compose.yml,说明安装之后停止harbor可以用docker-compose down,再次启动harbor可以用docker-compose up -d命令,修改容器配置可以编辑docker-compose.yml文件

(4) 登录
用户名admin,密码是在harbor.yml中配置的

(5) 创建用户和项目

2、开启服务器docker远程连接

(1) 增加 -H tcp://0.0.0.0:2375

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375  -H fd:// --containerd=/run/containerd/containerd.sock

(2) 重启docker

systemctl daemon-reload  
systemctl restart docker

(3) 关闭防火墙或者开放2375端口

3、docker登录harbor,验证远程

没有配置证书,或者证书是个人生成的情况下

vim  /etc/docker/daemon.json

加入以下内容

##配置了域名的最好使用域名
{
"insecure-registries":["ip:port","域名:port"]
}
docker login 域名:port #docker login ip:port

登录成功后,就可以使用docker推送镜像到私人仓库

4、配置插件docker-maven-plugin

在maven的setting.xml中配置harbor账号与密码

<server>
    <id>harbor</id>
    <username>username</username>
    <password>paswd</password>
    <configuration>
      <email>xxx</email>
    </configuration>
  </server>
  </servers>

java pom.xml 配置插件docker-maven-plugin

<properties>
        <java.version>14</java.version>
        <!-- harbor远程地址-->
        <docker.repository>ip:8080</docker.repository>
        <!--项目名,需要和Harbor中的项目名称保持一致 -->
        <docker.registry.name>project</docker.registry.name>
        <docker.host>http://ip:2375</docker.host>
     </properties>

  <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
              <!--  <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>removeImage</goal>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>-->
                <configuration>
                    <!-- maven settings.xml 文件配置的server-id,配置server就可以直接推送到harbor repository仓库了 -->
                    <serverId>harbor</serverId>
                    //Harbor地址
                    <registryUrl>http://${docker.repository}</registryUrl>
                    <!-- 这是docker的服务地址,http:ip:2735-->
                    <dockerHost>${docker.host}</dockerHost>
                    <forceTags>true</forceTags>
                    <imageName>${docker.repository}/${docker.registry.name}/${project.artifactId}:${project.version}
                    </imageName>
                    <!-- 指定 Dockerfile 路径,此路径根据自己的文件路径调试,他正确才会有打包镜像日志输出,否则会卡住-->
                    <dockerDirectory>${project.basedir}/../docker</dockerDirectory>
                    <image>${docker.repository}/${docker.registry.name}/${project.artifactId}:${project.version}</image>
                    <newName>${docker.repository}/${docker.registry.name}/${project.artifactId}:${project.version}
                    </newName>
                    <!-- jar包位置-->
                    <resources>
                        <resource>
                            <targetPath>/config</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.basedir}/src/main/resources</directory>
                            <include>bootstrap.yml</include>
                        </resource>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

创建dockerfile docker/dockerfile

FROM adoptopenjdk/openjdk14:latest ##根据自己的jdk版本配置,在docker查询镜像即可
MAINTAINER money
#将maven构建好的jar添加到镜像中,第二个为别名
ADD  *.jar cloud-app.jar
ADD  config config
EXPOSE 8080
##指定配置文件,方便在容器中运行时挂载配置文件路径
ENTRYPOINT ["java","-jar", "cloud-app.jar", "--spring.config.location= /config/bootstrap.yml"]

5、说明

maven推送镜像到harbor的过程就是,通过maven把镜像推送到远程的docker,再由远程docker推送镜像到私人仓库