在Docker环境中开发Java 8 Spring Boot应用程序

本文我将向你展示如何在本地计算机上不安装Java 8环境的情况下使用Java 8来开发并运行一个简单的Spring Web应用程序。

Python开发人员可以借助虚拟环境为不同项目创建和管理独立的环境,每个项目都可以使用不同版本的Python来执行、存储和解决Python的依赖关系。然而Java和很多其他技术都不支持虚拟环境的概念。此时,Docker可以帮助我们解决这个问题。

Docker是一个虚拟化平台。本文我不打算深入介绍Docker的技术细节。如果你对此感兴趣,可以从Docker的官方网站上了解它的基本信息和获取安装指南。

一旦你安装了Docker工具箱,你就不需要安装此示例应用程序所需的Java 8或MySQL环境了。

进入正题,你可以从GitHub 网站上下载我的代码

第一步,我们先看一下Docker-compose文件的内容:

version : '2'
services:

  springappserver:
    build:
      context: . 
      dockerfile: springapp.dockerfile
    ports: 
      - "8080:8080"
    networks:
      - net-spring-db
    volumes:
      - .:/vol/development
    depends_on:
      - mysqldbserver

  mysqldbserver:
    build:
      context: . 
      dockerfile: mysqldb.dockerfile
    ports:
      - "3306:3306"
    networks:
      - net-spring-db
    environment:
      MYSQL_DATABASE: testdb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
      MYSQL_ROOT_PASSWORD: myrootpassword
    container_name: mysqldbserver
    
networks:
  net-spring-db:
    driver: bridge

我们有两台服务器,每台服务器都连接到了“net-spring-db”网络上。第一台服务器被命名为“springappserver”,并使用springapp.dockerfile对其进行了配置,此配置文件将在后面进行介绍。第二台服务器被命名为“mysqldbserver”,并使用mysqldb.dockerfile对其进行配置,此配置文件将在下文中进行讲解。

现在,让我们看看springapp.dockerfile的内容:

#
# Java 1.8 & Maven Dockerfile
#
#
# 拉取基础镜像.
FROM java:8
# 维护者信息
MAINTAINER Dursun KOC "dursunkoc@gmail.com"
# 更新包和安装maven
RUN  \
  export DEBIAN_FRONTEND=noninteractive && \
  sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
  apt-get update && \
  apt-get -y upgrade && \
  apt-get install -y vim wget curl maven
# 添加卷
VOLUME /vol/development
# 创建工作目录
RUN mkdir -p /vol/development
WORKDIR /vol/development
# 使用exec执行maven命令
CMD ["mvn", "clean", "package", "exec:java"]

此Docker文件配置了一个从Docker Hub的Java 8镜像继承过来的Docker镜像。在那个Java 8映像上,我安装了vim,wget,curl,Maven,并为我现有的项目代码设置了容量。最后,通过执行Maven命令来运行我的应用程序。

现在我们来看看mysqldb.dockerfile的内容:

FROM mysql/mysql-server
MAINTAINER Dursun KOC <dursunkoc@gmail.com>
# 复制数据库初始化脚本:
# /docker-entrypoint-initdb.d 中的内容将在 mysqld 启动时被执行
ADD  mysql/ /docker-entrypoint-initdb.d/

此Dockerfile配置了一个从Docker Hub的MySQL/mysql-server镜像继承下来的Docker镜像 。在MySQL映像上,我将db-schema创建脚本放在MySQL文件夹中。我将用来创建“人”表的单个SQL文件data.sql放在此文件夹中。

现在,我们来看看此应用程序的结构。

我们的应用程序从src/com/turkcell/softlab/Application.java文件启动,此应用中唯一的控制器是PersonController(src/com/turkcell/softlab/controller/PersonController.java)。

你可以用一个简单的命令来运行整个项目:

docker-compose up -d

可以在本地计算机上使用以下两个命令对其进行测试:

  • 创建新的人
    curl -H "Content-Type: application/json" -X POST -d "{\"first\": \"Mustafa\",\"last\": \"KOÇ\",\"dateofbirth\": 381110400000,\"placeofbirth\": \"Erzincan\"}" "http://192.168.99.100:8080/people"
  • 列出已经存储在数据库中的人的信息:
curl -H "Content-Type: application/json" -X GET "http://192.168.99.100:8080/people"

现在轮到你了!你可以使用这个模板来深入研究Java 8和Spring Boot。

相关的参考资料:Docker入门

本文的版权归 明明如月 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴柯的运维笔记

【基础】使用VMware Workstation搭建服务器模拟环境

VMware12 下载地址链接:链接:https://pan.baidu.com/s/1NCdOQf8f40JhG5HzVjilew 密码:ukaf

1022
来自专栏finleyMa

docker学习系列7 容器化Node项目

本节我们自己打包一个docker镜像并发布到官方的镜像仓库中。这样任何人只需执行以下命令: docker run -d -p 3000:3000 finley...

521
来自专栏友弟技术工作室

文件同步rsync

rsync 远程同步 rsync(remote sync) 备份 完全备份 增量备份(差异备份) rsync 优点: 支持增量备份 选择性保持:符号链接,...

4199
来自专栏散尽浮华

Linux下FTP虚拟账号环境部署总结

vsftp的用户有三种类型:匿名用户、系统用户、虚拟用户。 1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。 2)本地用户登录:...

2638
来自专栏Brian

VirtualBox和Vmware安装增强功能

---- 概述 由于本人计算机配置的问题,不得不安装虚拟机系统。无论是VMware还是VirtualBox都需要在操作系统安装一些虚拟机的增强功能.虚拟机是傻瓜...

2747
来自专栏Laoqi's Linux运维专列

FTP服务搭建和配置

3567
来自专栏枕边书

LINUX下的PHP

由于linux系统的稳定性,大部分的PHP服务器都被部署在linux上,而且像redis等扩展在linux能得到更好的支持,所以对于PHP程序员来说,使用lin...

1838
来自专栏魏艾斯博客www.vpsss.net

腾讯云服务器创建 SSH 密钥及如何使用 提高 SSH 连接安全性

腾讯云服务器内置创建 SSH 密钥功能,创建并使用之后就是有密钥才能使用 SSH 连接服务器,相对于几位数的登陆密码来说,2048 位密钥显然更安全。

912
来自专栏康怀帅的专栏

Docker 数据管理

我们已经熟悉了 -v 或者 --volume,官方最近建议( Docker 17.06+ ) 使用 --mount。 官方文档:https://docs.doc...

3135
来自专栏从零学习云计算

openshift/origin学习记录(9)——S2I镜像定制(基于Git)

参考《开源容器云Openshift》一书,制作一个Tomcat的S2I镜像(从Git下载代码,Maven打包,部署到Tomcat上。) 从Svn下载代码的...

2910

扫码关注云+社区