前言

docker镜像的push、pull都需要镜像库。现在不少大厂提供免费的镜像库,如docker hub,163
hub,也可以自己搭建一个私有镜像库。我用了vmware公司开源的harbor作为docker私有库,相比docker官方提供的私有库registry,harbor提供了管理界面,还可以分配用户权限,适合企业级使用。这是harbor的
地址 <https://github.com/vmware/harbor>.

harbor不是一个镜像,而是有多个镜像支撑,所以需要去官方手动下载一个installer,再在installker中的原始配置文件中配置好相应参数,再运行脚本生成镜像所需要的配置文件,最后通过docker-compose启动。

前置条件

OS: ubuntu 16
docker版本: 17
docker-compose版本: 1.21

搭建过程

下载installer

去这里 <https://github.com/vmware/harbor/releases>
下载最新版本的harbor安装器,它分在线和离线两种包,我下载的时候,最新版本是1.5.1,还未提供在线包,所以下载了离线包。
下载成功后,在linux任意目录解压
tar xvf harbor-offline-installer-<version>.tgz
配置

解压出来后就是一个同名文件夹,里面有很多文件和文件夹,我们只需要配置两个文件harbor.cfg和docker-compose.yml。
harbor.cfg只要配置如下一个地方
#The IP address or hostname to access admin UI and registry service. #DO NOT
use localhostor 127.0.0.1, because Harbor needs to be accessed by external
clients. hostname =192.168.1.100:8090

harbor支持域名和ip两种方式,我用了简单的ip方式,还可以配置https访问。harbor.cfg中的ui_url_protocol属性设置为https。当然,https证书要自己做。具体可参考官网

docker-compose.yml主要是改下容器映射的端口,默认是把容器内的80端口映射到宿主机的80端口,现在改成映射宿主机的8090端口(我把容器其它往外映射的端口也改到宿主机上不常用端口上了)

然后执行install.sh,没问题的话,会生成配置文件和启动镜像。如果镜像未启动,则使用命令docker-compose up启动。
注意:如果后面想改harbor.cfg的内容并生效,单独重启容器是没用的,需要重新执行prepare后再启动容器,命令如下:
$ sudo docker-compose down -v $ vim harbor.cfg $ sudo prepare $ sudo
docker-compose up-d
启动成功后,harbor会启动八个docker容器,看着有点多,但资源占的都不多。
然后浏览器打开http://ip:8090 <http://ip:8090>
进入管理平台,默认密码是admin/Harbor12345。在管理平台,可以管理镜像和用户权限控制。


推送拉取镜像

推送

首先有一个spring boot项目,pom.xml文件添加如下内容:
<properties> <docker.image.prefix>192.168.1.100:8090</docker.image.prefix> <
docker.project.name>demo</docker.project.name> </properties> <build> <plugins> <
plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</
artifactId> <version>1.3.7</version> <configuration> <repository>
${docker.image.prefix}/${docker.project.name}/${project.artifactId}</repository>
<buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </
buildArgs> </configuration> </plugin> </plugins> </build>
在项目主目录下写Dockerfile文件,内容如下:
FROM java:8 VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar RUN bash -c
'touch /app.jar' ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ
/etc/localtime &&echo $TZ > /etc/timezone EXPOSE 7882 CMD ["-jar", "/app.jar"]
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Xms256m",
"-Xmx512m", "-XX:PermSize=64m", "-XX:MaxPermSize=128m", "-Xss512k"]
我在ENTRYPOINT中设置了JVM堆内存参数是为了控制容器占内存太大。

执行mvn打包和打成镜像命令
mvn clean package -DskipTests dockerfile:build
dockerfile:build命令需要在安装docker的环境下执行

执行完毕后,当前机器通过sudo docker images就可以看到刚才打好的镜像,镜像名字是192.168.1.100:8090/demo/项目名。
先登录再执行镜像推送命令:
sudo docker login --u admin -p Harbor12345 192.168.1.100:8090 sudo docker push
192.168.1.100:8090/demo/项目名
拉取镜像

拉取镜像很简单
sudo docker login --u admin -p Harbor12345 192.168.1.100:8090 sudo docker pull
192.168.1.100:8090/demo/项目名
harbor就这样搭建配置完成了。

遇到的问题

在docker login的时候会报这个错:http: server gave HTTP response to HTTPS
client,这是因为Haror设置了http,docker客户端默认是https,需要改下本地docker环境
在/etc/docker/daemon.json(如果没有就新建)中添加以下代码:
{ "insecure-registries":["xx.xx.xx.xx:8090"] }
再重启即可

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信