最近学习了docker,总结了网上的资料。也踩了不少坑,在这里做个记录,顺便巩固知识。亲测有效。
想要的结果
开发工具打包成镜像,直接推送到docker私有库.服务器上的docker拉取镜像,直接运行镜像。
为什么要搭建私有库
1.代码放别人家里你就不怕被偷吗。
2.代码写的不好,不想被别人看见
3.公司需要私有库
准备工作(必看)
以下是我的搭建环境,不同环境下的docker会有差异,请正确食用!
服务器环境: centOS7
开发工具: IDEA
docker版本: 19.03.1
springboot版本: 2.X
服务器
想办法去搞一个服务器,我用的是google Cloud,现在(2019-7-29)谷歌的服务器免费,有visa信用卡就可以领了。自己搭了个梯子,用了一段时间了,感觉还不错,够自己倒腾倒腾的了。具体购买教程网上一大把,这里说一下几个我踩过的坑。
1.谷歌云新建的虚拟机默认没有开放root。
2.谷歌的云服务器买了后会扣你信用卡的钱,不过一段时间后会退回来的。
3.谷歌云服务的端口开放需要去谷歌云的控制台,然后在 VPC网络->防火墙规则 新建一个你自己的防火墙规则。然后在你虚拟机网络标记里面添加刚创建的规则,添加的时候只要输入你的防火墙名称就可以了。如图myself就是我自己添加的。
CentOS7安装docker
1.root权限登陆服务器,确保yum包为最新
$ yum update
2.卸载旧版本(如果安装过旧版本的话)
$ yum remove docker docker-common docker-selinux docker-engine
3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置yum源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.安装docker
$ yum install docker-ce #这里安装的是最新稳定版本
6.启动并加入开机启动
$ systemctl start docker
$ systemctl enable docker
7.验证是否安装成功
$ docker version
docker安装私库
1.下载私有仓库
$ docker pull registry #默认会安装latest
2.创建并运行容器
$ docker run -d -p 5000:5000 --name registry-srv -d registry:latest
IDEA POM配置
1.在你的笔记本,电脑上用IDEA打开你要推送的项目,在你的pom.xml文件中新增《plugin》《/plugin》标签。如图是我新增后的样子
<build>
<plugins>
<!--这是原有的spring boot插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--新增的docker maven插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<!--docker镜像相关的配置信息-->
<configuration>
<dockerHost>http://xx.xx.xx.xxx:2375</dockerHost>
<!--镜像名,这里用工程名-->
<!--<imageName>${project.artifactId}</imageName>-->
<imageName>xx.xx.xx.xx:5000/${project.artifactId}:${project.version}</imageName>
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!--镜像的FROM,使用java官方镜像-->
<baseImage>java:8u111-jdk</baseImage>
<!--该镜像的容器启动后,直接运行spring boot工程-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<registryUrl>xx.xx.xx.xxx:5000</registryUrl>
<pushImage>true</pushImage>
<!--构建镜像的配置信息-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
2.执行打包命令
-f pom.xml clean package -DskipTests docker:build
以上就是一个简单的部署流程,但是执行后并不会上传成功,不出意外会报一个连接失败的错误。原因如下。
docker踩坑
docker默认是没有开放2375端口。并且docker从1.3版本以后对Registry的访问都是用的https。这是基于安全的考虑的。而我的私有仓库容器使用http协议。所以造成了这样的报错。这里就有两个特别重要的文件 /usr/lib/systemd/system/docker.service 和
/etc/docker/daemon.json
docker.service
centos跟ubuntu的配置不同,centos中没有/etc/default/docker和/etc/sysconfig/docke这两个个配置文件。docker.service的配置如下,写在[Service]下面
$ vim /usr/lib/systemd/system/docker.service
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
daemon.json
docker安装后,默认是没有daemon.json的,需要手动创建。创建后新增{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }配置。注意:daemon.json配置的参数跟docker.service配置的参数相同时会相互冲突,到时docker会启动失败,并且docker版本需要高于1.12.6。
$ echo '{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }' > /etc/docker/daemon.json
修改配置文件后记得重启docker,重启后还需要启动私有仓库的镜像
$ systemctl daemon-reload && systemctl restart docker #重启docker
$ docker start 你的仓库 #重启仓库
现在推送就没有问题了。成功推送到仓库后,查看仓库上是不是多了镜像。浏览器访问
http://ip:5000/v2/_catalog
安装docker-registry-web
私有库有了之后,界面感觉太丑。加一个好看的仓库界面。方便管理。先搭一个简单的docker-registry-web
1.下载镜像
$ git pull docker-registry-web
2.创建容器并运行
$ docker run d -p 8080:8080 --name registry-web --link registry-srv -e REGISTRY_URL=http://registry-srv:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
3.用浏览器访问
http://ip:8080/
下篇尝试用harbor+私有库
ps:使用maven插件是不需要在IDEA上面下载docker插件的。这就是一个简单的搭建教程,还没有对仓库做认证,并且正式项目不建议开放2375端口