在docker上部署springboot项目

本文详细介绍了如何在Docker上部署SpringBoot项目,包括项目准备、配置maven依赖、创建Dockerfile、生成及运行docker镜像。在Dockerfile中,讲解了FROM、VOLUME、ADD、EXPOSE、ENTRYPOINT等命令的用法,并提供了运行和检查镜像的命令。最后,提到了镜像拉取和相关资源链接。

准备向先看dockerfile的,看了一下,有点晦涩难懂,所以准备先将写一个可以部署到docker的springboot项目,这样慢慢理解才能更加容易。

一.项目准备

1.maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xichuan.dev</groupId>
	<artifactId>springboot-docker</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot-docker</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<docker.image.prefix>springboot-docker</docker.image.prefix>
	</properties>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.4.RELEASE</version>
		<relativePath></relativePath>
	</parent>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- Docker maven plugin -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.0.0</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>
		</plugins>
	</build>
</project>

注意的是,此文件有两处docker的配置

1.在properties中添加镜像名称

<properties>
    <docker.image.prefix>springboot-docker</docker.image.prefix>
</properties>

2.在plugins中添加docker插件

<!-- Docker maven plugin -->
<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>1.0.0</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>

2.启动文件

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class SpringbootDockerApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootDockerApplication.class, args);
	}

	@RestController
	public class DockerController {
		@RequestMapping("/")
		public String index() {
			return "Hello Docker!";
		}
	}
}

3.application.yml配置文件

server:
  port: 8005

项目运行后输入:http://localhost:8050/  会看到下面文字

二.在linux中操作docker

在linux中创建一个文件:Dockerfile ,并价格springboot项目的jar包与此文件放到同一个问价夹中。

1.添加下面文字到dockerfile中:

# 指定基础镜像
FROM java:8
# 维护者信息
MAINTAINER xichuan
# 定义匿名卷
VOLUME /tmp
#复制文件或修改名称
ADD springboot-docker-0.0.1-SNAPSHOT.jar app.jar
# 允许指定的端口
EXPOSE 8005
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]


2.使用的Dockerfile命令基本介绍:

  • FROM:表示基础镜像,即运行环境
  • VOLUME:一个特别指定的目录,用于存储数据,该命令的作用是在/var/lib/docker创建一个名为tmp的目录,在开启redis服务时,需要特别指定redis的数据存储在哪个文件夹,此时这个命令就十分有用
  • ADD:拷贝文件并且重命名
  • EXPOSE:并不是真正的发布端口,这个只是容器部署人员与建立image的人员之间的交流,即建立image的人员告诉容器布署人员容器应该映射哪个端口给外界
  • ENTRYPOINT:容器启动时运行的命令,相当于我们在命令行中输入java -jar xxxx.jar,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

3.生成docker image

在Dockerfile目录下,运行下面命令:

#根据Dockerfile生成镜像
docker build -t springboot-docker .

可以看到docker是根据Dockerfile中的每一行顺序执行指令的

4.通过docker imgaes查看所有的镜像:

docker images

5.在docker上运行springboot项目

docker run -p 8080:8005 -d springboot-docker

-p表示端口映射,冒号左边为docker容器外的端口号,右边为容器内的端口号,-d表示后台运行 docker表示REPOSITORY的值

在浏览器上输入:http://ip:8080/,就可以看到了

6.此搭建过程命令总结,以及其他要用到的命令

#根据Dockerfile生成镜像
docker build -t springboot-docker .

#查看所有镜像
docker images

#删除镜像,删除镜像的时候,必须现先将镜像所有的container删除
docker rmi  docker.io/tomcat:7.0.77-jre7   或者  docker rmi b39c68b7af30

#在docker运行项目
docker run -p 8080:8005 -d springboot-docker

#查看哪些容器正在运行
docker ps

#查看所有容器,包括已经停止的容器  
docker ps -a 

#启动、停止、启动容器
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id

#启动后,想进入容器,可以进入容器查看日志
docker attach container_name/container_id

#删除容器
docker rm container_name/container_id

更多命令详情,可以查看之前写的博客:docker基础知识总结_兮川的博客-优快云博客_docker基础知识

想要使用此镜像的同鞋可以使用下面命令拉去获取镜像

docker pull xichuan/springboot-docker:first

参考链接:

在docker上部署springboot项目_菜到怀疑人生的博客-优快云博客

Spring Boot 2 (四):使用 Docker 部署 Spring Boot - 纯洁的微笑博客

 github上有我更多的笔记:Raray-chuan (兮川) · GitHub,欢迎stars与following,如果有问题可以在issue中向我咨询

关注我的公众号,获取更多关于后端、大数据的知识

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值