打包docker镜像推送到远程服务器并部署到k8s的方法步骤

目录
  • 1、Dockerfile
  • 2、pom配置
  • 3、镜像推送
  • 4、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容器结束。

到此这篇关于打包docker镜像推送到远程服务器并部署到k8s的方法步骤的文章就介绍到这了,更多相关docker镜像打包并部署到k8s内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • k8s和Docker关系简单说明

    最近项目用到kubernetes(以下简称k8s,k和s之间有8个字母).虽然之前也有简单使用过,但最近发现k8s概念较多,命令也有些不够用了,故想借此机会写点东西,更全面认识并使用k8s.本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作.整体更偏向于原理和应用.在正式开始k8s之前,我们先看看k8s和Docker的关系,分别从虚拟化角度.部署方式角度叙述why use容器,话不多说,开干. 目前发现并没有将kubernetes和Docker技术产生背景和需求进行比较的文章,本

  • Docker学习笔记之k8s部署方法

    本文记录了如何在ubuntu 14.04裸机上部署k8s集群,参考自官方文档. 拓扑结构 1master + 2minion k8s-master 192.168.0.201 master k8s-node1 192.168.0.202 minion k8s-node2 192.168.0.203 minion 准备工作系统 安装Ubuntu 14.04 LTS 64bit server版本系统,配置好hostname和ip. 在更新国内的软件源的时候,由于GFW的原因,经常会出现md5校验错误

  • Hyper-V下搭建K8S集群安装docker的方法步骤

    如果你安装了win10系统,想做k8s集群,win10自带的hyper-v也是一个很适合的虚拟机环境.在上一节中,我们安装了两台虚拟机,这一节,都安装上docker. master: 192.168.137.2 node1:  192.168.137.3 root密码:123456 1. 使用ssh登录虚拟机 有了ssh,在win10 host中就可以直接连接虚拟机了 ssh root@192.168.137.2 2.关闭安全配置 vi /etc/selinux/config 3.关闭防火墙 s

  • 在docker中部署k8s的方法

    K8s k8s是一个cluster集群,在cluster集群中有多个Namespace,一个namespace下又有多个pods,一个pod下有多个container. 这篇文章带你从头在docker中部署k8s. docker下载 docker安装 docker: https://docs.docker.com/docker-for-mac/install/ 在docker中使用k8s: https://docs.docker.com/desktop/kubernetes/ 在docker设置

  • 基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境的详细教程

    环境搭建概述 亲爱的家人们可以到链接:http://xiazai.jb51.net/202105/yuanma/javayaml_jb51.rar  下载所需要的yaml文件. 1.K8S是什么? K8S全称是Kubernetes,是一个全新的基于容器技术的分布式架构领先方案,基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以使用K8S来管

  • k8s部署docker容器的实现

    环境:(docker ,k8s集群),继续上次docker 启动的java程序的镜像为例(https://www.jb51.net/article/189462.htm) 将制作的镜像推送到docker的私有仓库 docker tag demo-img:latest localhost:5000/demo-img:1.0 docker push localhost:5000/demo-img:1.0 k8s部署该镜像k8s创建命名空间及secret 创建命名空间cl-test,这里名字根据自己的

  • Docker+K8S 集群环境搭建及分布式应用部署

    1.安装docker yum install docker #启动服务 systemctl start docker.service systemctl enable docker.service #测试 docker version 2.安装etcd yum install etcd -y #启动etcd systemctl start etcd systemctl enable etcd #输入如下命令查看 etcd 健康状况 etcdctl -C http://localhost:2379

  • 打包docker镜像推送到远程服务器并部署到k8s的方法步骤

    目录 1.Dockerfile 2.pom配置 3.镜像推送 4.k8s部署 前提条件: 1.docker服务器已开启远程访问,参考<远程docker服务器携带证书连接>. 2.服务器上已经搭建好k8s集群,本文是k8s单点集群用于测试. 在之前的文章中我们已经通过idea的docker插件测试了远程docker服务器已经能够正常访问,虽然利用这个docker插件也可以完成docker镜像的打包及推送,但本文我们将换一种方式,使用maven的docker-maven-plugin插件完成doc

  • Docker镜像推送(push)到Docker Hub的实现

    镜像构建成功后,只要有docker环境就可以使用,但必须将镜像推送到Docker Hub上去.我们之前创建的镜像不符合Docker Hub的tag要求,因为 在Docker Hub注册的用户名是boonyadocker而不是boonya,所以需要docker tag进行修改,最后利用docker push命令推送镜像到公共仓库. Docker hub注册用户 到官网注册账号:https://hub.docker.com/ 在本地Linux登录docker: docker login 输入用户名密

  • Spring Boot 分层打包 Docker 镜像实践及分析(推荐)

    1. 准备 spring boot 项目 简单,略过 spring boot 版本 > 2.3.x 即可 简单写了一个 hello world 2. 进行相关配置 这里网上很多 blog 都强调了要去 pom.xml 里手动配置启用分层打包: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot

  • Spring Boot 分层打包 Docker 镜像实践及分析(推荐)

    目录 1.准备springboot项目 2.进行相关配置 3.package 4.Dockerfile 5.应用程序修改&dive分析 1. 准备 spring boot 项目 简单,略过 spring boot 版本 > 2.3.x 即可 简单写了一个 hello world 2. 进行相关配置 这里网上很多 blog 都强调了要去 pom.xml 里手动配置启用分层打包: <build> <plugins> <plugin> <groupId&g

  • idea快速实现将SpringBoot项目打包Docker镜像并部署

    目录 1.修改docker的配置文件 2.配置端口开放 3.IDEA安装Docker插件 4.IDEA配置docker 5.SpringBoot整合Docker配置 5.1 安装pom依赖 5.2 build镜像 5.3 启动镜像 1.修改docker的配置文件 修改文件信息路径如下:/etc/docker/daemon.json在配置文件中添加以下内容: "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/d

  • 详解iOS本地推送与远程推送

    一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程序也不会弹出该提示框,需要用户到设置里面设置.一共有三种提示类型: UIUserNotificationTypeBadge:应用图标右上角的信息提示 UIUserNotificationTypeSound:播放提示音 UIUserNotificationTypeAlert:提示框 二.本地推送 1

  • 使用jib打包docker镜像实战

    序 本文主要研究一下如何使用google的jib打包docker镜像 Jib 是谷歌最新开源的 Java 应用的 Docker 镜像生成工具,可以通过 Gradle 或 Maven 直接生成镜像并上传到仓库而不需要 Dockerfile 文件或者其他插件:Jib 支持将资源文件和类分层打包,可以大幅度提升生成镜像的速度 有一些其他的插件也可以通过 Docker 实现生成镜像,如com.palantir.docker等,但是都需要额外配置 Dockerfile, 如果应用仅需要通过 Dockerf

  • SpringBoot打包docker镜像发布的详细步骤

    目录 1:首先构建一个SpringBoot项目 2:编写一个controller用于测试 3:本机启动观察是否能够成功访问 4:打包 5:找到生成的jar包位置 6:jar包的启动运行测试 7:编写Dockerfile文件 8:把我们的jar包和Dockerfile文件上传服务器 9:利用上传的文件构建镜像 10:利用镜像运行容器 11:测试访问 1:首先构建一个SpringBoot项目 只需要添加web依赖 2:编写一个controller用于测试 3:本机启动观察是否能够成功访问 4:打包

  • 解决使用commit提交大文件无法推送到远程库问题及git rebase使用详解

    解决这个问题并没有特别的(删除提交历史中某个文件,然后重新push),但是由于开始的使用失误,中间有使用git rebase和git reset命令处理,所以特此记录下 大文件无法push到远程仓库 问题 首先,故事(事故)的起因是这样的. 某次git push(类似测试使用,没有分支)到远程仓库时发生如下无法提交大文件的报错(大文件是一个pdf文件) $ git push Enumerating objects: 204, done. Counting objects: 100% (204/2

  • git push 本地项目推送到远程分支的方法(git命令版)

    1.在本地建立项目  可使用Eclipse,Idea等开发工具创建项目 打开根目录到所在在工程名的下一级 2.使用git 客户端 进入到上图目录HelloWord的文件夹里面 3.初始化项目 git init 4.HelloWord工程结构的添加 命令 git add -A 5.提交git到版本 -m是提交的注释 git commit -m "这是注释:初始化项目" 6.远程git建立好项目 7.配置远程仓库  origin是远程仓库的别名 代替xxx.git的地址 git remot

随机推荐