前言
在第一篇文字中,我們完全人工方式,一個命令一個命令輸入,實現一個java tomcat運行環境,雖然也初見成效,但很累人。如果依靠依靠腳本構建一個Tomcat容器實例,一個命令可以搞定,何樂而不為呢。好在Docker提供了Dockerfile作為構建Docker鏡像腳本,避免人們一行一行的輸入,真是善莫大焉。Dockerfile腳本可以做到隨時維護修改,即可以分享,更有利于在模板化,更不用說傳輸了,好處那是一大籮筐!
最終目的:打造一個支持SSH終端登錄、Tomcat7自動運行的Docker鏡像。
編寫一個Dockerfile
所有環境,同第一篇文字。在ubuntu下安裝好vim之后(吐槽一下,ubuntu系統內置vi命令十分難用,只好求助于vim ):
sudo vim Dockerfile
編輯一個Dockerfile文件了,下面就是具體文件內容:
# VERSION 0.0.1# 默認ubuntu server長期支持版本,當前是12.04FROM ubuntu# 簽名啦MAINTAINER yongboy "yongboy@gmail.com"# 更新源,安裝ssh serverRUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.listRUN apt-get updateRUN apt-get install -y openssh-serverRUN mkdir -p /var/run/sshd# 設置root ssh遠程登錄密碼為123456RUN echo "root:123456" | chpasswd # 添加orache java7源,一次性安裝vim,wget,curl,java7,tomcat7等必備軟件RUN apt-get install python-software-propertiesRUN add-apt-repository ppa:webupd8team/javaRUN apt-get updateRUN apt-get install -y vim wget curl oracle-java7-installer tomcat7# 設置JAVA_HOME環境變量RUN update-alternatives --display javaRUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/environmentRUN echo "JAVA_HOME=/usr/lib/jvm/java-7-oracle">> /etc/default/tomcat7# 容器需要開放SSH 22端口EXPOSE 22# 容器需要開放Tomcat 8080端口EXPOSE 8080# 設置Tomcat7初始化運行,SSH終端服務器作為后臺運行ENTRYPOINT service tomcat7 start && /usr/sbin/sshd -D
需要注意:
ENTRYPOINT/CMD,一般兩者可以配合使用,比如:
ENTRYPOINT ["/usr/sbin/sshd"]CMD ["-D"]
在Docker daemon模式下,無論你是使用ENTRYPOINT,還是CMD,最后的命令,一定要是當前進程需要一直運行的,才能夠防容器退出。
以下無效方式:
ENTRYPOINT service tomcat7 start #運行幾秒鐘之后,容器就會退出 CMD service tomcat7 start #運行幾秒鐘之后,容器就會退出
這樣有效:
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"]
構建鏡像
腳本寫好了,需要轉換成鏡像:
docker build -t yongboy/java7 .
-t: 為構建的鏡像制定一個標簽,便于記憶/索引等
. : 指定Dockerfile文件在當前目錄下
網速不太好,會等待很長時間。很多操作可能需要科學上網,逼得我只能一直掛著VPN,方能暢通無阻。
構建鏡像完成之后,看看運行效果:
docker run -d -p 22 -p 8080:8080 yongboy/java7
在運行命令中,還得需要顯式指定 -p 22 -p 8080:8080,否則在Docker 0.8.1版本中不會主動映射到宿主機上。據悉在Docker 0.4.8版本時,就不擔心這個問題。 或者,您要有好的方式,不妨告知于我,謝謝。
在Dockerfile中,若沒有使用ENTRYPOINT/CMD指令,若運行多個命令,可以這樣做:
提交/保存鏡像
創建好的鏡像,可以保存到索引倉庫中,便于下次使用(當然,我們直接共享Dockerfile,是最簡單的事情,:)) ),但畢竟鏡像可以做到開箱即用。
1、https://index.docker.io/ 注冊一個賬號,例如yongboy
2、構建鏡像
docker build -t yongboy/java7 .
上面已經構建OK的話,可省略此步。
3、登陸
docker login
4、提交到Docker索引倉庫
docker push yongboy/java7
現在可以起來喝杯熱水,出去溜達會,也不一定能夠上傳完畢,那叫一個慢??!
上傳OK的話,可以得到類似地址:https://index.docker.io/u/yongboy/java7/
5、如何使用鏡像
docker pull yongboy/java7
剩下的步驟,就很簡單了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答
圖片精選