Docker 部署不香吗?
点击上方“朱小厮的博客”,选择“设为星标”
后台回复"书",获取
来源:22j.co/ef5f
目录
docker介绍
安装docker
Ubuntu安装docker
CentOS安装docker
通过脚本安装
拉取java环境
创建springboot项目
打包springboot到docker
docker查看容器的日志
查看log4j2输出问文件日志
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker的核心思想是通过对应用的封装、分发、部署、运行生命周期进行管理,达到应用组件级别的“一次性封装,到处运行”。这里的应用组件,可以是一个web应用,也可以是一个环境,更可以是一个数据库等等。
既然docker这么神奇,那我们如何安装docker呢?我们一起来走一下吧。
Ubuntu安装docker
由于本人的系统是CentOS,所以这里就只展示一下CentOS的安装方式,Ubuntu以及其他系统请自行百度。
CentOS安装docker
docker要求CentOS在7.0以后的版本,如果你的系统版本还在7.0以前,请先升级一下版本在进行安装,同时不支持32位的系统,内核版本至少3.10。
请先确保没有安装过docker,否则有可能会导致安装失败,如果之前安装过,可以尝试直接yum isntall -y docker
1.更新软件源第一个命令
yum update
遇到他输入y,然后回车,看到下面信息表示更新成功:
第二个命令
yum install -y yum-utils device-mapper-persistent-data lvm2
2.添加docker稳定版本的yum软件源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.再次更新yum源,并安装docker
yum update
yum install -y docker-ce
看到这个页面,标识docker已经安装成功了。
4.安装完成之后启动docker
systemctl start docker
5.重启
systemctl restart docker
6.停止
systemctl stop docker
7.开机自启动
systemctl enable docker
8.查看docker的状态
systemctl status docker
通过脚本安装
除了上面的yum安装,还可以采用shell脚本安装,安装流程如下:
curl -fsSL https://get.docker.com/ | sh
或者
wget -qO- https://get.docker.com/ | sh
拉取jdk很简单,直接执行一行代码即可,我这里拉取的时java 8的版本。
docker pull java:8
拉取完成之后执行:
docker images
如果出现下面内容,表示拉取成功
1.新建项目
引入sprint-boot-web的依赖
新建完成之后的项目结构
2.引入docker依赖
<properties><docker.image.prefix>registry.aliyuncs.com/linhuatest</docker.image.prefix></properties><!-- docker插件 --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><!--docker文件所在的目录--><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
3.新建docker文件在main目录下新建docker目录,然后在docker目录下创建dockerfile文件,不需要后缀名。
创建完成之后的工程目录如下:
4.编辑dockerfile文件
FROM java:8
VOLUME /tmp/tomcat
ADD spring-boot-docker-0.0.1-SNAPSHOT.jar springboot-docker.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-docker.jar"]
FROM:指定存在的镜像,java:8是我刚刚拉取的镜像,运行的基础。VOLUME:指向的一个临时文件,用于存储tomcat工作。ADD:复制文件并且重命名文件。ENTRYPOINT:初始化配置或者自定义配置。
5.创建测试接口
TestController内容如下:
package com.ymy.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;@RestController
@Slf4j
public class TestController {@RequestMapping(value = "/test",method = RequestMethod.GET)public String test(){System.out.println("这是控制台日志!");log.info("这是输出到文件的日志");return "HELLO-BUG!!!!!!!!!!";}
}
在resources目录下创建log4j2.xml文件主要看这两个参数:
这里我使用了log4j2的日志,如何配置log4j2的日志,请参考 springboot整合Log4j2(将日志输出到指定文件)。
6.编写application.yml配置文件
server:port: 9999
到这里springboot项目就创建完成了,我们现在启动一下项目。
. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.2.5.RELEASE)15:29:19.386 [main] INFO com.ymy.SpringBootDockerApplication - Starting SpringBootDockerApplication on LAPTOP-3GLHJRE9 with PID 20652 (D:\springboot\spring-boot-docker\target\classes started by admin in D:\springboot)
15:29:19.395 [main] INFO com.ymy.SpringBootDockerApplication - No active profile set, falling back to default profiles: default
15:29:20.183 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9999 (http)
15:29:20.200 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9999"]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
15:29:20.201 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.31]
15:29:20.309 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
15:29:20.309 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 881 ms
15:29:20.452 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
15:29:20.568 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9999"]
15:29:20.596 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 9999 (http) with context path ''
15:29:20.599 [main] INFO com.ymy.SpringBootDockerApplication - Started SpringBootDockerApplication in 1.664 seconds (JVM running for 4.04)
如果看到这个页面表示springboot项目没有问题,现在我们将项目拷贝到服务器中。
我现在已经将项目拷贝到服务器中,我们现在需要将它打包到docker中,借助maven实现打包,如果还没有安装maven的,请先安装maven,切换到项目的根目录
执行
mvn clean package docker:build
执行完之后将会看到
表示打包成功。
执行
docker images
我们发现docker的镜像中多了一个springboot/spring-boot-docker,没错,这个就是我们的springboot项目,既然镜像已经生成,那么如何使用这个镜像呢?
执行
docker run --name springbooot-docker -p 9999:9999 -d 4a2
run:运行的意思–name:指定镜像启动的之后的名称-p:容器和外部的端口映射 第一个端口:外部 第二个端口:内部-d:后台运行 -t:实时运行,窗口关闭,程序结束。4a2:表示镜像的id(IMAGE ID)前3位,这里的id并不需要输入全称,只需要输入前几个就行,有一个前提:当有很多镜像的时候,前面几个字符就有可能会相同,这个时候就需要多输入几位,直到不相同位置。
启动了镜像之后我怎么知道有没有成功呢?这个时候我们就需要一个命令来查看已经启动的任务
docker ps
我们发现这里已经出现了我们之前启动的镜像,所以这基本上代表启动成功了,为了验证是否启动成功,我们在浏览器输入测试的接口:ip:9999/test
这说明我们已经springboot项目已经启动成功了,到这里docker部署springboot项目差不就结束了,但是你可能还有一个疑问,如果我想看控制台的日志怎么办呢?像我们一般使用java -jar的时候都会生成一个控制台的日志文件,那docker容器中怎么查看控制台日志呢?其实很简单,只需要一行命令即可
docker ps
找到容器的id
然后执行
docker logs -f
这个时候我们就能看到控制台的日志了,如何我们想看log4j2输出的文件日志呢?
还记得我们在log4j2中配置了日志的输出目录了吗?
没错,就是这个, 我们切换到这个目下
发现这里生成了三个文件,我们打开info.log
tail -100f info.log
我们发现并没有输入我们打印的:“这是输出到文件的日志”,难道是我们配置错了问题?不是的,是因为我们找错了位置,真正的文件日志在容器内部,所以我们需要先进入容器内部
docker exec -it ca2cd59fff9b /bin/bash
ca2cd59fff9b:容器id
然后再切换到我们日志的输出路径
cd work/spring-boot-docker
这里也找到了三个日志文件,我们打印info.log
tail -100f info.log
这就是我们log4j2输出到文件的日志,到这里docker整合springboot项目就差不多结束了,如果想要退出docker容器可以使用
exit
想知道更多?扫描下面的二维码关注我
后台回复"技术",加入技术群
【精彩推荐】
超清晰的DNS入门指南
深入理解Java Stream流水线
如何用ELK搭建TB级的日志系统
深度好文:Linux系统内存知识
日志系统新贵Loki,确实比笨重的ELK轻
日志采集系统都用到哪些技术?
面试官:为什么HashMap的加载因子是0.75?
原创|OpenAPI标准规范
Linux系统内存知识总结
深度好文|奈飞微服务架构解析
耗时3天,上亿数据如何做到秒级查询
点个赞+在看,少个 bug ????
相关文章:
- 一文讲懂什么是三层交换机、网关、DNS、子网掩码、MAC地址
- Java 8 Lambda 表达式被编译成了什么?
- Kylin、Druid、ClickHouse核心技术对比
- 查询速度提升200倍,ClickHouse到底有多快?
- 老司机给我们解读 Spring Boot 最流行的 16 条实践
- 菜鸟网络技术专家:技术架构的战略和战术原则
- ClickHouse到底是什么?凭啥这么牛逼!
- 如此简单 | ElasticSearch 最全详细使用教程
- Hmily重启后月度报告
- 抛弃 Java 改用 Kotlin 的六个月后,我后悔了!
- 每日一题之 MySQL
- 最精美详尽的 HTTPS 原理图
- 微服务的下一步,离不开服务网格
- 面试官:InnoDB中一棵B+树可以存放多少行数据?
- 睡前必读 | 如何系统性地学习分布式系统?
- Flink的处理背压原理及问题-面试必备
- 面试官:GET和POST两种基本请求方法有什么区别
- GitHub:再见,master!
- 搞懂 SQL 查询优化原理分析,秒速处理大数据量查询
- 延时队列实现的几种姿势
- 如何正确、高效地阅读源代码?
- Redis的主从复制是如何做的?复制过程中也会产生各种问题
- 技术转管理的“苦”,我懂......
- MySQL 8.0 新特性:引人注目的哈希连接(Hash Join)
- delete后加 limit是个好习惯么 ?
- 如何设计订单系统?不妨看看这篇文章
- 强!Prometheus与Zabbix的对比选型!
- 如何构建一套高性能、高可用性、低成本的视频处理系统?
- 架构 | 微服务架构下如何解耦,对于已经紧耦合下如何重构?
- CTO要我把这份MySQL规范贴在工位上!
Docker 部署不香吗?相关推荐
- Docker 部署SpringBoot项目不香吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- docker部署springboot_Docker+SpringBoot快速构建和部署应用
前言 Docker技术发展为当前流行的微服务提供了更加便利的环境,使用SpringBoot+Docker部署和发布应用,其实也是一件比较简单的事情.当前,前提是得有Docker的基础. 构建一个Spr ...
- docker初体验:docker部署nginx负载均衡集群
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx负载均衡集群 环境 ce ...
- docker初体验:docker部署nginx服务
Docker 是一个用于开发,交付和运行应用程序的开放平台.Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件.今天来为大家演示一下docker部署nginx 环境 centos7 ...
- Docker系列 四.Docker部署SpringBoot
四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...
- Docker部署文档
Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...
- Docker部署Zookeeper集群
Docker部署Zookeeper集群 官方网站: http://zookeeper.apache.org/ http://zookeeper.apache.org/doc/r3.4.8/zookee ...
- 部署go的web应用_使用Docker部署Go Web应用
为什么需要Docker? 使用docker的主要目标是容器化.也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机. 想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很 ...
最新文章
- 启明云端直播来了!真的来了!15号晚7:30分启明云端带着8ms菇凉正式亮相立创直播,带你一起畅玩彩屏!参与直播互动的小伙伴将会得到红包大奖及获得SigmarstarSSD201开发板\核心板的机会
- 做决定前别拍脑袋:两个成功案例看懂A/B测试
- 《设计模式详解》行为型模式 - 状态模式
- 正则表达式与文件格式处理-Linux(笔记)
- 默然日记20150207
- 【Python 邮件合并 pandas mailmerge】
- 尚学堂1811期python视频_尚学堂1811期人工智能全套视频教程震撼发布,转型百万年薪工程师!...
- 一起来自制水果甜品吧
- bee run 报错 main.go:4:2: package myproject/routers is not in GOROOT (/usr/local/go/src/myproject/rout
- android日历提醒小程序源码,微信小程序倒班日历简洁实用demo完整源码
- DB-Engines:2016年10月份全球数据库排名
- 《炬丰科技-半导体工艺》 玻璃薄化蚀刻
- 如何解决Visual Studio编译错误,即“处理器体系结构之间的不匹配”?
- 中国驻越南大使馆当地有关部门联系电话
- [转]一个古老的编程游戏:Python Challenge全通攻略
- Python 爬虫实战 汽车某家(五) 口碑、评分
- 为什么c语言会入门到入土,大整数从入门到入土
- 爱奇艺JAVA后台面经
- 【动画消消乐】HTML+CSS 自定义加载动画 068
- 自动化专业前景分析和就业方向