Docker快速上手之搭建SpringBoot项目
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
一、我所理解的Docker
我喜欢将Docker比喻成"方便面",为什么说是方便面,之前部署项目环境的配置十分麻烦,换一台机器,就要重来一次,费力费时。举个栗子,我们部署一个SpringBoot项目,我们需要在服务器上面配置项目的运行环境,要安装各种各样的软件JDK/MySQL/Redis/nginx,安装和配置这些东西十分麻烦,下次需要换个服务器重新部署又得重新安装一遍,简直要命。而Docker能将项目连带着运行环境一同部署过去,就好像吃买泡面吃,泡面所需的调料包还有工具都附加在了里面。一句话总结Docker的好处,Docker解决了运行环境和配置问题,方便做持续集成并有助于整体发布的容器虚拟化技术。
二、Docker与虚拟机的区别
| Docker容器 | 虚拟机(VM) | |
| 操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
| 存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk、vdi等) |
| 运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
| 移植性 | 轻便、灵活,适用于Linux | 笨重,与虚拟化技术耦合度高 |
| 硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
三、Docker里面三个重要的概念Dockerfile、镜像(image)、容器(Container)
1.Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
Dockerfile体系结构:
FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时需要运行的命令 EXPOSE 当前容器对外暴露出的端口 WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 ENV 用来在构建镜像过程中设置环境变量 AD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 VOLUME 容器数据卷,用于数据保存和持久化工作 CMD 指定一个容器启动时要运行的命令。Dockerfile中可以有多个CMD指令,但只要最后一个生效,CMD会被docker run之后的参数替换 ENTRYPOINT 指定一个容器启动时要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数 ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
2.镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
3.容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境(包括root用户权限、用户空间和网络空间等)和运行在其中的应用程序。
四、安装Docker
1.安装Docker依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装 Docker-CE
yum install docker-ce
4.查看是否安装成功
docker version

五、使用Docker安装MySQL
1.使用Docker拉取Mysql镜像(这里安装的是MySQL5.6版本)
docker pull mysql:5.6
2.安装mysql命令
docker run -d -p 3306:3306 --name mysql -v /ray/mysql/conf:/etc/mysql/conf.d -v /ray/mysql/logs:/logs -v /ray/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.6
命令说明:
-p 3306:3306 将主机的3306端口映射到docker容器的3306端口 --name mysql 运行服务器名字 -v /ray/mysql/conf:/etc/mysql/conf.d 将主机/ray/mysql目录下的conf/my.cnf挂载到容器的/etc/mysql/conf.d -v /ray/mysql/logs:/logs 将主机/ray/mysql目录下的logs目录挂载到容器的/logs -v /ray/mysql/data:/var/lib/mysql 将主机/ray/mysql目录下的data目录挂载到容器的/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin 初始化root用户的密码 -d mysql:5.6 后台程序运行mysql5.6
3.进入mysql
docker exec -it MySQL运行成功后的容器ID /bin/bash
然后即可登录MySQL,创建数据库,或者使用Navicat等工具创建数据库。
六、使用Docker安装Redis
1.使用Docker拉取Redis镜像(这里安装的是Redis3.2版本)
docker pull redis:3.2
2.安装redis命令(这里不对命令做解释)
docker run -p 6379:6379 -v /ray/redis/data:/data -v /ray/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
七、Docker部署SpringBoot项目
1.将项目打包成jar包(假设名字为myblog.jar),并编写一个Dockerfile文件,文件内容如下:
# Docker image for springboot file run # VERSION 0.0.1 # Author: Ray # 基础镜像使用java FROM java:8 # 作者 MAINTAINER Ray <185048761@qq.com> # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD myblog.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] #暴露8080端口 EXPOSE 80
2.将这两个文件一并上传至服务器中的同一个目录下面,进入该文件夹后执行此命令构建镜像:

docker build -t myblog.jar .
3.生成docker容器,并运行
docker run -d -p 80:80 myblog.jar
等一会儿,SpringBoot项目跑起来了后,就可以使用浏览器通过80端口进行访问了
Docker快速上手之搭建SpringBoot项目的更多相关文章
- Docker快速上手之部署SpringBoot项目
Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
- 在线官网Spring Initializr 或 IntelliJ IDEA 快速搭建springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 那么,如何快速新建一个一个spring ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA
笔记 2.快速搭建SpringBoot项目,采用IDEA 简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料: IDEA使用文档 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse
笔记 1.快速搭建SpringBoot项目,采用Eclipse 简介:使用SpringBoot start在线生成项目基本框架并导入到eclipse中 1.站点地址:http://start. ...
- 使用IDEA快速搭建Springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 下面就介绍一下如何使用idea快速搭建 ...
- SpringBoot从入门到精通一(idea优雅搭建SpringBoot项目)
前言 在没有SpringBoot之前,我们搭建的是SSM(SpingMVC+Spring+Mybatis)项目,在搭建SSM项目的时候,我们要经过一系列的繁琐配置,例如:application,web ...
- 搭建 SpringBoot 项目(前端页面 + 数据库 + 实现源码)
SpringBoot 项目整合源码 SpringBoot 项目整合 一.项目准备 1.1 快速创建 SpringBoot 项目 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二. ...
- idea:spring initializr无web勾选,maven方式搭建springboot项目。jdk7创建springboot项目的版本不兼容问题。
一.idea 使用spring initializr不选择web搭建springboot项目 1.file => new => project 2.直接next到finish结束. 3.完 ...
- idea快速搭建springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置',实现零配置. 那么,如何在idea中创建一个spri ...
随机推荐
- 【题解】JXOI2018游戏(组合数)
[题解]JXOI2018游戏(组合数) 题目大意 对于\([l,r]\)中的数,你有一种操作,就是删除一个数及其所有倍数.问你删除所有数的所有方案的步数之和. 由于这里是简化题意,有一个东西没有提到: ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- Python 任务自动化工具 tox 教程
在我刚翻译完的 Python 打包系列文章中,作者提到了一个神奇的测试工具 tox,而且他本人就是 tox 的维护者之一.趁着话题的相关性,本文将对它做简单的介绍,说不定大家在开发项目时能够用得上. ...
- 从0开发3D引擎(四):搭建测试环境
目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测 ...
- C# 数独求解算法。
前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法.不幸的是这种方法经常出现填到一半才发现有单元格无数可填 ...
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- python之字符串的简单应用
1.实现5+7加法运算 value = input(">>>") v1, v2 = value.split('+') c1 = int(v1) c2 = int( ...
- html 小游戏合集(1.0)
最近做了个小游戏合集,有点沙雕,毕竟是1.0,将就看看. <!DOCTYPE html> <html> <head> <meta charset=" ...
- python线性数据结构
1.栈(Stack)(后进先出) 栈的实现: class Stack: def __init__(self): self.items = [] def isEmpty(self): return se ...
- 在A卡下的 Matlab 运行C/C++混编的GPU程序
首先将你的.MEX文件和matlab脚本放在一个文件夹下开始运行 如果出错查看是那个.MEX文件出错 用depends这个软件查看他的依赖dll文件下载对应文件 放到当前文件夹下,运行成功.