有沒有過項目之間各類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 開發環境將會快速構建完畢,秒級的體驗,不容錯過~~~