`

构建安全的restful服务docker

    博客分类:
  • J2SE
阅读更多

说明:本例子基于上一篇构建restful服务的文章:http://danlley.iteye.com/blog/2369553

 

话开两端,我们先说说如何构建基于springboot的普通基于http请求的rest服务,然后在分说如何将其改造为https的rest服务

 

一、构建基于springboot的普通基于http请求的rest服务

 

 

1、获取JDK镜像

root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker pull daocloud.io/ld00000/jdk-8:latest
latest: Pulling from ld00000/jdk-8
16da43b30d89: Pull complete
1840843dafed: Pull complete
91246eb75b7d: Pull complete
7faa681b41d7: Pull complete
97b84c64d426: Pull complete
6b1254b9c53d: Pull complete
1e8c843c6844: Pull complete
0ae07ce5d963: Pull complete
4b5ddb6dd051: Pull complete
53e7f455a630: Pull complete
ee6c0b346008: Pull complete
bd4fb9674907: Pull complete
86afde7cb9ea: Pull complete
Digest: sha256:393b7c84efc10a6891902f91ca0c39b9619b27903f3c35eedd00960516dfda44
Status: Downloaded newer image for daocloud.io/ld00000/jdk-8:latest

 

2、制作dockerfile

FROM daocloud.io/ld00000/jdk-8:latest

ADD rest-common-persist-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

 

3、制作springboot镜像

root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker build .
Sending build context to Docker daemon  13.5 MB
Step 1 : FROM docker pull daocloud.io/ld00000/jdk-8:latest
Error parsing reference: "docker pull daocloud.io/ld00000/jdk-8:latest" is not a valid repository/tag
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# vi Dockerfile
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# vi Dockerfile
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# vi Dockerfile
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker build .
Sending build context to Docker daemon  13.5 MB
Step 1 : FROM daocloud.io/ld00000/jdk-8:latest
 ---> 6244248eff4b
Step 2 : ADD rest-common-persist-1.0.0.jar app.jar
 ---> b5f856f83f53
Removing intermediate container bc112d6003fa
Step 3 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
 ---> Running in 270f272cebe9
 ---> 0844d9dce81c
Removing intermediate container 270f272cebe9
Successfully built 0844d9dce81c

 

 

4、为新docker镜像重新命名:docker tag 0844d9dce81c springbootv1

 

 

5、运行springboot应用:  docker run -p 8080:8080 -t springbootv1 看到下面的结果,则说明启动成功

root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker run -p 8080:8080 -t springbootv1

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.5.RELEASE)

………………………………………………

2017-04-18 15:56:32.541  INFO 1 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-04-18 15:56:32.551  INFO 1 --- [           main] c.m.restful.service.impl.Application     : Started Application in 7.379 seconds (JVM running for 8.294)

 

 

6、通过postman请求访问地址: http://192.168.56.102:8080/greet

推送数据:
{
	"keyModel": {
        "id": "test",
        "content": "danlley----"
    },
    "key":"my",
    "value":"alipay"
}

执行结果:
{
  "keyModel": {
    "id": "test",
    "content": "danlley----"
  },
  "key": "my",
  "value": "alipay"
}

服务端日志:
2017-04-18 15:57:50.947  WARN 1 --- [nio-8080-exec-1] c.m.r.service.impl.RestfulController     : -------------------->model=com.myteay.restful.service.impl.ApplicationModel@6f562f4
2017-04-18 15:58:06.054  WARN 1 --- [nio-8080-exec-2] c.m.r.service.impl.RestfulController     : -------------------->model=com.myteay.restful.service.impl.ApplicationModel@6490f020

 

至此,我们第一个话题完结。

 

 

二、将其改造为https的rest服务

 

1、停止当前docker

root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2d6abf784855        springbootv1        "java -Djava.security"   5 minutes ago       Up 5 minutes        0.0.0.0:8080->8080/tcp   zen_pasteur
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker stop 2d6abf784855

 

2、准备生产证书:keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

 

 

 

3、开始构建https的restful服务,增加配置文件:src/main/resources/application.properties 并重新编译打包

#server.port=8081
#server.session-timeout=1000000
#server.context-path=/index
#
#server.tomcat.uri-encoding=UTF-8
#server.tomcat.compression=on
#-storetype \u9009\u9879\u6307\u5B9A\u5BC6\u94A5\u4ED3\u5E93\u7C7B\u578B
#keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=111111
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias:tomcat

 

 

 

4、将生成的证书放入打包的路径当前路径Dockerfile内容如下:

FROM daocloud.io/ld00000/jdk-8:latest
ADD keystore.p12 /keystore.p12
ADD rest-common-persist-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 

 

5、利用步骤二中的配置重新做镜像,并为镜像重命名

root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker build .
Sending build context to Docker daemon  13.5 MB
Step 1 : FROM daocloud.io/ld00000/jdk-8:latest
 ---> 6244248eff4b
Step 2 : ADD rest-common-persist-1.0.0.jar app.jar
 ---> 988090c11d43
Removing intermediate container 52b8d80471ee
Step 3 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
 ---> Running in 482560955d3b
 ---> ac71565ee29d
Removing intermediate container 482560955d3b
Successfully built ac71565ee29d
root@danlley-VirtualBox:/home/danlley/dockerfiles/springbootdocker# docker tag ac71565ee29d springbootv3

 

 

6、运行springboot应用:  docker run -p 8080:8080 -t springbootv3

 

 

7、通过postman请求访问地址: https://192.168.56.102:8080/greet

推送数据:
{
	"keyModel": {
        "id": "test",
        "content": "danlley----"
    },
    "key":"my",
    "value":"alipay"
}

执行结果:
{
  "keyModel": {
    "id": "test",
    "content": "danlley----"
  },
  "key": "my",
  "value": "alipay"
}

服务端日志:
2017-04-18 16:17:06.989  WARN 1 --- [nio-8080-exec-4] c.m.r.service.impl.RestfulController     : -------------------->model=com.myteay.restful.service.impl.ApplicationModel@a897c24

 

是不是很简单呢 O(∩_∩)O哈哈~

分享到:
评论

相关推荐

    gradle-restful-quickstart:Gradle Spring-Boot Restful Service Docker快速入门

    gradle-restful-quickstart Gradle Spring-Boot Restful Service Docker快速入门初始git项目git init git remote add origin 创建gradle环境( ) gradle init --type Java应用程序查看项目文件添加忽略文件+ ....

    Docker进阶培训.ppt

    Image和container的磁盘存储结构 DockerFile构建Image Docker的网络 Docker RESTful API Fig:Docker部署工具 延伸:Docker生态圈

    简单的用maven搭建restful服务

    在IT行业中,构建RESTful服务是一项常见的任务,它允许应用程序通过HTTP协议提供资源,并通过统一的接口进行交互。本教程将详细介绍如何使用Maven,一个流行的Java构建工具,来搭建RESTful服务。以下是对每个部分的...

    springboot + dockerclient +redis +esclient

    在上述场景中,应用通过RESTful API驱动Docker容器,可能用于运行数据处理或计算服务,这些服务可以在容器化环境中轻松地部署和扩展。 3. **Redis** Redis是一个高性能的键值数据库,常被用作缓存和消息代理。在...

    flask-formula:Flask Restful API模板-用于基于docker的Flask Restful API开发的开发环境

    可供Python开发人员用来快速开始在Flask上构建Restful API。堆栈包括Rabbitmq Redis 弹性搜索Logstash PostgreSQLNginx的监督的基巴纳apidoc 包括额外的python库和验证器类。笔记在安装此项目之前,请确保已安装...

    dockerserver:超级轻巧,简单的RESTFul分布式服务器,用于在远程计算机上运行Docker容器

    运行超级轻巧和简单的RESTful无状态服务器以安全的方式远程计算机(S)的容器。 安装 npm i -g docker-server 或者 docker run -d -p 1717:1717 --restart=always --name=docker-server -v /var/run/docker.sock:/...

    Rest Restful 基于rocket服务搭建代码

    Rest Restful 基于rocket服务搭建代码 代码包含的实践用例: 1. restful post, get, put, ...更多细节请移步我的blog:Rust Rocket: 构建Restful服务实战,https://caozy.blog.csdn.net/article/details/133386837

    Centos7 docker-compose安装ELK+Filebeat.zip

    8. **安全性**:在生产环境中,别忘了考虑安全措施,比如设置防火墙规则、启用SSL加密通信、限制对外暴露的服务等。 通过这个教程,你将能够在CentOS 7上搭建一个功能齐全的ELK+Filebeat日志管理平台,利用docker-...

    flask-rest:基于Flask Python框架的RESTful服务

    基于Flask Python框架的RESTful服务 Docker容器 此设置需要Docker在您的PC上运行。 我已经使用Windows和Powershell运行命令。 您可以在相应的链接中找到适用于和的下载。 从Flask服务创建图像并运行并将其作为Web...

    DockerSwarm的一个可视化工具使用DockerRemoteAPINodeJS和D3实现

    Node.js是一个轻量级、高性能的JavaScript运行环境,适合构建网络应用和服务。在这里,Node.js作为后端服务器,负责处理HTTP请求,通过Docker Remote API与Swarm集群交互,并将获取的数据结构化。 D3.js(Data-...

    spring-boot-docker-rest-api:使用Spring Boot和MySQL构建RESTFul API Services,并使用Docker进行容器化

    Spring启动docker-rest-api 使用Spring Boot,MySQL和Swagger文档以及使用Docker的容器化构建RESTFul API Services 执行步骤: 克隆/下载存储库。 在IDE(Netbeans / Intellij Idea / Eclipse)中打开项目,并为应用...

    基于图灵api聊天机器人 后台使用springboot提供restful服务.zip

    【描述】:这个项目是一个基于Java的毕业设计,利用SpringBoot框架构建后台服务,通过RESTful API与前端交互,实现了与图灵API的对接,创建了一个能够进行自然语言对话的聊天机器人。SpringBoot以其简洁、快速的特性...

    基于微软Azure、.NET Core和Docker的博客系统.zip

    API服务没有做任何认证和授权,Web站点通过内部子网访问RESTful API服务,Docker容器运行在非托管环境中持续集成系统:Jenkins,基于Azure构建的Windows Server 2012 R2一台(Master),和一台Ubuntu 16.04.1 LTS...

    毕业设计--基于java的docker图形化界面管理WEB应用.zip

    1. **Java Web开发**:项目使用Java语言进行后台处理,可能采用了Spring Boot框架,提供了MVC架构,便于构建RESTful服务。 2. **Docker API**:项目需要与Docker守护进程通信,这通常通过Docker Remote API来实现,...

    docker-oo-源码.rar

    8. **安全性和隔离**:Docker-oo 源码会展示如何利用 Docker 的安全特性,如资源限制、命名空间隔离、cgroups 等,来保护容器和主机的安全。 9. **API 接口**:Docker-oo 可能提供 RESTful API,允许用户和系统通过...

    RESTful Web服务

    综上所述,这个项目展示了如何利用Spring Boot、PostgreSQL、Hibernate、JUnit和Docker等技术构建一个完整的RESTful Web服务,涵盖从数据存储到测试、部署的全过程。通过这样的架构,我们可以构建出高效、可扩展且...

    Golang打造RESTful API:构建高效网络服务的新纪元

    它以简洁、高效、安全著称,并且非常适合构建大规模的分布式系统和微服务。Go语言的一些主要特点包括: 1. **简洁性**:Go语言的语法非常简单,易于学习。 2. **编译速度**:Go语言的编译速度非常快,这使得开发...

Global site tag (gtag.js) - Google Analytics