Docker構建基於Springboot的微服務的步驟回顧

1. docker內環境準備

  1. 準備好一個dockerfile;進入到包含這個file的文件夾下。
    dockerfile內容如下:
    FROM openjdk:8-jdk-alpine
    RUN  apk update && apk upgrade && apk add netcat-openbsd
    
    這是爲了構建出一個包含輕量級JDK的jar包運行環境。
  2. 在當前目錄下敲下面的命令:
    docker build -t openjdk:netcat .
    docker images
    docker run --rm openjdk:netcat nc -h
    
    • 第一句最後的.是不能省略的;如果第一句運行失敗了,很有肯恩是因爲鏡像下載的地址配置的不是很好;可以使用這個下載地址,阿里雲的,親測好用:"https://6kx4zyno.mirror.aliyuncs.com"
    • docker images用來查看鏡像列表。如果出現了下面的這個條目,則說明這一步已經成功:
      REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
      openjdk                 netcat              abb92c2d95e0        About an hour ago   127MB
      
    • 第三句運行檢測一下下載的鏡像是否有問題。如果無誤,則會輸出下面的代碼:
OpenBSD netcat (Debian patchlevel 1.130)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-O length]
	  [-P proxy_username] [-p source_port] [-q seconds] [-s source]
	  [-T toskeyword] [-V rtable] [-w timeout] [-X proxy_protocol]
	  [-x proxy_address[:port]] [destination] [port]
	Command Summary:
		-4		Use IPv4
		-6		Use IPv6
		-b		Allow broadcast
		-C		Send CRLF as line-ending
		-D		Enable the debug socket option
		-d		Detach from stdin
		-F		Pass socket fd
		-h		This help text
		-I length	TCP receive buffer length
		-i secs		Delay interval for lines sent, ports scanned
		-k		Keep inbound sockets open for multiple connects
		-l		Listen mode, for inbound connects
		-N		Shutdown the network socket after EOF on stdin
		-n		Suppress name/port resolutions
		-O length	TCP send buffer length
		-P proxyuser	Username for proxy authentication
		-p port		Specify local port for remote connects
        	-q secs		quit after EOF on stdin and delay of secs
		-r		Randomize remote ports
		-S		Enable the TCP MD5 signature option
		-s addr		Local source address
		-T toskeyword	Set IP Type of Service
		-t		Answer TELNET negotiation
		-U		Use UNIX domain socket
		-u		UDP mode
		-V rtable	Specify alternate routing table
		-v		Verbose
		-w secs		Timeout for connects and final net reads
		-X proto	Proxy protocol: "4", "5" (SOCKS) or "connect"
		-x addr[:port]	Specify proxy address and port
		-Z		DCCP mode
		-z		Zero-I/O mode [used for scanning]
	Port numbers can be individual or ranges: lo-hi [inclusive]	

2. 基於Springboot構建image

在進行這一步之前,需要做好如下準備:

  • 在maven中引入要用到的插件:
    • maven-resources-plugin 在dockerfile、shell腳本中會用到相關功能
    • docker-maven-plugin 運行起來能夠自動進行構建
      參考如下:
           <plugin>
               <artifactId>maven-resources-plugin</artifactId>
               <executions>
                   <execution>
                       <id>copy-resources</id>
                       <!-- here the phase you need -->
                       <phase>validate</phase>
                       <goals>
                           <goal>copy-resources</goal>
                       </goals>
                       <configuration>
                           <outputDirectory>${basedir}/target/dockerfile</outputDirectory>
                           <resources>
                               <resource>
                                   <directory>src/main/docker</directory>
                                   <filtering>true</filtering>
                               </resource>
                           </resources>
                       </configuration>
                   </execution>
               </executions>
           </plugin>
           <plugin>
               <groupId>com.spotify</groupId>
               <artifactId>docker-maven-plugin</artifactId>
               <version>0.4.10</version>
               <configuration>
                   <imageName>${docker.image.name}:${docker.image.tag}</imageName>
                   <dockerDirectory>${basedir}/target/dockerfile</dockerDirectory>
                   <resources>
                       <resource>
                           <targetPath>/</targetPath>
                           <directory>${project.build.directory}</directory>
                           <include>${project.build.finalName}.jar</include>
                       </resource>
                   </resources>
               </configuration>
           </plugin>
  • 在正確的位置編寫好Dockerfile
    • 雖然可以通過指定路徑參數的方式來達到一樣的效果,但是還是比較建議按照maven約定俗成的目錄結構來搞。
    • 在/src/main/docker文件夾之下創建Dockerfile(以下僅供參考)
FROM openjdk:netcat	 # 指定源鏡像
RUN mkdir -p /usr/local/cargoservice 	# 在將要構建的鏡像的用戶空間中創建/usr/local/cargoservice目錄
ADD  @[email protected] /usr/local/cargoservice/ 	# 將事先打成.jar包的項目拷貝到這個文件夾之下
ADD run.sh run.sh 	# 將我們寫好的.sh腳本(用來運行jar包)轉移到鏡像的文件夾中
RUN chmod +x run.sh 	# 賦予我們的.sh腳本運行的權限
CMD ./run.sh	# 在鏡像中運行.sh腳本  




.sh腳本的參考內容如下:
它的核心目的就是運行我們達成.jar包的Springboot項目,使之能夠提供相應的功能。
#!/bin/sh
echo "********************************************************"
echo "Starting Cargo Server"
echo "********************************************************"
java -jar /usr/local/cargoservice/@[email protected]
  • 其中/usr/local/cargoservice/@[email protected]中,用了@project.build.finalName@來代替編譯好之後.jar包的名字,避免了命名混亂的問題。這是之前引入的maven-resources-plugin包所提供的功能。

  • 接下來,回到Springboot的工作目錄(根目錄之下),運行:mvn clean package docker:build,即可根據我們的/src/main/docker/Dockerfile構建出我們想要的鏡像。

3. 運行鏡像

  • docker run --rm -p 8080:8080 example/cargo-service:section11
  • 鏡像運行起來了,宿主機和容器的8080端口進行了映射;我們就可以在宿主機上通過8080端口來直接調用運行在image內的Springboot接口了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章