docker搭建私有仓库

  • 2019 年 12 月 31 日
  • 筆記

文章目录

1. Docker私有仓库

1.1. 步骤1.2. 上传镜像到私有仓库

1.3. 下载镜像

1.4. Docker Maven插件自动上传镜像到私有仓库

1.4.1. 步骤

1.4.1.1. 仓库所在服务器的配置

1.4.1.2. 项目中的配置

1.4.1.3. 拉取上传的镜像并且运行

1.5. 源码

1.6. 参考文章

Docker私有仓库

步骤

  • docker pull registry
  • docker run --name registry -p 5000:5000 -d registry
  • 启动完成后访问http:// 192.168.174.130:5000/v2/_catalog即可看到如下的内容说明启动成功:
{  	"repositories": []  }
  • 添加信任(无论是下载还是上传都需要添加,这里的ip和端口指定的是私有仓库的宿主机的ip):
    • vim /etc/docker/daemon.json,添加如下的内容:

    "insecure-registries":["192.168.174.130:5000"]

    • 重启docker ,systemctl restart docker

上传镜像到私有仓库

  • docker tag jdk8 192.168.174.130:5000/jdk8: 标记该镜像
    • 指定仓库所在的ip和端口号
    • 第一个jdk8是当前的镜像名称(或者填Id),后一个是上传到仓库中的名字,可以任意起
  • docker images:此时查看镜像,发现多了一个192.168.174.130:5000/jdk8的镜像
  • docker push 192.168.174.130:5000/jdk8 :将标记的镜像上传到私有仓库中
  • 此时再次访问http:// 192.168.174.130:5000/v2/_catalog,将会看到如下内容
{      "repositories": [      "jdk8"      ]  }

下载镜像

  • 添加信任
    • vim /etc/docker/daemon.json`,添加如下的内容:

    "insecure-registries":["192.168.174.130:5000"]

    • 重启docker ,systemctl restart docker
  • 下载,需要指定ip和端口:docker pull 192.168.174.130:5000/jdk8

Docker Maven插件自动上传镜像到私有仓库

步骤

仓库所在服务器的配置

  • 添加信任,同上
  • 修改 /etc/sysconfig/docker文件:vim /etc/sysconfig/docker
    • 在最下面添加一行DOCKER_OPTS='-H unix:///var/run/docker.sock -H 0.0.0.0:2375'
  • vim /lib/systemd/system/docker.service添加如下内容
  • 执行下面的命令刷新配置并且重启docker
systemctl daemon-reload  systemctl restart docker
  • 开启防火墙的端口:firewall-cmd --zone=public --add-port=2375/tcp --permanent
  • 重新载入配置firewall-cmd --reload

项目中的配置

  • 在pom.xml文件中添加如下内容:
<build>  		<!-- 指定的最终打成jar包的名字 -->  		<finalName>demo</finalName>  		<plugins>  			<!-- SpringBoot的maven插件 -->  			<plugin>  				<groupId>org.springframework.boot</groupId>  				<artifactId>spring-boot-maven-plugin</artifactId>  			</plugin>    			<plugin>  				<groupId>com.spotify</groupId>  				<artifactId>docker-maven-plugin</artifactId>  				<version>0.4.13</version>  				<configuration>  					<!-- 注意imageName需要指定的`IP:端口/image_name`的格式-->  					<imageName>192.168.174.130:5000/${project.artifactId}:${project.version}</imageName>  					<!-- 指定基础镜像,不需要运行,相当于 from hub.c.163.com/library/java:8-alpine -->  					<baseImage>hub.c.163.com/library/java:8-alpine</baseImage>  					<!--覆盖相同标签镜像-->  					<forceTags>true</forceTags>  					<!-- 运行jar包 -->  					<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>  					<resources>  						<resource>  							<targetPath>/</targetPath>  							<directory>${project.build.directory}</directory>  							<include>${project.build.finalName}.jar</include>  						</resource>  					</resources>  					<!-- 指定私有仓库所在服务器的2375端口,之前配置过可以远程访问的那个 -->  					<dockerHost>http://192.168.174.130:2375</dockerHost>  				</configuration>  			</plugin>  		</plugins>  	</build>
  • 在命令台运行如下的命令,即可完成生成镜像并且上传到私有仓库
    • mvn clean package docker:build -DpushImage
  • 上述命令的解析如下:
    • mvn clean package:maven打jar包
    • docker:build:docker构建镜像的命令
    • -DpushImage: 将生成的镜像上传到私有仓库中
  • 执行并且运行成功之后访问http://192.168.174.130:5000/v2/_catalog,将会出现如下的内容
{      "repositories": [      "demo"      ]  }
  • 访问http://192.168.174.130:5000/v2/demo/tags/list,可以看到demo这个镜像的所有版本
  • 上面的运行完成之后,查看项目中自动生成Dockerfile,如下:
FROM hub.c.163.com/library/java:8-alpine  ADD /demo.jar //  ENTRYPOINT ["java", "-jar", "/demo.jar"]

拉取上传的镜像并且运行

  • 在拉取之前需要添加信任
  • 使用 docker pull 192.168.174.130:5000/demo:0.0.1-SNAPSHOT下载仓库中的镜像
  • 运行镜像:docker run --name demo -p 7001:7001 -d f7f36f3f3f06
    • 其中生成的镜像端口为项目自己本身配置的端口,只需要映射出去即可
  • 此时我们可以访问http://192.168.174.128:7001/,就能看到eureka注册中心的页面

源码

参考文章