微服務項目的docker自動化部署流程


微服務的Docker自動化部署

如何將一個微服務打包成一個可以獨立運行的Docker鏡像呢?需要完成兩個任務:
(1)JDK環境的Docker化
(2)微服務的Docker化

制作JDK1.8的Docker鏡像

Docker常用命令介紹

(1)查看Docker本地倉庫中已經下載好的鏡像

docker images

(2)搜索遠程倉庫中相關鏡像

docker search [imageName]

(3)查看所有被創建的容器(Container)

docker ps -a

(4)查看所有正在運行的容器(Container)

docker ps

(5) 創建並啟動一個容器

#創建后台進程
docker run -di --name=[containerName] -p [port]:[port] [imageId或者image的name]

(6)設置開機后,容器自啟動

docker update [containerName/containerId] --restart=always 

(7)查看容器啟動日志文件

docker logs [containerName/containerId] 

(8)刪除容器

docker rm [containerName/containerId]

(9)刪除鏡像

# 必須先停止容器,在刪除容器,最后刪除鏡像
docker rmi [imagesName/imagesId]

(10)啟動、重啟、停止容器

#啟動
docker start [containerName/conatainerId]
#重啟
docker restart [containerName/conatainerId]
#停止
docker stop [containerName/conatainerId]

制作image的一般流程

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環境


將本地的image上傳至私人倉庫

(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

使用Maven插件實現自動化docker部署

(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文件,主要是添加項目構建、打包、部署的插件。包含兩大主要插件:

  • spring-boot-maven-plugin
  • docker-maven-plugin
<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化已經介紹完畢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM