目录
1.搭建私有Docker镜像仓库
1.搭建docker registry
2.搭建docker registry web UI:
2.Maven创建并上传Docker镜像:
1.允许docker被远程访问
2.重启docker服务
3.构建和上传Docker镜像(不适用IDEA)
4.构建并上传Docker镜像(适用IDEA)
1.搭建私有Docker镜像仓库
1.搭建docker registry
参考文档:docker-registry私有镜像库搭建并配置密码登录_知难行难1985的博客-CSDN博客
docker registry 2 with tls and basic authentication-布布扣-bubuko.com
官网:Registry - Official Image | Docker Hub
Deploy a registry server | Docker Documentation
我们设置docker registry登录时需要账号和密码。
1. 新建密码目录:
/docker/registry/auth, 存放用户密码文件
2. 下载htpasswd
因为新版版的docker registry没有htpasswd命令(是指运行的registry的容器里没有htpasswd命令),所以自己下载htpasswd,注意:这个不是在容器里运行,是在vm。
然后用htpasswd生成用户名和密码文件
# yum install httpd-tools -y
3. 生成htpasswd:
# htpasswd -Bbn bruce 12345678 > htpasswd
前一个htpasswd是命令,后面一个htpasswd是生成的用户名密码文件,然后把这个密码文件htpasswd, 放到 /docker/registry/auth里
(网上有很多是这样的: docker run --entrypoint htpasswd registry:2 -Bbn testuser password > htpasswd,这个命令行是指运行docker registry容器里的 htpasswd命令。但在报错: "exec: \"htpasswd\": executable file not found in $PATH": unknown,原先的registry版本有这个命令,但是现在没有了。当然了,这个需要提前pull registry的镜像)
4.创建docker registry指令:
docker run -d -p 5000:5000 --name registry-srv --restart=always -v /docker/registry/auth:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_STORAGE_DELETE_ENABLED=true -v /usr/local/dockerregistry:/var/lib/registry/ registry:latest
5.允许http方式访问(重要):
有兴趣的可以搭建https方式去访问的docker镜像仓库,在这里不赘述了
(1).修改文件/etc/docker/daemon.json,增加"insecure-registries"配置
Note:注意了,这里要加上ELB的访问地址
vi /etc/docker/daemon.json
[root@dev-68499-04i2g registry-web]# cat /etc/docker/daemon.json
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/vgpaas-thinpool",
"dm.use_deferred_removal=true",
"dm.fs=ext4",
"dm.use_deferred_deletion=true",
"dm.basesize=10G"
],
"insecure-registries":["10.***.***.208:5000","119.***.***.184:31000",]
}
(2).重启docker服务
#systemctl daemon-reload (加载配置)
#systemctl restart docker
6.登录Docker镜像仓库:
docker login 119.***.***.184:31000
至此,docker镜像仓库搭建完毕。
2.搭建docker registry web UI:
参考文档:docker-registry私有镜像库搭建并配置密码登录_知难行难1985的博客-CSDN博客
官网:konradkleine/docker-registry-frontend - Docker Image | Docker Hub
1.启动镜像:
创建konradkleine/docker-registry-frontend:v2指令:
docker run -d -e ENV_DOCKER_REGISTRY_HOST=119.3.248.184 -e ENV_DOCKER_REGISTRY_PORT=31000 -p 31200:80 konradkleine/docker-registry-frontend:v2
2.浏览器登录:
账号密码就用上面给docker registry创建的账号密码。
2.Maven创建并上传Docker镜像:
对于maven工程来说,需要使用docker-maven-plugin插件来完成Docker镜像的生成和上传。
docker-maven-plugin 官网地址(重要):
GitHub - spotify/docker-maven-plugin: INACTIVE: A maven plugin for Docker
1.允许docker被远程访问
我们不在windows本地安装Docker服务,而是使用华为云服务器CCE(K8s集群)中已有的docker服务去创建docker镜像,所以需要配置华为云docker服务允许远程访问。
vi /usr/lib/systemd/system/docker.service
添加-H tcp://0.0.0.0:30100 -H unix:///var/run/docker.sock \,监听端口可以自己随意定,但是要确保华为云安全组已经放行。
2.重启docker服务
#systemctl daemon-reload (加载配置)
#systemctl restart docker
直接curl看是否生效
curl http://127.0.0.1:30100/info
3.构建和上传Docker镜像(不适用IDEA)
1.添加Docker镜像仓库的用户名密码配置
修改maven的settings.xml文件,增加<server>配置
<servers>
<server>
<id>docker-registry</id>
<username>crm</username>
<password>******(直接填密码就行)</password>
<configuration>
<email>wdquan1985@163.com</email>
</configuration>
</server>
</servers>
2.创建Dockerfile内容如下:
使用Dockerfile去创建镜像,将其放到我们工程的src/main/docker目录下
FROM openjdk:8u212-jdk-stretch
COPY demo-0.0.1-SNAPSHOT.jar /tmp/demo-0.0.1-SNAPSHOT.jar
#这个配置“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=32001”可以不要,本来打算配置远程调试的,但是华为云网络配置太复杂,没搞成。
CMD java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=32001 -jar /tmp/demo-0.0.1-SNAPSHOT.ja
3.pom.xml文件修改:
然后修改maven工程的pom.xml文件(在docker-maven-plugin官网GitHub - spotify/docker-maven-plugin: INACTIVE: A maven plugin for Docker有)
<plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>VERSION GOES HERE</version>
<configuration>
[...]
<!-- 引用settings.xml文件中的Docker registry 账号密码配置 -->
<serverId>docker-registry</serverId>
<!-- 指定Docker registry访问地址 -->
<registryUrl>http://1**.***.***.184:31000/v2/</registryUrl>
</configuration>
</plugin>
</plugins>
具体修改:
pom.xml文件应该怎样修改,细节很多,具体请看官网,在这里给出我整体修改的结果,并且给出注释
<properties>
<docker.imageName>119.3.248.184:31000/brucetest</docker.imageName>
<docker.tag>3.0</docker.tag>
</properties>
.................................................................................
.................................................................................
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--加上docker插件,插件源码地址:https://github.com/spotify/docker-maven-plugin-->
<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>build</goal>
</goals>
</execution>
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>${docker.imageName}:latest</image>
<newName>${docker.imageName}:${docker.tag}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${docker.imageName}:${docker.tag}</imageName>
</configuration>
</execution>
</executions>
<configuration>
<!--在maven的settings.xml文件中定义了docker registry的账号密码,下面的属性表示使用账号密码 -->
<serverId>docker-registry</serverId>
<!--指定docker registry 地址 -->
<registryUrl>http://119.***.***.184:31000/v2/</registryUrl>
<!--指定镜像名, 带着docker registry信息,如果不带,则不会被推送到docker registry-->
<imageName>${docker.imageName}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>${docker.tag}</imageTag>
</imageTags>
<!-- build 完成后 push 镜像 -->
<!--<pushImage>true</pushImage>-->
<pushImageTag>true</pushImageTag>
<!--指定远程 docker api地址 -->
<dockerHost>http://119.***.***.184:30100</dockerHost>
<!-- 使用Dockfile,指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
4.创建并上传docker镜像:
具体使用什么命令去执行,先看官网描述:
刚开始的时候,使用指令:
mvn clean package docker:build -DpushImage -Dmaven.test.skip=true
总是报错:
错误信息里发现,每次都要向docker hub(docker.io/library/)和我的docker私有镜像仓库同时上传镜像,但是我只想上传到我的docker私有镜像仓库啊,怎么同时会上传到docker hub???
于是我使用了另外一条指令:
mvn clean package docker:build -DpushImageTag -Dmaven.test.skip=true
发现成功了,不会向docker hub上传镜像,只会向我的docker私有仓库上传
但这是为什么呢?看官网的描述:
我给我的镜像配置了<imageTag>标签,然后命令中的参数“-DpushImageTag”表示只上传添加了imageTag的镜像,也就是“119.***.***.***:31000/brucetest:3.0”,这个镜像配置了Docke私有镜像仓库的host和port,所以其只上传到docker私有镜像仓库。
<!--指定镜像名, 带着docker registry信息,如果不带,则不会被推送到docker registry-->
<imageName>119.***.***.***:31000/brucetest</imageName>
<!--指定标签-->
<imageTags>
<imageTag>3.0</imageTag>
</imageTags>
4.构建并上传Docker镜像(适用IDEA)
在上面配置的基础上,只需要修改pom.xml文件中的一处地方,增加<pushImageTag>配置(当然了,与其对应的是<pushImage>,同时向docker hub和我的Docker私有镜像仓库push镜像)
<build>
<plugins>
<!--加上插件,插件源码地址:https://github.com/spotify/docker-maven-plugin-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
...............................................
</executions>
<configuration>
............................................
<!-- build 完成后 push 镜像 -->
<!--<pushImage>true</pushImage>-->
<pushImageTag>true</pushImageTag>
........................................................
</configuration>
</plugin>
</plugins>
</build>
然后点击右侧 Lifecycle 的package或者install,就能够创建并上传Docker镜像到我的Docker私有镜像仓库 文章来源:https://www.toymoban.com/news/detail-402539.html
文章来源地址https://www.toymoban.com/news/detail-402539.html
到了这里,关于Maven生成和推送Docker镜像到Docker仓库( IDEA 亲测可用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!