在这篇文章中,我们将为您详细介绍(五)SpringBoot与Docker的内容,并且讨论关于docker+springboot的相关问题。此外,我们还会涉及一些关于Docker下运行springboo
在这篇文章中,我们将为您详细介绍(五) SpringBoot 与 Docker的内容,并且讨论关于docker+springboot的相关问题。此外,我们还会涉及一些关于Docker 下运行 springboot、Docker 化 springboot 项目、docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)、docker 部署 springboot 应用的知识,以帮助您更全面地了解这个主题。
本文目录一览:- (五) SpringBoot 与 Docker(docker+springboot)
- Docker 下运行 springboot
- Docker 化 springboot 项目
- docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)
- docker 部署 springboot 应用
(五) SpringBoot 与 Docker(docker+springboot)
1、简介
Docker 是一个开源的应用容器引擎;
Docker 支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的
2、核心概念
docker 主机 (Host): 安装了 Docker 程序的机器 (Docker 直接安装在操作系统之上);
docker 客户端 (Client): 连接 docker 主机进行操作;
docker 仓库 (Registry): 用来保存各种打包好的软件镜像;
docker 镜像 (Images): 软件打包好的镜像;放在 docker 仓库中;
docker 容器 (Container): 镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用;
使用 Docker 的步骤:
1)、安装 Docker
2)、去 Docker 仓库找到这个软件对应的镜像;
3)、使用 Docker 运行这个镜像,这个镜像就会生成一个 Docker 容器;
4)、对容器的启动停止就是对软件的启动停止
3、安装 Docker
1)、安装 linux 虚拟机
1)、VMWare、VitualBox (安装);
2)、导入虚拟机文件;
3)、双击启动 linux 虚拟机;
4)、使用客户端连接 linux 服务器进行命令操作;
5)、设置虚拟机网络;
桥接网络 ===> 选好网卡 ===> 接入网线
6)、设置好网络之后使用命令重启虚拟机的网络
1 service network restart
7)、查看 linux 的 ip 地址
1 ip addr
8)、使用客户端连接
2)、在 linux 虚拟机上安装 docker
步骤:
1、检查内核版本,必须是3.10及以上
uname -r
2、安装docker
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.13.1, build dded712/1.13.1
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6、停止docker
[root@localhost ~]# systemctl stop docker
[root@localhost ~]# docker info
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
4、Docker 常用命令 & 操作
1)、镜像操作
docker search 关键字
eg:docker search redis
2)、容器操作
软件镜像 ---- 运行镜像 ---- 产生一个容器 (正在运行的软件);
步骤:
1、搜索镜像
[root@bogon ~]# docker search tomcat
2、拉取镜像
[root@bogon ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、docker ps
查看运行中的容器
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@bogon~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
3)、安装 MySQL 示例
错误的启动
1 [root@localhost ~]# docker run --name mysql01 -d mysql
2 42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
3
4 mysql退出了
5 [root@localhost ~]# docker ps -a
6 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7 42f09819908b mysql "docker-entrypoint.sh" 34 seconds ago Exited (1) 33 seconds ago mysql01
8 538bde63e500 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago compassionate_
9 goldstine
10 c4f1ac60b3fc tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago lonely_fermi
11 81ec743a5271 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago sick_ramanujan
12
13
14 //错误日志
15 [root@localhost ~]# docker logs 42f09819908b
16 error: database is uninitialized and password option is not specified
17 You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
正确的启动
1 [root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
2 b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
3 [root@localhost ~]# docker ps
4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5 b874c56bec49 mysql "docker-entrypoint.sh" 4 seconds ago Up 3 seconds 3306/tcp mysql01
做了端口映射
1 [root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
2 ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
3 [root@localhost ~]# docker ps
4 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5 ad10e4bc5c6a mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02
几个其他的高级操作
docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
指定mysql的一些配置参数
Docker 下运行 springboot
原文地址:http://blog.csdn.net/boling_cavalry/article/details/78991870
本章我们做个 Docker 镜像,今后用此镜像的容器运行 springboot 的 jar 包,再通过端口映射对外提供 http 服务;
实战环境
本次实战的环境是 Ubuntu16,安装的 Docker 版本是 17.03.2-ce
制作材料
制作镜像所需的材料很简单:jdk1.8 安装包,此文件我已分割后上传到 github 上 (由于 github 上传单个文件不能大于 50M,所以只能分割后上传),地址是:https://github.com/zq2599/springbootrun,如下图,红框中的文件就是分割好的 jdk1.8 安装包:
Dockerfile
Dockerfile 内容如下,每行都有注释,就不再赘述了:
# Docker image for springboot file run
# VERSION 0.0.1
# Author: bolingcavalry
#基础镜像使用centos7
FROM centos:centos7
#作者
MAINTAINER BolingCavalry <zq2599@gmail.com>
#定义工作目录
ENV WORK_PATH /usr/local/work
#定义jdk1.8的文件夹
ENV JDK_PACKAGE_FILE jdk1.8.0_144
#定义jdk1.8的文件名
ENV JDK_RPM_FILE jdk-8u144-linux-x64.rpm
#yum更新
RUN yum -y update
#把分割过的jdk1.8安装文件复制到工作目录
COPY ./jdkrpm-* $WORK_PATH/
#用本地分割过的文件恢复原有的jdk1.8的安装文件
RUN cat $WORK_PATH/jdkrpm-* > $WORK_PATH/$JDK_RPM_FILE
#本地安装jdk1.8
RUN yum -y localinstall $WORK_PATH/$JDK_RPM_FILE
#暴露8080端口
EXPOSE 8080
将 Dockerfile 和 JDK 安装包的分割文件放在同一目录下,在此目录下执行如下命令:
docker build -t bolingcavalry/springbootrun:0.0.1 .
稍后即构建成功,如下图所示:
验证镜像
验证此镜像的方法是用该镜像启动一个容器,再运行一个 spring boot 工程试试;
- 执行以下命令启动一个容器:
docker run --name=test001 -p 8080:8080 -idt -v /usr/local/work/share:/usr/Downloads bolingcavalry/springbootrun:0.0.1
该容器启动后,8080 端口被映射到前电脑的 8080 端口,目录 /usr/Downloads 被映射到当前电脑的 /usr/local/work/share 目录;
2. 执行 docker ps 命令看一下本机活跃容器,如下图,容器启动成功:
3. 您可以自己建一个 spring boot 的 web 工程,做个最简单的 controller,再打包成 jar 文件,或者直接用我的 git 仓库中的 springbootdemo-0.0.1-SNAPSHOT.jar 文件 (地址:https://github.com/zq2599/springbootrun),放入本机的 /usr/local/work/share 目录;
4. 执行 docker exec -it test001 /bin/bash 命令进入容器,再进入容器的 /usr/Downloads 目录,这个目录和当前电脑的 /usr/local/work/share 是映射关系,所以步骤 3 中复制的 springbootdemo-0.0.1-SNAPSHOT.jar 文件就在这个目录下了;
5. 执行命令 java -jar springbootdemo-0.0.1-SNAPSHOT.jar,启动 spring boot 成功,如下图:
6. 我的电脑 IP 是 192.168.119.155,所以用浏览器访问 http://192.168.119.155:8080,看到如下信息表示服务正常:
以上就是 springboot 运行环境镜像的制作过程,您可以自己试着做出这个镜像文件,也可以直接使用 bolingcavalry/springbootrun:0.0.1 这个镜像,因为我已 push 到 hub.docker.com 上去了;
欢迎关注我的公众号:程序员欣宸
本文同步分享在 博客 “程序员欣宸”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。
Docker 化 springboot 项目
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lnas01</groupId>
<artifactId>docker-spring-boot</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>docker-spring-boot</name>
<description>Getting started with Spring Boot and Docker</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- end::plugin[] -->
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<docker.image.prefix>lnas01</docker.image.prefix>
<spring.boot.version>1.3.3.RELEASE</spring.boot.version>
</properties>
</project>
dockerfile:src/main/docker/Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD docker-spring-boot-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
构建镜像:
mvn package docker:build
运行镜像:
docker run -p 8080:8080 -t lnas01/docker-spring-boot
docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)
docker 运行 jenkins 及 vue 项目与 springboot 项目:
-
一。安装 docker
-
二.docker 运行 jenkins 为自动打包运行做准备
-
三.jenkins 的使用及自动打包 vue 项目
-
四.docker 运行 nginx
-
五.jenkins 打包 springboot 服务且在 docker 中运行
#####1. 立即构建 输入任务名称:service_blog 选择 maven 项目 (先要在插件管理中安装 maven 插件) #####2. 配置 ###### 源码管理 选择 git (先要在插件管理中安装 git 插件) 输入 git 地址、秘钥及需要打包的分支 ######Pre Steps Build: pom.xml, 输入 maven 命令 clean package Post Steps:add post-build step-> 选择执行 shell 输入 shell 命令:
#!/bin/bash
#下面的路径都是指jenkins容器中的路径,非宿主机服务器的路径(通过该命令进入容器查看:docker exec -it {jenkins容器id} /bin/bash)
#操作/项目路径(Dockerfile[下附配置]存放的路径)
BASE_PATH=/var/jenkins_home/service
# 源jar路径(jenkins利用maven打包项目的jar包的路径,其service_blog则为构建时输入的任务名称)
SOURCE_PATH=/var/jenkins_home/workspace/service_blog/target
#docker 镜像/容器名字 这里都命名为这个(自定义)
SERVER_NAME=service-blog
#jar名字(jenkins利用maven打包项目的jar包名称)
JAR_NAME=personal_blog-0.0.1-SNAPSHOT
#容器id
CID=$(docker ps -a | grep "$SERVER_NAME" | awk ''{print $1}'')
#镜像id
IID=$(docker images -a | grep "$SERVER_NAME" | awk ''{print $3}'')
DATE=`date +%Y%m%d%H%M`
# 最新构建代码 移动到项目环境
function transfer(){
echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH/
echo "迁移完成"
}
# 备份
function backup(){
if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
echo "$JAR_NAME.jar 备份..."
cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "备份 $JAR_NAME.jar 完成"
else
echo "$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
fi
}
# 构建docker镜像
function build(){
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID,删除后重新构建"
docker rmi $IID
echo "删除完毕,开始构建镜像"
cd $BASE_PATH
docker build -t $SERVER_NAME .
else
echo "不存在$SERVER_NAME镜像,开始构建镜像"
cd $BASE_PATH
docker build -t $SERVER_NAME .
fi
}
# 运行docker容器
function run(){
echo "执行backup ..."
backup
echo "执行transfer ..."
transfer
echo "执行build ..."
build
echo "docker run ..."
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID,停止后 删除,重新创建启动"
docker stop $CID
docker rm $CID
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8089:8089 $SERVER_NAME
echo "$SERVER_NAME容器重启完成"
else
echo "不存在$SERVER_NAME容器,docker run创建容器..."
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8089:8089 $SERVER_NAME
echo "$SERVER_NAME容器创建完成"
fi
}
#入口
run
springboot 项目的 Dockerfile 配置:
#基于openjdk:8
FROM openjdk:8
ADD personal_blog-0.0.1-SNAPSHOT.jar personal_blog.jar
# 指定当前操作目录
WORKDIR /var/jenkins_home/service
ADD personal_blog-0.0.1-SNAPSHOT.jar personal_blog.jar
RUN bash -c ''touch /personal_blog.jar''
ENTRYPOINT ["java","-Djava.security.egd-file:/dev/./urandom","-jar","-Xmx1024m","-Xms1024m","/personal_blog.jar"]
保存配置 #####3. 立即构建 查看控制台,看看是否有错误,最后是否 success 查看 springboot 应用的日志,看看是否启动成功,是否有错误:docker logs -f --tail=100 {容器 id}
docker 部署 springboot 应用
1. 安装运行 node image
docker pull java:8
2. 将编译后的 jar 包上传到主机上
3. 编写 dockerfile, 并创建镜像
Dockerfile

FROM java:8
MAINTAINER hzh
VOLUME /tmp
RUN mkdir -p /var/publish/webapi
ADD webapi-0.0.1.jar /var/publish/webapi/app.jar
WORKDIR /var/publish/webapi
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

在此目录下执行生成镜像
docker build -t hzh/springbootapi:v1 .
4. 运行容器
docker run -d -p 3003:8081 --name springbootv1 hzh/springbootapi:v1
今天关于(五) SpringBoot 与 Docker和docker+springboot的分享就到这里,希望大家有所收获,若想了解更多关于Docker 下运行 springboot、Docker 化 springboot 项目、docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)、docker 部署 springboot 应用等相关知识,可以在本站进行查询。
本文标签: