关键词:
前提条件:
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容器结束。
ide使用技巧:打包项目推送到dockerhub
...参考idea安装插件Dockerintegration登录到远程服务器,修改docker配置文件#修改docker服务文件vi/lib/systemd/system/docker.service#将原来的ExecStart前面加上#号注释掉,然后再下面追加一行#ExecStart=/usr/bin/docke 查看详情
将 docker 镜像部署到 heroku
】将docker镜像部署到heroku【英文标题】:Deploydockerimagestoheroku【发布时间】:2020-09-0913:38:30【问题描述】:我尝试通过以下命令将容器推送到Heroku:sudoherokucontainer:pushweb--app<my-heroku-app>但我收到此错误“没有基本身份验证凭... 查看详情
harbor单点仓库部署(代码片段)
...系统CentOS7.5_x64Docker18-ceharbor1.10.2 1.2服务器角色角色IP组件Harbor仓库10.60.128.219docker,docker-compose,harbor 二、安装Docker[root@10-60-128-219~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2[root@10-60-128-219~]#yum... 查看详情
将go语言编写的httpserver部署到docker并推送到dockerhub(代码片段)
原始需求构建本地镜像编写Dockerfile将httpserver容器化将镜像推送至docker官方镜像仓库通过docker命令本地启动httpserver通过nsenter进入容器查看IP配置HttpServer代码之前已经写过代码:使用Go语言编写HttpServerpackagemainimport( "fmt" ... 查看详情
docker将本地打包好的镜像推到远程
参考技术Adockerlogin仓库ip/xxx.com如dockerlogin你的私有仓库IP/或网址 输入用户名密码登录格式一:dockertag本地tag IP/网址/项目目录/仓库:标签格式二:dockertag本地镜像仓库:本地镜像标签远程仓库名:远程镜像标签dockertag584db3... 查看详情
sh构建docker镜像,将其推送到awsec2containerregistry,然后将其部署到awselasticbeanstalk(代码片段)
docker打包镜像命令
参考技术Atitle:docker打包镜像命令date:2020/02/2014:521、在docker中添加harbor(或者其他私服)的地址2、登录远程仓库3、拉取私服的镜像到本地仓库4、查看镜像id,并进行打包5、copy到需要部署的机器上,载入镜像 查看详情
azuredevops上模版化k8s部署
...设计微服务体系结构本文假设你已经能对你应用进行docker打包,并正确推到docker仓库里。本文假设你docker打包是利用azureDevOpspipeline进行且有使用buildId作为tag。这里主要讨论的是面向批量项目上K8s的时候使用的发布模版,更多偏... 查看详情
Docker 推送到 AWS ECR 问题
】Docker推送到AWSECR问题【英文标题】:DockerpushtoAWSECRissue【发布时间】:2019-07-2421:11:27【问题描述】:几天来,我遇到了将图像从jenkins推送到ECR并重新启动服务的问题。我的Jenkins实例通过ECS托管在EC2实例上。(它也被构建为docke... 查看详情
使用 github-action 构建镜像并推送到 docker hub
】使用github-action构建镜像并推送到dockerhub【英文标题】:Buildimageandpushtodockerhubusinggithub-action【发布时间】:2021-09-3015:08:35【问题描述】:由于dockerfile中的FROM语法不支持githubrepo链接。githubrepo中的Dockerfile很少。我如何使用github... 查看详情
docker学习:docker镜像分层原理及本地镜像推送到阿里云或私服(代码片段)
...像分层加载的原理,及如何把本地镜像推送到阿里云服务器或者本地私服,感兴趣的朋友可以看一下以前的文章。前文回顾:docker入门(一):在centOS虚拟机上安装dockerdocker入门(二):docker的... 查看详情
docker私有镜像仓库搭建和镜像删除
...像的管理,包括一些自己遇到的问题。首先要保证自己的服务器已经安装了docker。具体的安装教程可以看官网,这里就不在赘述了。首先我们需要创建一个自己的CA证书,比如下图是我自己创建时输入的相关内容:做好镜像存储... 查看详情
怎么把springboot打包成镜像部署到docker
...并组织到一个Dockerfile里参考技术A用ustraiso就是软碟通,打包成ISO的文件,再用NERO等一些访刻录就行了,能用的 查看详情
docker学习:docker镜像分层原理及本地镜像推送到阿里云或私服(代码片段)
...ker镜像分层加载的原理,及如何把本地镜像推送到阿里云服务器或者本地私服,感兴趣的朋友可以看一下以前的文章。前文回顾:docker入门(一):在centOS虚拟机上安装dockerdocker入门(二):docker的常用命令docker镜像分层加载原... 查看详情
docker学习:docker镜像分层原理及本地镜像推送到阿里云或私服(代码片段)
...ker镜像分层加载的原理,及如何把本地镜像推送到阿里云服务器或者本地私服,感兴趣的朋友可以看一下以前的文章。前文回顾:docker入门(一):在centOS虚拟机上安装dockerdocker入门(二):docker的常用命令docker镜像分层加载原... 查看详情
搭建docker私有镜像仓库
...器中,可以将打包应用镜像直接通过dockerpush命令推送到服务器所在地镜像仓库中,所以需要搭建私有镜像仓库。本文使用Docker公司开发的私有镜像裤Registry。如果registry版本在2.7以下可以用以下命令创建但在2.7.0以上用以上命令... 查看详情
windows下远程连接kafka服务器并创建topic部署服务
...桌面,修改后在替换原来的host文件在hosts文件末尾加上kafka服务器<!外网!39.0.25...>地址,修改后的格式如下:1.1注意:修改阿里云服务器的hosts文件来配置kafka的服务器地址:在hosts文件最后加入:添加的kafka-server就是以下创建topic命令... 查看详情
idea建docker项目
...ion文件(5)创建DockerController文件(6)增加配置命令解释(7)Maven打包(8)运行先pull基础镜像,然后再打包镜像,并将镜像部署到远程docker运行这里我们可以看到镜像名称为docker-demo:1.1,docker容器为docker-server(9)运行成功(10)浏览器访问(11)... 查看详情