SpringCloud实战:docker部署项目
Docker 技术发展为微服务落地提供了更加便利的环境,docker配合kubernetes,可以编排容器,通俗来说,就是通过kubernetes,可以监控微服务的响应情况,请求多服务响应慢时自动拉起docker服务,来缓解服务压力,且不需要人工干预本篇的目的是记录系统上线时,把项目打包为容器服务器需要用到的环境与软件centos7.3java jdk8_191maven3.5.3d...
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
- docker version 查看版本信息
- 测试远程访问是否生效:curl http://127.0.0.1:2375/info
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
更多推荐
所有评论(0)