GVKun编程网logo

(五) SpringBoot 与 Docker(docker+springboot)

3

在这篇文章中,我们将为您详细介绍(五)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)

(五) 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

我们经常去 docker hub 上检索镜像的详细信息,如镜像的 TAG 拉取 docker pull 镜像名:tag :tag 是可选的,tag 表示标签,多为软件的版本,默认是 latest 列表 docker images 查看所有本地镜像 删除 docker rmi image-id 删除指定的本地镜像

 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

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 工程试试;

  1. 执行以下命令启动一个容器:
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 项目

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>

  

dockerfilesrc/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 项目 (五.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 应用

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 与 Dockerdocker+springboot的分享就到这里,希望大家有所收获,若想了解更多关于Docker 下运行 springboot、Docker 化 springboot 项目、docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)、docker 部署 springboot 应用等相关知识,可以在本站进行查询。

本文标签: