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註冊中心的頁面

源碼

參考文章