赞
踩
目录
参考文档: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镜像仓库搭建完毕。
参考文档: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创建的账号密码。
对于maven工程来说,需要使用docker-maven-plugin插件来完成Docker镜像的生成和上传。
docker-maven-plugin 官网地址(重要):
GitHub - spotify/docker-maven-plugin: INACTIVE: A maven plugin for 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 \,监听端口可以自己随意定,但是要确保华为云安全组已经放行。
#systemctl daemon-reload (加载配置)
#systemctl restart docker
直接curl看是否生效
curl http://127.0.0.1:30100/info
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>
在上面配置的基础上,只需要修改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私有镜像仓库
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。