如何將一個微服務打包成一個能夠獨立運行的Docker鏡像呢?須要完成兩個任務:
(1)JDK環境的Docker化
(2)微服務的Docker化java
(1)查看Docker本地倉庫中已經下載好的鏡像linux
docker images
(2)搜索遠程倉庫中相關鏡像git
docker search [imageName]
(3)查看全部被建立的容器(Container)github
docker ps -a
(4)查看全部正在運行的容器(Container)spring
docker ps
(5) 建立並啓動一個容器docker
#建立後臺進程 docker run -di --name=[containerName] -p [port]:[port] [imageId或者image的name]
(6)設置開機後,容器自啓動shell
docker update [containerName/containerId] --restart=always
(7)查看容器啓動日誌文件json
docker logs [containerName/containerId]
(8)刪除容器centos
docker rm [containerName/containerId]
(9)刪除鏡像app
# 必須先中止容器,在刪除容器,最後刪除鏡像 docker rmi [imagesName/imagesId]
(10)啓動、重啓、中止容器
#啓動 docker start [containerName/conatainerId] #重啓 docker restart [containerName/conatainerId] #中止 docker stop [containerName/conatainerId]
JDK沒法單獨運行,必須依賴於相應的操做系統,所以須要Ubuntu或者Centos等系統的image,同時還要linux版本的jdk,製做步驟以下所示:
Step1: 下載Centos:7的Docker鏡像、linux版本的dk1.8包
Step2: 編寫Dockerfile的執行腳本,並和jdk1.8置於同一目錄下。
#依賴鏡像名稱和ID FROM centos:7 #指定鏡像建立者信息 MAINTAINER ITCAST #切換工做目錄 WORKDIR /usr RUN mkdir /usr/local/java #ADD 是相對路徑jar,把java添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/ #配置java環境變量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_171 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH
Step3: 執行Docker 的build命令生成鏡像文件
docker build -t='jdk1.8' . ## [注]-t表示生成的鏡像名 . 表示docker的images倉庫所在的根目錄, ##該命令執行完成以後,就會將jdk安裝到一個centos:7上,而且配置了java的環境變量
[注意]上述步驟能夠當作在Centos:7系統上安裝jdk1.8,而且配置了相關java環境
(1)搭建私人倉庫
#從遠程倉庫拉去相關鏡像 docker pull registry #建立而且運行容器 docker run ‐di ‐‐name=registry ‐p 5000:5000 registry # 修改並配置私人容器的IP地址 vi /etc/docker/daemon.json # {"insecure‐registries":["192.168.184.135:5000"]} #重啓Docker容器 systemctl restart docker
(2)將鏡像上傳至私人倉庫
docker tag [resourceImages] ip/tag #如 dockers tag jdk1.8 192.168.56.3:5000/jdk1.8 # 標記後的鏡像名字包含了私人倉庫的的訪問ip和端口
(3)使用push命令上傳至私人倉庫
docker push 192.168.56.3:5000/jdk1.8 #如 dockers tag jdk1.8 192.168.56.3:5000/jdk1.8
(1)在使用Docker-Maven插件以前須要先設置宿主機,使其能被遠程訪問。
vi /lib/systemd/system/docker.service
其中ExecStart=後添加配置‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
這個設置的含義爲:開啓docker的任意ip地址和2375端口,則任意一臺遠程及其能夠經過該宿主機的ip:2375訪問dockers。
(2)配置微服務項目的POM.XML文件,主要是添加項目構建、打包、部署的插件。包含兩大主要插件:
<project> <build> <!-- 打包後jar包名稱 --> <finalName>app</finalName> <plugins> <!--Maven插件,編譯,打包,部署等相關工做 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- docker的maven插件,官網:https://github.com/spotify/docker-maven-plugin --> <!-- Maven工具和Docekr進行鏈接的插件 --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <!-- 配置文件 --> <configuration> <!-- docker所構建的鏡像的名字 --> <imageName>192.168.56.3:5000/${project.artifactId}:${project.version}</imageName> <!-- 構建所須要的基礎鏡像,上面所構建的jdk1.8鏡像文件,也就是在該鏡像文件的基礎上再包裹一層,故其能夠看做一個完整的最小運行系統 --> <baseImage>jdk1.8</baseImage> <!--建立和啓動容器時所執行的命令:jar -jar /app.jar --> <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <!-- 生成的jar包在當前項目的根目錄下,該pom.xml文件同級 --> <targetPath>/</targetPath> <!-- target文件夾下面 --> <directory>${project.build.directory} </directory> <!-- 使用app.jar包來製做鏡像 --> <include>${project.build.finalName}.jar</include> </resource> </resources> <!-- 要上傳的docker地址,我的的docker私人倉庫和端口(上面步驟已經開放) --> <dockerHost>http://192.168.56.3:2375</dockerHost> </configuration> </plugin> </plugins> </build> </project>
以上的配置實際上就是生成了一個Dockerfile文件
FROM jdk1.8 ADD app.jar / ENTRYPOINT ["java","‐jar","/app.jar"]
(3)命令行窗口進入該項目根目錄下面,使用Maven工具或者插件(Maven命令)完成編譯、打包、製做鏡像、上傳鏡像等一系列步驟。
# 清除項目、打包成jar包,使用docker:build製做鏡像文件,上傳該鏡像文件至私人倉庫,全部的配置信息均來自上述配置的pom.xml文件 mvn clean package docker:build ‐DpushImage
在實際項目中,使用jar命令打包,致使jar包沒有相關的元文件,沒法直接部署,必須使用maven的package打包才行
其實是將使用package打包好的jar包(使用jar -jar /app.jar 命令是能夠直接運行的)複製到原來的jdk1.8鏡像文件中,使用該鏡像文件建立並啓動容器執行相jar命令調用jdk環境運行jar吧 (4)使用該鏡像就能夠建立容器,啓動容器,會執行設置好的命令:jar -jar app.jar。微服務項目也就順利啓動起來。至此,微服務項目的docker化已經介紹完畢