Docker學(xué)習(xí)之基于Dockerfile搭建JAVA Tomcat運(yùn)行環(huán)境的方法
前言
在第一篇文字中,我們完全人工方式,一個(gè)命令一個(gè)命令輸入,實(shí)現(xiàn)一個(gè)java tomcat運(yùn)行環(huán)境,雖然也初見(jiàn)成效,但很累人。如果依靠依靠腳本構(gòu)建一個(gè)Tomcat容器實(shí)例,一個(gè)命令可以搞定,何樂(lè)而不為呢。好在Docker提供了Dockerfile作為構(gòu)建Docker鏡像腳本,避免人們一行一行的輸入,真是善莫大焉。Dockerfile腳本可以做到隨時(shí)維護(hù)修改,即可以分享,更有利于在模板化,更不用說(shuō)傳輸了,好處那是一大籮筐!
最終目的:打造一個(gè)支持SSH終端登錄、Tomcat7自動(dòng)運(yùn)行的Docker鏡像。
編寫(xiě)一個(gè)Dockerfile
所有環(huán)境,同第一篇文字。在ubuntu下安裝好vim之后(吐槽一下,ubuntu系統(tǒng)內(nèi)置vi命令十分難用,只好求助于vim ):
sudo vim Dockerfile
編輯一個(gè)Dockerfile文件了,下面就是具體文件內(nèi)容:
# VERSION 0.0.1 # 默認(rèn)ubuntu server長(zhǎng)期支持版本,當(dāng)前是12.04 FROM ubuntu # 簽名啦 MAINTAINER yongboy "yongboy@gmail.com" # 更新源,安裝ssh server RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir -p /var/run/sshd # 設(shè)置root ssh遠(yuǎn)程登錄密碼為123456 RUN echo "root:123456" | chpasswd # 添加orache java7源,一次性安裝vim,wget,curl,java7,tomcat7等必備軟件 RUN apt-get install python-software-properties RUN add-apt-repository ppa:webupd8team/java RUN apt-get update RUN apt-get install -y vim wget curl oracle-java7-installer tomcat7 # 設(shè)置JAVA_HOME環(huán)境變量 RUN update-alternatives --display java RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/environment RUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/default/tomcat7 # 容器需要開(kāi)放SSH 22端口 EXPOSE 22 # 容器需要開(kāi)放Tomcat 8080端口 EXPOSE 8080 # 設(shè)置Tomcat7初始化運(yùn)行,SSH終端服務(wù)器作為后臺(tái)運(yùn)行 ENTRYPOINT service tomcat7 start && /usr/sbin/sshd -D
需要注意:
- ENTRYPOINT,表示鏡像在初始化時(shí)需要執(zhí)行的命令,不可被重寫(xiě)覆蓋,需謹(jǐn)記
- CMD,表示鏡像運(yùn)行默認(rèn)參數(shù),可被重寫(xiě)覆蓋
- ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一個(gè)生效 多個(gè)存在,只有最后一個(gè)生效,其它無(wú)效!
- 需要初始化運(yùn)行多個(gè)命令,彼此之間可以使用 && 隔開(kāi),但最后一個(gè)須要為無(wú)限運(yùn)行的命令,需切記!
ENTRYPOINT/CMD,一般兩者可以配合使用,比如:
ENTRYPOINT ["/usr/sbin/sshd"] CMD ["-D"]
在Docker daemon模式下,無(wú)論你是使用ENTRYPOINT,還是CMD,最后的命令,一定要是當(dāng)前進(jìn)程需要一直運(yùn)行的,才能夠防容器退出。
以下無(wú)效方式:
ENTRYPOINT service tomcat7 start #運(yùn)行幾秒鐘之后,容器就會(huì)退出 CMD service tomcat7 start #運(yùn)行幾秒鐘之后,容器就會(huì)退出
這樣有效:
ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out # 或者 CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
這樣也有效:
ENTRYPOINT ["/usr/sbin/sshd"] CMD ["-D"]
構(gòu)建鏡像
腳本寫(xiě)好了,需要轉(zhuǎn)換成鏡像:
docker build -t yongboy/java7 .
-t: 為構(gòu)建的鏡像制定一個(gè)標(biāo)簽,便于記憶/索引等
. : 指定Dockerfile文件在當(dāng)前目錄下
網(wǎng)速不太好,會(huì)等待很長(zhǎng)時(shí)間。很多操作可能需要科學(xué)上網(wǎng),逼得我只能一直掛著VPN,方能暢通無(wú)阻。
構(gòu)建鏡像完成之后,看看運(yùn)行效果:
docker run -d -p 22 -p 8080:8080 yongboy/java7
在運(yùn)行命令中,還得需要顯式指定 -p 22 -p 8080:8080,否則在Docker 0.8.1版本中不會(huì)主動(dòng)映射到宿主機(jī)上。據(jù)悉在Docker 0.4.8版本時(shí),就不擔(dān)心這個(gè)問(wèn)題。 或者,您要有好的方式,不妨告知于我,謝謝。
在Dockerfile中,若沒(méi)有使用ENTRYPOINT/CMD指令,若運(yùn)行多個(gè)命令,可以這樣做:
docker run -d -p 22 -p 8080 yongboy/java7 /bin/sh -c "service tomcat7 start && /usr/sbin/sshd -D"
提交/保存鏡像
創(chuàng)建好的鏡像,可以保存到索引倉(cāng)庫(kù)中,便于下次使用(當(dāng)然,我們直接共享Dockerfile,是最簡(jiǎn)單的事情,:)) ),但畢竟鏡像可以做到開(kāi)箱即用。
1、https://index.docker.io/ 注冊(cè)一個(gè)賬號(hào),例如yongboy
2、構(gòu)建鏡像
docker build -t yongboy/java7 .
上面已經(jīng)構(gòu)建OK的話(huà),可省略此步。
3、登陸
docker login
4、提交到Docker索引倉(cāng)庫(kù)
docker push yongboy/java7
現(xiàn)在可以起來(lái)喝杯熱水,出去溜達(dá)會(huì),也不一定能夠上傳完畢,那叫一個(gè)慢??!
上傳OK的話(huà),可以得到類(lèi)似地址:https://index.docker.io/u/yongboy/java7/
5、如何使用鏡像
docker pull yongboy/java7
剩下的步驟,就很簡(jiǎn)單了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker部署訪問(wèn)postgres數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
本文主要介紹了docker部署訪問(wèn)postgres數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Docker一鍵部署springcloud項(xiàng)目的方法
本文主要介紹了Docker一鍵部署springcloud項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Docker使用Calico網(wǎng)絡(luò)模式配置及問(wèn)題處理方法
這篇文章主要介紹了Docker使用Calico網(wǎng)絡(luò)模式配置及問(wèn)題處理,設(shè)計(jì)思想是Calico不使用隧道或者NAT來(lái)實(shí)現(xiàn)轉(zhuǎn)發(fā),而是巧妙的把所有二三層流量轉(zhuǎn)換成三層流量,并通過(guò)host上路由配置完成跨host轉(zhuǎn)發(fā),需要的朋友可以參考下2022-11-11Docker安裝Nginx并修改Nginx配置文件的方法詳解
這篇文章主要給大家介紹了關(guān)于Docker安裝Nginx并修改Nginx配置文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02Docker Elasticsearch集群部署的操作過(guò)程
這篇文章主要介紹了Docker Elasticsearch集群部署的操作過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03關(guān)于Docker網(wǎng)絡(luò)配置及部署SpringCloud項(xiàng)目詳解
這篇文章主要介紹了關(guān)于Docker網(wǎng)絡(luò)配置及部署SpringCloud項(xiàng)目詳解,Docker在創(chuàng)建容器時(shí)有四種網(wǎng)絡(luò)模式,bridge為默認(rèn)不需要去指定,其他三種模式需要在創(chuàng)建容器時(shí)使用–net去指定,需要的朋友可以參考下2023-07-07