IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 打包docker镜像推送到远程服务器并部署到k8s -> 正文阅读

[系统运维]打包docker镜像推送到远程服务器并部署到k8s

前提条件:

1、docker服务器已开启远程访问,参考《远程docker服务器携带证书连接》

2、服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试。

????????在之前的文章中我们已经通过idea的docker插件测试了远程docker服务器已经能够正常访问,虽然利用这个docker插件也可以完成docker镜像的打包及推送,但本文我们将换一种方式,使用maven的docker-maven-plugin插件完成docker镜像的打包,以及推送到远程docker服务器。

1、Dockerfile

????????Dockerfile文件用于将我们的应用做成docker镜像

# 指定jdk环境版本,基于java8创建镜像
FROM java:8
# 挂载临时目录
VOLUME /tmp
# 添加指定jar包到容器《此处为项目打包产生的jar包全名》
ADD practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar
# 容器向外暴露的端口号《指该项目运行所占用的的端口号》
EXPOSE 8081
# 容器启动后执行的命令
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]

2、pom配置

????????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>

3、镜像推送

????????上述准备就绪以后执行install命令,等待一段时间后下方控制台出现BUILD SUCCESS则说明镜像推送成功。

????????接着去远程服务器验证一下,输入docker images命令查看容器镜像。

????????可以看到我们的应用镜像已经推送成功了,下面就是部署阶段。

4、k8s部署

????????如果在以前我们的部署环境只有docker容器,那么这里只需要docker run我们的应用镜像,将项目部署在docker容器就可以访问了。但现在我们的部署环境是k8s+docker,所以不能直接运行我们的应用镜像进行部署,下面进入k8s的部署。

????????首先需要创建两个yaml文件:practice-job-deployment.yaml、practice-job-service.yaml,至于这两个文件的作用涉及到k8s的概念,关于k8s的概念将会在之后的文章中谈到,这里只需要知道在k8s中的大部分配置都是基于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: 32001 #service(对外)的端口

????????然后分别执行命令:

kubectl apply -f practice-job-deployment.yaml
kubectl apply -f practice-job-service.yaml

????????执行命令:kubectl get pod --all-namespaces 查看pod,可以看到我们项目的pod已经成功运行。

????????执行命令:kubectl logs practice-job-deployment-77d685767-glvgm -n practice 查看应用运行日志。格式为:kubectl logs <pod的name> -n <pod的namespace>。

????????执行命令:docker ps 可以看到项目也已经运行在容器中了

????????执行命令:kubectl get service --all-namespaces 可以看到应用对应的服务也已启动成功且对外暴露的端口正是32001,这个端口就是我们前面在yaml文件中自己配置的。

????????最后浏览器访问:公网ip:32001/doc.html。此路径只是针对我的项目,不同的项目路径不同。注意防火墙需要开启相应端口。

????????至此应用从本地打包docker镜像推送至服务器,并部署到k8s+docker容器结束。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 20:02:38  更:2021-11-09 20:02:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:40:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码