本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程。

目录

Docker Registry

Docker Registry 2.0搭建

Docker开启远程API

使用Maven构建Docker镜像

在应用的pom.xml文件中添加docker-maven-plugin的依赖

修改application.yml,将localhost改为db

使用IDEA打包项目并构建镜像

运行mall-tiny-docker项目

启动mysql服务

启动mall-tiny-docker应用服务


Docker Registry 2.0搭建

docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

如果遇到镜像下载不下来的情况,需要修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值,然后重启docker服务:

{"registry-mirrors": ["https://registry.docker-cn.com"]
}

Docker开启远程API

用vim编辑器修改docker.service文件

vi /usr/lib/systemd/system/docker.service

需要修改的部分:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改后的部分:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

让Docker支持http上传镜像

echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json

修改配置后需要使用如下命令使配置生效

systemctl daemon-reload

重新启动Docker服务

systemctl stop docker
systemctl start docker

开启防火墙的Docker构建端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload

使用Maven构建Docker镜像

该代码是在mall-tiny-02的基础上修改的。

在应用的pom.xml文件中添加docker-maven-plugin的依赖

<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.1.0</version><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><imageName>mall-tiny/${project.artifactId}:${project.version}</imageName><dockerHost>http://192.168.3.101:2375</dockerHost><baseImage>java:8</baseImage><entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration>
</plugin>

相关配置说明:

  • executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
  • imageName:用于指定镜像名称,mall-tiny是仓库名称,${project.artifactId}为镜像名称,${project.version}为仓库名称;
  • dockerHost:打包后上传到的docker服务器地址;
  • baseImage:该应用所依赖的基础镜像,此处为java;
  • entryPoint:docker容器启动时执行的命令;
  • resources.resource.targetPath:将打包后的资源文件复制到该目录;
  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
  • resources.resource.include:需要复制的文件,打包好的应用jar包。

修改application.yml,将localhost改为db

可以把docker中的容器看作独立的虚拟机,mall-tiny-docker访问localhost自然会访问不到mysql,docker容器之间可以通过指定好的服务名称db进行访问,至于db这个名称可以在运行mall-tiny-docker容器的时候指定。

spring:datasource:url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: root

使用IDEA打包项目并构建镜像

注意:依赖的基础镜像需要先行下载,否则会出现构建镜像超时的情况,比如我本地并没有java8的镜像,就需要先把镜像pull下来,再用maven插件进行构建。

  • 执行maven的package命令:

  • 构建成功:

  • 镜像仓库已有该镜像:

运行mall-tiny-docker项目

启动mysql服务

  • 使用docker命令启动:

    docker run -p 3306:3306 --name mysql \
    -v /mydata/mysql/log:/var/log/mysql \
    -v /mydata/mysql/data:/var/lib/mysql \
    -v /mydata/mysql/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=root  \
    -d mysql:5.7
    
  • 进入运行mysql的docker容器:
    docker exec -it mysql /bin/bash
    
  • 使用mysql命令打开客户端:
    mysql -uroot -proot --default-character-set=utf8
    

  • 修改root帐号的权限,使得任何ip都能访问:
    grant all privileges on *.* to 'root'@'%'
    

  • 创建mall数据库:
    create database mall character set utf8
    
  • 将mall.sql文件拷贝到mysql容器的/目录下:
    docker cp /mydata/mall.sql mysql:/
    
  • 将sql文件导入到数据库:
    use mall;
    source /mall.sql;
    

    启动mall-tiny-docker应用服务

  • 使用docker命令启动(--link表示应用可以用db这个域名访问mysql服务):
    docker run -p 8080:8080 --name mall-tiny-docker \
    --link mysql:db \
    -v /etc/localtime:/etc/localtime \
    -v /mydata/app/mall-tiny-docker/logs:/var/logs \
    -d mall-tiny/mall-tiny-docker:0.0.1-SNAPSHOTCopy to clipboardErrorCopied

  • 开启8080端口:
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload
    
  • 进行访问测试,地址:http://192.168.3.101:8080/swagger-ui.html 

2022年找工作你必须要会的技能---看了就找工作领先别人一步相关推荐

  1. 2022完整版搜索引擎优化指南清单(你可以按步骤执行的SEO工作清单)

    采自:埃克森数字营销   2022完整版搜索引擎优化指南清单(你可以按步骤执行的SEO工作清单) 相信很多SEO新手,都为如何开展或者审核自己的SEO工作而烦恼无从下手,现在在阅读这篇文章的你是否也深 ...

  2. 自学python怎么找工作-我是如何在自学编程9个月后找到工作的

    昨天在我在国外网站 reddit 上看到一篇文章,作者分享了他 自学编程 9 个月后找到工作 的经历.文章不到一天就得到3千多赞,2百条回复.我看了下内容,非常中肯,其中有不少建议也是我在编程教室屡次 ...

  3. 2022集团企业邮箱电脑版怎么申请注册?外贸企业邮箱怎么找?

    相信大家都用过邮箱,那你知道如何申请注册邮箱吗?特别是集团要用的电脑版企业邮箱,今天听朋友讲了一个发生在自己身上的趣事,顺便也给大家聊聊现在国内做好的邮箱有哪些. 周末闲来无事,约朋友喝咖啡,聊了聊自 ...

  4. java流程控制原理与方法_1.从本质上看,计算机控制系统的工作原理可归纳为三个步骤,以下不属这三个步骤的是 ( )。_学小易找答案...

    [单选题]下列语句序列执行后, i 的值是( ); int i =1 ; switch ( i ) { case 1: i++; case 2: i+=2; } [单选题]对于 while语句而言, ...

  5. php关键词分词搜索 最多匹配的排在最前面_百度搜索引擎工作原理,做Seo的建议看一看 - 蜘蛛池博客...

    原出处:蜘蛛池博客 原文链接:百度搜索引擎工作原理,做Seo的建议看一看 - 蜘蛛池博客 从事SEO(搜索引擎优化)工作的人可以比喻成搜索引擎的贴身管家,作为一名合格称职的管家必须要了解所服务对象的习 ...

  6. 工作占用了太多私人时间_职晓|如果工作占用了生活时间,我应不应该辞职?...

    原标题:职晓|如果工作占用了生活时间,我应不应该辞职? 去年,<奇葩说>第四季总决赛就出了个辩题"生活已经被工作填满了,我该不该辞职?" 这个辩题很多网友都觉得深有同感 ...

  7. 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

    原标题:铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没? 无人飞机.无人驾驶.智能机器人.... 你能想象这些充满现代感的高科技 正在改变我们的生活吗? 在科技高速发展的今天 人工智能逐渐能够 ...

  8. 工作到了第七年,说说自己每天的工作(一)

    先自己介绍一下自己的工作和个人信息 从事.NET开发已经三年多了,走上社会已经是第七个念头了,工作了那么多年,也需要对自己时常总结,回头看看也是很精彩的. 这是自己的博客: 杨恒连的博客 很久没有总结 ...

  9. 32岁了 学python 来的及吗-32岁的程序员去了国企工作, 晒出年薪, 网友: 我没看错吧...

    原标题:32岁的程序员去了国企工作, 晒出年薪, 网友: 我没看错吧 现如今,相信很多朋友都非常羡慕那些互联网大公司的从业人员,因为他们动不动就年薪三四十万以上,但是这些互联网行业的从业人员也有自己的 ...

最新文章

  1. 巧用360加快您的开机速度
  2. 红帽启动apache服务器_CentOS6.5环境下搭建Apache httpd服务器
  3. mysql od函数_Mysql数学函数不求人
  4. ElasticSearch中distinct,count和group by的实现
  5. ssh登录命令(转)
  6. GeneralUpdate 2021.08.14更新公告
  7. 孙叫兽进阶之路之软件开发生命周期
  8. HDU2277_变色球
  9. win10 mysql 主从复制_win10 使用Docker配置mysql主从复制
  10. 大数据时代了解一些问题
  11. linux控制pwm输出个数,使用PWM控制来实现电压的变化控制
  12. 恒源云(Gpushare)_FAIR CVPR2022新作DVT是个啥?
  13. python数字雨代码_电影黑客帝国中代码雨如何实现?简单!用 Python 就能实现!...
  14. 前端实现在线预览pdf、word、xls、ppt等文件
  15. python爬取微信公众号的几种方法_一种爬取微信公众号信息的方法与流程
  16. 网站如何被百度蜘蛛快速抓取?
  17. LeetCode.868-二进制距离(Binary Gap)
  18. NLP工具——NLTK 安装及使用
  19. 1-1/2+1/3-1/4+.........+1/99-1/100
  20. 利用CSS浮动制作一个简易导航栏

热门文章

  1. Perl 交互命令行参数
  2. CentOS 7查看自己IP地址方法
  3. iOS 动态下载系统的中文字体
  4. css特效——纯css绘制图标:带框的加号(添加按钮)、三横(三道杠)、带圈点(双层圆点)
  5. Botui搭建js聊天机器人
  6. 【精品】华为认证数通HCIA+HCIP题库分享(含答案解析)
  7. 【玩转cocos2d-x之十八】仿《中国好学霸》文字拖拽和定位
  8. 在函数“DECFLOAT”的字符串变量中找到无效字符
  9. 从GPFS到NAS:共享文件系统使用之变革
  10. 微信支付签名错误解决方法