有没有过项目之间各类Java
版本开发环境切换的场景;有没有过github
上clone
回来的代码库,因为各类开发环境依赖没法运行的问题;有没有过进入一个新项目时各类配开发环境到深夜的经历...Come On!
为何会这样,一切都是开发环境问题。为了避免让别人痛苦,更不想让本身痛苦,请容器化开发环境吧,让咱们享受一键部署开发环境的痛快吧。java
用什么容器化呢?固然是Docker
啦,轻量级又好用,又流行,最关键点是本人仅Docker
比较熟悉,因此就拿它来搞起啦。linux
接下的例子依赖的Docker
环境和MAC
,请移步 Install Docker Engine 自行安装。git
docker-machinegithub
docker-composeweb
...spring
(dockerize) Unable to get the latest Boot2Docker ISO release version: Error getting a version tag from the Github API response. (dockerize) You may be getting rate limited by Github. // 若是在安装过程遇到上述相似的问题,能够尝试方式解决: 经过浏览器下载 boot2docker 镜像 https://github.com/boot2docker/boot2docker/releases/download/v1.10.3/boot2docker.iso 将镜像移动到 ~/.docker/machine/cache/ 目录下
使用Gradle
初始化一个 spring-boot DEMO,build.gradle 文件以下: docker
group "com.xxx.hello.dockerize" version "1.0.0" buildscript { repositories { jcenter() maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE") } } apply plugin: "idea" apply plugin: "java" apply plugin: "spring-boot" sourceCompatibility = 1.8 repositories { jcenter() maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } } ext { junitVersion = "4.11" } dependencies { compile "org.springframework.boot:spring-boot-starter-jersey" testCompile "junit:junit:$junitVersion" }
实现hello-dockerize
的API,建立如下文件:shell
Application.java
JerseyConfig.java
HelloDockerizeResource.javaubuntu
为可让 DEMO 能够运行容器中,须要一个Dockerfile来配置 DEMO 在容器中能正常运行的环境:浏览器
FROM ubuntu:14.04 RUN apt-get update ENV VERSION 8 ENV UPDATE 66 ENV BUILD 17 ENV JAVA_HOME /usr/lib/jvm/java-${VERSION}-oracle ENV JRE_HOME ${JAVA_HOME}/jre RUN apt-get install ca-certificates curl \ gcc libc6-dev libssl-dev make \ -y --no-install-recommends RUN curl --silent --location --retry 3 --cacert /etc/ssl/certs/GeoTrust_Global_CA.pem \ --header "Cookie: oraclelicense=accept-securebackup-cookie;" \ http://download.oracle.com/otn-pub/java/jdk/"${VERSION}"u"${UPDATE}"-b"${BUILD}"/server-jre-"${VERSION}"u"${UPDATE}"-linux-x64.tar.gz \ | tar xz -C /tmp RUN mkdir -p /usr/lib/jvm && mv /tmp/jdk1.${VERSION}.0_${UPDATE} "${JAVA_HOME}" RUN apt-get install -y openssl RUN apt-get remove --purge --auto-remove -y \ gcc \ libc6-dev \ libssl-dev \ make RUN apt-get autoclean && apt-get --purge -y autoremove RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN update-alternatives --install "/usr/bin/java" "java" "${JRE_HOME}/bin/java" 1 && \ update-alternatives --install "/usr/bin/javac" "javac" "${JAVA_HOME}/bin/javac" 1 && \ update-alternatives --set java "${JRE_HOME}/bin/java" && \ update-alternatives --set javac "${JAVA_HOME}/bin/javac" WORKDIR /hello-dockerize EXPOSE 8080 CMD ["bash"]
为了之后能够更好的管理容器的依赖和更新,Docker Compose是一个不错的选择。建立配置文件docker-compose.yml:
web: build: ./dockerize environment: - LANG=C.UTF-8 - TERM=xterm - DEBUG=true ports: - "8080:8080" volumes: - .:/hello-dockerize
启动容器服务:
在 DEMO 目录下执行:
$ docker-compose run --service-ports web
上述命令执行成功后,将会进入容器内,显示如:
root@7b438758ccae:/hello-dockerize#
在容器中启动服务:
root@7b438758ccae:/hello-dockerize# ./gradlew bootRun
为了在容器外能够访问容器内部的服务,能够经过docker-machine ip machine-name
获取 machine 的 IP
,修改/etc/hosts
将machine IP
绑定上dockerhost
的域名,再经过浏览器访问http://dockerhost:8080/hello-dockerize
,页面将会出现Hello Dockerize!
DEMO REPO: hello-dockerize,你只须要 clone 到本地,而后执行
docker-compose run --service-ports web
, DEMO 开发环境将会快速构建完毕,秒级的体验,不容错过~~~