如何将一个微服务打包成一个能够独立运行的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化已经介绍完毕