Docker 镜像编排并部署SpringBoot应用
Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining and running multi-container Docker applications.
很简单的一句话,下面我们看下怎么部署一个JavaWeb项目.主要有几大步骤:
- 安装Dcoker 和Docker-compose
- 编译项目生成JAR包
- 创建自定义的docker镜像
- 创建docker-compose的配置文件
- 启动服务
安装
安装docker 和 docker-compose 一样都非常的简单,这里不在多赘述,官网都有非常详细的教程.
至于docker_compose就是一个命令文件,将其所在的路径配置PATH环境变量中即可,不配置也行,这样的话就要打全路径了,比较麻烦.
- Docker文档官网
- Docker-componse 安装文档
- Dockercomponse源码
启动Docker服务
我是用的是Manjaro的Linux发行版本,启动docker服务的命令systemctl start docker
,
$ docker version
Client:Version: 18.05.0-ceAPI version: 1.37Go version: go1.10.2Git commit: f150324782Built: Wed May 16 22:27:45 2018OS/Arch: linux/amd64Experimental: falseOrchestrator: swarmServer:Engine:Version: 18.05.0-ceAPI version: 1.37 (minimum version 1.12)Go version: go1.10.2Git commit: f150324782Built: Wed May 16 22:28:17 2018OS/Arch: linux/amd64Experimental: false
查看Docker-compose
下载docker-compose完成之后,使用chmod +x docker-componse 来授权,否则会出现权限拒绝的报错信息
配置完成只有,在命令行中输入docker-compose version
查看是否安装成功,输出类似以下信息,则代表成功
$ docker-compose version
docker-compose version 1.22.0-rc2, build 6817b533
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f 25 May 2017
创建Docker镜像
创建配置文件
此文件名位Dockerfile
FROM hub.c.163.com/library/java:8
VOLUME /tmp
ADD dmc_user.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 依赖网易云的java:8镜像
- 拷贝jar文件到镜像中
- 执行命令运行
下面我们将使用Shell脚本的方式来利用这个Docker文件来进行创建镜像
编译生成镜像文件
由于这里使用SpringBoot创建的项目,个人使用Gradle构建项目,使用Maven或者其他方式构建的均可,这里写了一个Shell脚本,如下所示:
#!/usr/bin/env bash#配置相关的路径地址
#配置项目名称
project_name="DMC_USER"
# 配置源码地址
project_dir="/home/yan/code/work/zhuxun/dmc_user"
#配置shell地址
shell_dir="/home/yan/code/shell/dmc/user"echo "正在准备编译项目${project_name}....."
#切换到项目目录
cd ${project_dir}
echo "已经成功切换到${project_name}的工作目录......"
#使用gradle编译,跳过单元测试
./gradlew build -x test
if [ $? -eq 0 ]; thenecho "正在拷贝JAR文件............"
# 编译成功,则将JAR文件拷贝当前Shell目录cp build/libs/dmc_user-0.0.1-SNAPSHOT.jar ${shell_dir}/dmc_user.jarcd ${shell_dir}echo "编译成功,正在编译为Docker镜像,请等待...."
# 使用docker build命令构建镜像文件,此时会读取Dockerfile文件docker build -t dmc_user:latest ${shell_dir}if [ $? -eq 0 ]; thenecho "编译镜像成功,请使用docker images命令查看效果....."fi
fi
添加运行权限,运行之......
由于我这里使用的多个项目进行同事运行,因此需要在次编译另外一个项目,方法类似,这里不在赘述.
编译完成之后,我们在Dockerfile中查看一下镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dmc_user latest a7ea7b79390f 3 hours ago 692MB
dmc_apim latest 56c7f37aee13 16 hours ago 704MB
hub.c.163.com/library/java 8 a001fc27db5a 19 months ago 643MB
创建配置文件
到这里,我们的镜像已经准备好了,下面我们使用docker-compose来编排镜像,组成新的服务.在shell的目录下创建 文件名称docker-compose.yml的配置文件,内容如下(删除注释)...
# 配置文件的版本
version: '2'
# 创建的服务,这里我创建了3个服务,两个jar项目作为演示,一个mysql作为服务器
services:dmc_api:
# 容器的名称container_name: dmc_apim
# 容器的端口信息,这里的SpringBoot项目的端口是9092,可以在宿主机通过8082访问ports:- "8082:9092"
# 依赖的docker images镜像名称,当然也有版本这里是简写 dmc_api:latestimage: dmc_apim
# 创建自服务的依赖项,此服务依赖属于mysql,在我们创建的三个服务中的最后一个depends_on:- dmc_dev_mysqldmc_user:container_name: dmc_userports:- "8081:9091"image: dmc_userdepends_on:- dmc_dev_mysqldmc_dev_mysql:
# 这个属性非常重要,在SpringBoot的服务中,可以通过这个名称访问,如果名称冲突,docker_compose会自动的添加后缀导致SpringBoot项目找不到数据库连接,
# 从而启动失败,因此需要配置容器的名称container_name: dmc_dev_mysql
# 挂载目录,其中 /docker-entrypoint-initdb.d/ 是比较重要的,他可以进行mysql的初始化,在我们的mysql服务的时候启动初始化脚本
# 因此需要在挂载的目录下创建init.sql脚本文件,用于初始化volumes:- ./data/:/var/lib/mysql/- ./mysql/init/:/docker-entrypoint-initdb.d/
# 配置映射端口,这里mysql的端口默认是3306,我们将其映射到宿主机的9936端口ports:- "9936:3306"
# 依赖的镜像image: hub.c.163.com/library/mysql
# 镜像运行需要的参数,可以根据自己的需要来配置,这个请参考镜像的说明文件environment:MYSQL_ALLOW_EMPTY_PASSWORD: yse
这里和创建docker Image类似,都是使用配置文件,我们来看下我们的配置文件,配置文件名称是固定的,因此要求名称要写对,否则会报一些错误:
$ docker-compose up
ERROR: Can't find a suitable configuration file in this directory or anyparent. Are you in the right directory?Supported filenames: docker-compose.yml, docker-compose.yaml
可以看到,最后一句话中说明了配置的文件名称 Supported filenames: docker-compose.yml, docker-compose.yaml
```yml
启动Docker-compose
使用命令docker-compose up
可以启动编排,要求运行此命令运行路径下必须有docker-compose的配置文件,否则会报上面的找不到文件,
添加 -d 就可以后台运行,查看docker-compose的帮助文件我们看下docker容器的状况:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c2b3823bd93 dmc_apim "java -Djava.securit…" 2 hours ago Up 2 hours 0.0.0.0:8082->9092/tcp dmc_apim
f1473486bbec dmc_user "java -Djava.securit…" 2 hours ago Up 2 hours 0.0.0.0:8081->9091/tcp dmc_user
3c632926a642 hub.c.163.com/library/mysql "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:9936->3306/tcp dmc_dev_mysql
可以看到两个SpringBoot项目和一个MySql项目在docker中运行完成.....
附录 docker-compose命令
命令名称 | 说明 |
---|---|
docker-compose build | Build or rebuild services |
docker-compose bundle | Generate a Docker bundle from the Compose file |
docker-compose config | Validate and view the Compose file |
docker-compose create | Create services |
docker-compose down | Stop and remove containers, networks, images, and volumes |
docker-compose events | Receive real time events from containers |
docker-compose exec | Execute a command in a running container |
docker-compose help | Get help on a command |
docker-compose images | List images |
docker-compose kill | Kill containers |
docker-compose logs | View output from containers |
docker-compose pause | Pause services |
docker-compose port | Print the public port for a port binding |
docker-compose ps | List containers |
docker-compose pull | Pull service images |
docker-compose push | Push service images |
docker-compose restart | Restart services |
docker-compose rm | Remove stopped containers |
docker-compose run | Run a one-off command |
docker-compose scale | Set number of containers for a service |
docker-compose start | Start services |
docker-compose stop | Stop services |
docker-compose top | Display the running processes |
docker-compose unpause | Unpause services |
docker-compose up | Create and start containers |
docker-compose version | Show the Docker-Compose version information |
更多内容请查看 Docker-componse官网教程
转载于:https://www.cnblogs.com/zhoutao825638/p/10382182.html
Docker 镜像编排并部署SpringBoot应用相关推荐
- 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...
- Docker 镜像仓库 Harbor 部署 及 跨数据复制
Docker 镜像仓库 Harbor 部署 及 跨数据复制 注: 由于 Harbor 是基于 Docker Registry V2 版本,所以Docker version 17.05.0-ce, bu ...
- 使用docker和jenkins简单部署springboot项目
安装docker Docker 要求 CentOS 系统的内核版本高于 3.10 uname -r 3.10.0-327.el7.x86_64 安装docker yum -y install dock ...
- skywalking—docker镜像构建k8s部署
前言 skywalking是个非常不错的apm产品,但是在使用过程中有个非常蛋疼的问题,在基于es的存储情况下,es的数据一有问题,就会导致整个skywalking web ui服务不可用,然后需要a ...
- gitlab-ci docker maven 自动化流水线部署 springboot多模块项目
一.准备 首先 需要两台服务器(这里为了下面方便理解,我们约定这两台服务器地址.名称和系统) 1.gitlab 服务器 服务器A(地址10.10.10.7)(内存大于4g不然会一直死)( CentOS ...
- 使用Spring Boot Operator部署SpringBoot到K8S
点击关注公众号,实用技术文章及时了解 来源:qingmu.io/2020/04/08/ Spring-Boot-Operator-User-Guide 前言 在Kubernetes中部署spring ...
- Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像
⑦ Docker 网络 7.1 理解Docker0 清空下前面的docker 镜像.容器 # 删除全部容器 [root@cVzhanshi tomcat-diy]# docker rm -f $(do ...
- 还在手动发包?手把手教你 Jenkins 自动化部署SpringBoot
大家好,我是一航! 程序员每天的工作,几乎都是围绕着开发.打包.发布.测试这些点循环往复,但这些过程中,有很大一部分重复性的苦力活,不仅消耗了我们大量的时间,但有不得不做:纯手工去集成.部署,既苦力, ...
- Docker: vmware企业级docker镜像私服--Harbor的搭建
一 Harbor仓库介绍 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,Harbor主要提供Dcoker Registry管理UI,提供的功能包括:基于角色访问 ...
最新文章
- QCopChannel的用法
- 从美图、4399生根,到趣店、瑞幸落户,厦门离中国的西雅图还有多远?
- PC与手机的IPCP协商
- 国内比较好用的5款测试管理工具
- python jieba词频统计英文文本_python实战,中文自然语言处理,应用jieba库来统计文本词频...
- python爬房源信息_用python爬取链家网的二手房信息
- 好用!Visual Studio for mac(微软代码编辑器)中文版
- JAVA聊天室简易版1.0(多线程)
- HDU 4283 You Are the One(区间DP)
- c语言怎样用vc绘图,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
- 线性代数中矩阵相乘如何计算
- 手机APP——扫描全能王去除水印字样
- C语言中 两个分号啥意思,问什么C程序里总是提示缺少分号;,而明明有分号?...
- PEP 635 – Structural Pattern Matching: Motivation and Rationale
- 表格结构标签 thead tbody
- 【转】 笔记本散热维护
- 高盛vr/ar研究报告
- Robin:SEO从业者打造个人品牌的八个建议,白杨SEO个人品牌实战举例
- 用python创建及使用一个tls_Python使用TLSv1.2和Forward Secrecy粘贴SSL服务器
- archive 归档解归档
热门文章
- html哪个是最大标题,在下面的HTML中,哪个是最大的标题( )
- 3D影视公司招聘内容摘录汇总
- python axes get_Python Matplotlib.axes.Axes.get_yaxis()用法及代码示例
- M-JPEG、MPEG4、H.264都有何区别
- RSA加解密在Android中注意
- 音频切歌消除POP声或者噪音算法,淡入淡出算法
- php三级分销无法绑定佣金,2018最新三级分销佣金比例设置方案
- 分销系统开发 分销商城开发 分销功能 Java开发三级分销业务功能
- 面向对象编程与关系型数据库间的不一致(Object-relational impedance mismatch)
- 赚钱 36 计 - 第八计:干股计