打包docker镜像,推送远程服务器,部署到k8s步骤
打包docker镜像前提条件1、docker服务器已开启远程访问,参考《远程docker服务器携带证书连接》。2、服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试。在之前的文章中我们已经通过idea的docker插件测试了远程docker服务器已经能够正常访问,虽然利用这个docker插件也可以完成docker镜像的打包及推送,但本文我们将换一种方式,使用maven的docker-mav
打包docker镜像
前提条件
1、docker服务器已开启远程访问,参考《远程docker服务器携带证书连接》。
2、服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试。
在之前的文章中我们已经通过idea的docker插件测试了远程docker服务器已经能够正常访问,虽然利用这个docker插件也可以完成docker镜像的打包及推送,但本文我们将换一种方式,使用maven的docker-maven-plugin插件完成docker镜像的打包,以及推送到远程docker服务器。
Dockerfile文件
- 指定jdk环境版本,基于java8创建镜像
-
FROM java:8
-
- 挂载临时目录
- VOLUME /tmp
- 添加指定jar包到容器(此处为项目打包所产生的jar包全名)
- ADD ./product/target/*.jar ./app.jar
- ADD ./product/target/*.jar ./app.jar
- 容器向外暴露的端口号(项目运行占用的端口)
-
EXPOSE 8080
-
- 容器启动后执行的命令
- ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "./app.jar" ]
pom.xml配置
pom文件的相关配置如下,注意填入远程服务器的ip,并指明上述Dockerfile路径以及访问远程docker需要的pem证书文件的路径。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--使用docker-maven-plugin插件,用于将该服务打包成镜像发往docker服务端-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行 -->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build -->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<forceTags>true</forceTags>
<!--指定生成的镜像名 该处修改为自己想要生成的镜像名称-->
<imageName>practice-job</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定Dockerfile 路径 -->
<dockerDirectory>${project.basedir}</dockerDirectory>
<!--指定远程docker地址 -->
<dockerHost>https://公网ip:2376</dockerHost>
<!--指定pem证书文件路径地址 -->
<dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath>
<!-- 这里是复制jar包到docker容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径此处配置的即对应 target 目录 -->
<directory>${project.build.directory}</directory>
<!-- 需要包含的jar包,这里对应的是Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
推送远程服务器
上述准备就绪以后执行install命令,等待一段时间后下方控制台出现BUILD SUCCESS则说明镜像推送成功。
接着去远程服务器验证一下,输入docker images命令查看容器镜像。
部署到k8s
如果在以前我们的部署环境只有docker容器,那么这里只需要docker run我们的应用镜像,将项目部署在docker容器就可以访问了。但现在我们的部署环境是k8s+docker,所以不能直接运行我们的应用镜像进行部署,下面进入k8s的部署。
首先需要创建两个yaml文件:practice-job-deployment.yaml、practice-job-service.yaml,
vi practice-job-deployment.yaml
apiVersion: v1
kind: Namespace
metadata:
name: practice
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: practice-job-deployment
namespace: practice
spec:
replicas: 1
selector:
matchLabels:
app: practice-job-pod
template:
metadata:
labels:
app: practice-job-pod
spec:
hostNetwork: true
containers:
- name: practice-job-container
image: practice-job:latest #镜像名称+版本
imagePullPolicy: Never #表示镜像来源,IfNotPresent本地没有就从hub仓库拉取,Never表示只从本地
ports:
- containerPort: 8081
env:
# 指定日志文件路径
- name: logging.path
value: /var/logs
vi practice-job-service.yaml
apiVersion: v1
kind: Service
metadata:
name: practice-job-service
namespace: practice
labels:
app: practice-job-service
spec:
type: NodePort
selector:
app: practice-job-pod
ports:
- name: http
protocol: TCP
port: 8081 #service(对内)的端口
targetPort: 8081 #pod的端口
nodePort: 18081 #service(对外)的端口
然后分别执行命令
kubectl apply -f practice-job-deployment.yaml
kubectl apply -f practice-job-service.yaml
执行命令:kubectl get pod --all-namespaces 查看pod,查看我们项目的pod是否已经成功运行。
执行命令:格式为:kubectl logs <pod的name> -n <pod的namespace>。 查看应用运行日志。
执行命令:docker ps 查看项目是否已运行在容器中
执行命令:kubectl get service --all-namespaces 查看应用对应的服务是否已启动成功
更多推荐
所有评论(0)