摘要:為了不讓別人痛苦,更不想讓自己痛苦,請容器化開發(fā)環(huán)境吧,讓我們享受一鍵部署開發(fā)環(huán)境的痛快吧。接下的例子依賴的環(huán)境和,請移步自行安裝。
有沒有過項目之間各種Java版本開發(fā)環(huán)境切換的場景;有沒有過github上clone回來的代碼庫,由于各種開發(fā)環(huán)境依賴無法運行的問題;有沒有過進入一個新項目時各種配開發(fā)環(huán)境到深夜的經(jīng)歷...Come On!為什么會這樣,一切都是開發(fā)環(huán)境問題。為了不讓別人痛苦,更不想讓自己痛苦,請容器化開發(fā)環(huán)境吧,讓我們享受一鍵部署開發(fā)環(huán)境的痛快吧。
用什么容器化呢?當然是Docker啦,輕量級又好用,又流行,最關(guān)鍵點是本人僅Docker比較熟悉,所以就拿它來搞起啦。
Quick Start接下的例子依賴的Docker環(huán)境和MAC,請移步 Install Docker Engine 自行安裝。
docker-machine
docker-compose
...
(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/ 目錄下Setup Hello Dockerize
使用Gradle初始化一個 spring-boot DEMO,build.gradle 文件如下:
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" }
實現(xiàn)hello-dockerize的API,創(chuàng)建以下文件:
DockerizeApplication.java
JerseyConfig.java
HelloDockerizeResource.java
為可以讓 DEMO 可以運行容器中,需要一個Dockerfile來配置 DEMO 在容器中能正常運行的環(huán)境:
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是一個不錯的選擇。創(chuàng)建配置文件docker-compose.yml:
web: build: ./dockerize environment: - LANG=C.UTF-8 - TERM=xterm - DEBUG=true ports: - "8080:8080" volumes: - .:/hello-dockerize
啟動容器服務(wù):
在 DEMO 目錄下執(zhí)行:
$ docker-compose run --service-ports web
上述命令執(zhí)行成功后,將會進入容器內(nèi),顯示如:
root@7b438758ccae:/hello-dockerize#
在容器中啟動服務(wù):
root@7b438758ccae:/hello-dockerize# ./gradlew bootRun
為了在容器外可以訪問容器內(nèi)部的服務(wù),可以通過docker-machine ip machine-name獲取 machine 的 IP,修改/etc/hosts將machine IP綁定上dockerhost的域名,再通過瀏覽器訪問http://dockerhost:8080/hello-dockerize,頁面將會出現(xiàn)Hello Dockerize!
DEMO REPO: hello-dockerize,你只需要 clone 到本地,然后執(zhí)行 docker-compose run --service-ports web, DEMO 開發(fā)環(huán)境將會快速構(gòu)建完畢,秒級的體驗,不容錯過~~~
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26737.html
摘要:上一篇容器化開發(fā)環(huán)境已經(jīng)簡單的介紹了如何容器化開發(fā)環(huán)境。學(xué)會斷點調(diào)試容器中的應(yīng)用,再也不用為我那烏黑亮麗的頭發(fā)著急啦原文鏈接 上一篇容器化開發(fā)環(huán)境已經(jīng)簡單的介紹了如何容器化開發(fā)環(huán)境。在開發(fā)過程中,很多時候都需要通過斷點的方式來調(diào)試程序或定位BUG,那么如何斷點調(diào)試運行在容器中的應(yīng)用呢??? 容器就像一個虛擬機,就像一個遠程的服務(wù)器,要斷點調(diào)試容器中的應(yīng)用,就像要斷點調(diào)試虛擬機和遠程的服...
摘要:上一篇容器化開發(fā)環(huán)境數(shù)據(jù)庫連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫連接,接下來將分享一下如何將數(shù)據(jù)庫從應(yīng)用容器中分離出來。 上一篇容器化開發(fā)環(huán)境 - 數(shù)據(jù)庫連接和遷移分享了關(guān)于如何給容器中的應(yīng)用創(chuàng)建數(shù)據(jù)庫連接,接下來將分享一下如何將數(shù)據(jù)庫從應(yīng)用容器中分離出來。 為什么要進行分離?當應(yīng)用和數(shù)據(jù)庫在同一個容器中運行時,也就意味著,應(yīng)用和數(shù)據(jù)庫的生命周期捆綁在了一起,應(yīng)用和數(shù)據(jù)庫的運...
摘要:在容器化開發(fā)環(huán)境中分享了如何容器化本地的開發(fā)環(huán)境。對于一個應(yīng)用,數(shù)據(jù)庫似乎是必不可少的東西。下面會通過例子來介紹一下如何一個容器中的數(shù)據(jù)庫。例子將會使用的技術(shù)棧在目錄下新建文件,用于控制數(shù)據(jù)庫的啟動。 在 容器化開發(fā)環(huán)境 中分享了如何容器化本地的開發(fā)環(huán)境。對于一個Web應(yīng)用,數(shù)據(jù)庫似乎是必不可少的東西。下面會通過例子來介紹一下如何Setup一個容器中的數(shù)據(jù)庫。例子將會使用的技術(shù)棧: ...
摘要:為了證明模板,我們可以使用環(huán)境變量配置讓這個變成一個更通用的代理服務(wù)器。我們將定義環(huán)境變量作為一個站點的代理。當這個容器使用這個環(huán)境變量啟動,將使用它來生成一個的路徑。 一種 Dockerize 應(yīng)用的簡單方式 標簽(空格分隔): Docker dockerize 作者是 jasonwilder。原文地址是 A Simple Way to Dockerize Applica...
閱讀 852·2021-11-18 10:07
閱讀 2364·2021-10-14 09:42
閱讀 5361·2021-09-22 15:45
閱讀 597·2021-09-03 10:29
閱讀 3477·2021-08-31 14:28
閱讀 1885·2019-08-30 15:56
閱讀 3048·2019-08-30 15:54
閱讀 1003·2019-08-29 11:32