Giter VIP home page Giter VIP logo

java-in-docker's Introduction

Docker: Ubuntu, Tomcat, Maven and JAVA Stack

背景

Hi,JAVA!

JAVA 的项目通常都比较繁琐,为了标准化流程与简易化部署,本项目根据官方示例构建一套简易的 JAVA 的开发/运行环境(Ubuntu, Tomcat, Maven and JAVA Stack),最终达到 build,ship,run!

依赖

由于众所周知的原因,梯子不够坚固的童鞋请使用 国内镜像 以及 加速器

快速体验

  1. $ git clone https://github.com/springjk/java-in-docker
  2. $ cd java-in-docker
  3. $ docker-compose up
  4. 访问 http://127.0.0.1

java-in-docker

运维命令:

$ docker-compose help   # docker-compose 命令帮助
$ docker-compose up     # 创建并启动 docker 编排服务
$ docker-compose down   # 停止并移除 docker 编排服务 (更改配置文件时建议使用)
$ docker-compose exec java-maven-tomcat bash # ssh 登入 java 容器

加载项目

上述方式为体验项目使用,运行的为 code 目录下的示例代码,实际使用中我们需要加载自己项目的代码,这里有两种方式:挂载项目目录和导入到项目中,选择一种你喜欢的即可。

挂载项目目录

  1. 修改 docker-compose.yml 中的代码挂载目录为你源代码目录(pom.xml 的父级目录)
  2. $ docker-compose up

导入到项目中

  1. $ cd {your-project-path}
  2. $ git submodule add https://github.com/springjk/java-in-docker
  3. $ cd java-in-docker
  4. $ docker-compose up

数据库信息

  • DB_HOST : mysql
  • DB_PORT : 3306
  • DB_NAME : docker
  • DB_USER_NAME : root
  • DB_USER_PWD : docker

此处的数据库连接地址 DB_HOST 值为 mysql 是因为名为 java-maven-tomcat 的容器 link 了名为 mysql 的容器,故 java-maven-tomcat 容器中会在自己的 /etc/hosts 中添加一条 1xx.xx.xx.xx mysql 的 host,这会将 http://mysql 这个地址指向 mysql 容器的实际内网地址,等效于常见的 http://localhost

数据持久化

容器内的数据会随着容器的销毁而丢失,所以需要配置 docker-compose.yml 文件将以下目录同步到你的物理机目录进行持久化:

  • /root/.m2 Maven 的 jar 包缓存目录,挂载后将无需每次构建时重新下载。
  • /var/lib/mysql MySQL 的文件存放目录,必须挂载,否则销毁容器后数据丢失。
  • /usr/local/tomcat/logs Tomcat 的日志目录,挂载后查看日志无须进入容器内部。

Windows 下挂载目录写法示例:d:/project/,macOS 与 Linux 下如挂载目录后出现无法写入则是权限问题,ssh 登陆容器后对文件夹给与写入权限即可。

项目部署

数据库信息,暴露端口等信息都在 docker-compose.yml 中配置,一切调试完成后可在启动命令后添加 -d 参数,让其后台启动,此时如果想实时查看启动日志可以使用 docker-compose logs -f 进行查看。

# 后台启动运行
$ docker-compose up -d

# 跟踪查看启动日志
$ docker-compose logs -f

版本信息

  • JAVA1.8
  • MySQL5.7
  • Maven3.3.9
  • Tomcat8.5.3

版本信息可在 Dockerfile 中进行修改,修改 Dockerfile 后需要将 docker-compose 中的构建方式改为构建本地镜像:

# 免构建镜像
  #image: registry.cn-hangzhou.aliyuncs.com/springjk/java-maven-tomcat
# 构建本地镜像
  build: ./java-maven-tomcat

修改完成后启动时需要重新构建镜像:

$ docker-compose up --build

目录结构

├── LICENSE
├── README.md
├── code # JAVA 演示代码
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── com
│       │   │       └── bingo
│       │   │           └── helloworld
│       │   │               └── HelloWorld.java
│       │   ├── resources
│       │   └── webapp
│       │       ├── META-INF
│       │       │   └── MANIFEST.MF
│       │       └── WEB-INF
│       │           ├── lib
│       │           └── web.xml
│       └── test
│           ├── java
│           └── resources
├── data # 容器数据挂载目录
│   ├── maven
│   └── mysql
├── docker-compose.yml # docker-compose 配置文件
├── java-maven-tomcat
│   ├── Dockerfile # JAVA-Tomcat-Maven 构建文件
│   └── build.sh
├── log # 容器日志挂载目录
│   └── tomcat
└── mysql
    └── Dockerfile # MySQL 构建文件

工作流程

Dockerfile -->(build)–> Image -->(run)–> Container

  1. 构建 MySQL 镜像
  2. 构建 JAVA-Tomcat-Maven 镜像
  3. 挂载 MySQL 数据目录并启动 MySQL 容器
  4. 挂载 JAVA 代码目录并启动 JAVA-Tomcat-Maven 容器
  5. 执行 Maven 的代码构建脚本 build.sh 生成 WAR 包并放入 Tomcat 工作目录
  6. 启动 Tomcat

更多请参考 Docker Docs

License

MIT

java-in-docker's People

Contributors

dependabot[bot] avatar springjk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

java-in-docker's Issues

不能连接数据库

2017-05-04 05 35 43 pm
mysql的容器起不来,打开IP+port报错:数据库连接错误,是否更改了 docker-compose 默认的数据库配置?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.