Docker 技术发展为微服务落地提供了更加便利的环境,docker配合kubernetes,可以编排容器,通俗来说,就是通过kubernetes,可以监控微服务的响应情况,请求多服务响应慢时自动拉起docker服务,来缓解服务压力,且不需要人工干预

本篇的目的是记录系统上线时,把项目打包为容器

服务器需要用到的环境与软件

  • centos7.3
  • java jdk8_191
  • maven3.5.3
  • docker
1.通过VM安装centos7.3,开启IP,开启ssh,关闭防火墙
2.jdk8_191:下载jdk-8u191-linux-x64.tar.gz
  • 上传到虚拟机,解压,配置到/etc/profile 的PATH中
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin
  • 使其生效
source /etc/profile
  • java -version 看版本信息
3.maven3:下载apache-maven-3.5.3-bin.tar.gz

-上传到虚拟机,解压,配置到/etc/profile 的PATH中

MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
  • 使其生效
source /etc/profile
  • mvn -v 看版本信息
4.docker安装
  • 我先执行 yum update,再执行下面的
yum install docker
service docker start
chkconfig docker on

#LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
systemctl  start docker.service
systemctl  enable docker.service
  • 使用Docker 中国加速器
vi  /etc/docker/daemon.json

#添加后:
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "live-restore": true
}
  • 开通docker远程访问功能,打开/usr/lib/systemd/system/docker.service文件,找到ExecStart这行,在中间,修改为:
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

重新启动docker

systemctl daemon-reload    
systemctl restart docker
5.创建SpringBoot项目
  • pom.xml中添加依赖,设置docker maven plugin插件
<!-- 注意了,项目名要全小写,否则等下docker:build时,会保存 -->
<artifactId>eureka</artifactId>

<!-- 定义docker镜像的前缀 -->
<properties>
	<docker.image.prefix>zy</docker.image.prefix>
</properties>

<!-- 添加一个wen依赖,提供web服务 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 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>
  • 创建一个 DockerController,在其中有一个index()方法,访问时返回:Hello Docker!
@RestController
public class DockerController {
    
    @RequestMapping("/")
    public String index() {
        return "Hello Docker!";
    }
}

启动项目,启动成功后浏览器放问:http://localhost:8080/,页面返回:Hello Docker!,说明 Spring Boot 项目配置正常。

  • 在目录src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD erueka-0.0.1.jar app.jar
ENTRYPOINT ["sh","-c","java $PARAMS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]
  • FROM ,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
  • VOLUME ,VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
  • ADD ,拷贝文件并且重命名
  • ENTRYPOINT ,定义一个 $PARAMS 参数,启动docker镜像,执行java -jar eureka.jar时 可以传递进来,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

$PARAMS参数讲解下,以前使用 java -jar xx.jar --server.port=8081,自定义启动参数,现在使用docker run时,通过 $PARAMS 来达到同样效果

这样 Spring Boot 项目添加 Docker 依赖就完成了,把项目的pom.xml 与 src 目录复制到虚拟机上去
在这里插入图片描述
eureka目录执行

mvn clean package 

成功后,会在当前目录多一个 target文件夹,里面有打包后的文件,使用 java -jar eureka.jar 启动,然后访问看能否成功
使用docker maven plugin插件打包成镜像

mvn package docker:build

看到如下信息,说明打包成功
在这里插入图片描述

使用 docker images 查看打包的镜像
使用 docker run -e PARAMS=’-Xms128m -Xmx256m’ -p 8080:8080 example/apiaccept 运行镜像,此时的 PARAMS就会传递启动jar的参数
使用 docker ps 查看运行的镜像
在windows上访问 http://192.168.68.141:8080/,因为虚拟机的ip是192.168.68.141
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐