从0开始搭建IntelliJ IDEA+docker+私有库

1,659 阅读3分钟

最近学习了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端口