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服务
我是用的是Manjaro的Linux发行版本,启动docker服务的命令systemctl start docker,
$ docker version
Client:
Version: 18.05.0-ce
API version: 1.37
Go version: go1.10.2
Git commit: f150324782
Built: Wed May 16 22:27:45 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.05.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.10.2
Git commit: f150324782
Built: Wed May 16 22:28:17 2018
OS/Arch: linux/amd64
Experimental: 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 ]; then
echo "正在拷贝JAR文件............"
# 编译成功,则将JAR文件拷贝当前Shell目录
cp build/libs/dmc_user-0.0.1-SNAPSHOT.jar ${shell_dir}/dmc_user.jar
cd ${shell_dir}
echo "编译成功,正在编译为Docker镜像,请等待...."
# 使用docker build命令构建镜像文件,此时会读取Dockerfile文件
docker build -t dmc_user:latest ${shell_dir}
if [ $? -eq 0 ]; then
echo "编译镜像成功,请使用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:latest
image: dmc_apim
# 创建自服务的依赖项,此服务依赖属于mysql,在我们创建的三个服务中的最后一个
depends_on:
- dmc_dev_mysql
dmc_user:
container_name: dmc_user
ports:
- "8081:9091"
image: dmc_user
depends_on:
- dmc_dev_mysql
dmc_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 any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
可以看到,最后一句话中说明了配置的文件名称 Supported filenames: docker-compose.yml, docker-compose.yaml
## 启动Docker-compose
使用命令```docker-compose up```可以启动编排,要求运行此命令运行路径下必须有docker-compose的配置文件,否则会报上面的找不到文件,
添加 *-d * 就可以后台运行,查看docker-compose的帮助文件我们看下docker容器的状况:
```shell
$ 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官网教程
Docker 镜像编排并部署SpringBoot应用的更多相关文章
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- 使用DaoCloud持续构建docker镜像,自动化部署
我们学会了在主机上安装部署docker,也学会了构建自己的docker镜像和容器,启停也都会用了,下一步就需要持续构建发布docker的技能了. 我们希望能在代码提交后,有个远程服务能自动开始构建项目 ...
- Docker Compose编排工具部署lnmp实践及理论(详细)
目录 一.理论概述 编排 部署 Compose原理 二.使用docker compose 部署lnmp 三.测试 四.总结 一.理论概述 Docker Compose是一个定义及运行多个Docker容 ...
- Docker快速上手之部署SpringBoot项目
Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装.分发.部署.运行等生命周期 ...
- 企业级Docker镜像仓库Harbor部署与使用
yum install docker 官网地址:https://docs.docker.com/compose/install/ 运行此命令以下载Docker Compose的当前稳定版本 1 sud ...
- Docker镜像仓库Harbor部署
一.Harbor组件 组件 功能 harbor-adminserver 配置管理中心 harbor-db Mysql数据库 harbor-jobservice 负责镜像复制 harbor-log 记录 ...
- k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦
背景 系统版本:CentOS7 Jenkins版本:2.222.1 maven版本:apache-maven-3.6.3 Java版本:jdk1.8.0_231 Git版本:1.8.3.1 docke ...
- Mac下 Docker部署SpringBoot应用
一.安装Docker环境 使用 Homebrew 安装 macOS 我们可以使用 Homebrew 来安装 Docker. Homebrew 的 Cask 已经支持 Docker for Mac,因此 ...
- IDEA部署Spring-boot到Docker容器
一.准备工作 idea安装Docker插件 centos7系统安装docker 二.打开docker远程端口 1. 编辑docker.service文件 vim /usr/lib/systemd/sy ...
随机推荐
- Win10U盘启动盘制作及Win10系统安装
准备工具: 1:一个8GU盘 2:下载MediaCreationTool1803.exe程序 及参考文档. 启动盘制作步骤: 1:运行 2:按照截图步骤依次...... 3:制作完成后插拔一下U盘在看 ...
- [Swift]LeetCode100. 相同的树 | Same Tree
Given two binary trees, write a function to check if they are the same or not. Two binary trees are ...
- [Swift]LeetCode241. 为运算表达式设计优先级 | Different Ways to Add Parentheses
Given a string of numbers and operators, return all possible results from computing all the differen ...
- [Swift]LeetCode410. 分割数组的最大值 | Split Array Largest Sum
Given an array which consists of non-negative integers and an integer m, you can split the array int ...
- [Swift]LeetCode686. 重复叠加字符串匹配 | Repeated String Match
Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...
- 一个简单IP防刷工具类, x秒内最多允许y次单ip操作
IP防刷,也就是在短时间内有大量相同ip的请求,可能是恶意的,也可能是超出业务范围的.总之,我们需要杜绝短时间内大量请求的问题,怎么处理? 其实这个问题,真的是太常见和太简单了,但是真正来做的时候,可 ...
- 【异常】Servlet.service() for servlet [springMvc] in context with path [/orderdishessystem] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: net/sf/ezmorph/M
今天做登录的时候,引入json-lib-2.1-jdk15.jar的包时,执行到JSONObject jsonObject = new JSONObject()对象就报标题的那个错. 原来是除了要导入 ...
- C# 使用 HttpClient 调用 WebService 提示 NoSOAPAction
问题 在自行构造 HttpClient 请求 SOAP 接口之后,返回 500 错误,并且提示 NoSOAPAction 信息. 原因 造成这个问题的主要原因是因为缺少了 SOAPAction 标头, ...
- 手把手的教你激活PyCharm --Pycharm激活详细教程(二)(非常详细,非常实用)
简介 Pycharm安装以后必须激活后,才能正常的使用.否则就不能使用. 激活PyCharm 1.Activation code激活 优点:Window.Mac.Ubantu都稳定有效,关键是这种激活 ...
- Nancy in .Net Core学习笔记 - 视图引擎
前文中我们介绍了Nancy中的路由,这一篇我们来介绍一下Nancy中的视图引擎. Nancy中如何返回一个视图(View) 在ASP.NET Mvc中,我们使用ViewResult类来返回一个视图.N ...