1. 程式人生 > >使用Dockerfile快速搭建tomcat部署web應用

使用Dockerfile快速搭建tomcat部署web應用

前言

在本文中,我會寫下我對docker的理解。因為能力所限,可能有些地方描述的不夠欠當。如果你有不同的理解,歡迎交流。

最近這段時間由於需要搭建微服務框架,自己在網上學習dubbo的同時,也閱讀了很多過於docker容器部署,說明的一些文章,感覺受益匪淺,也感觸很多,痛恨自己沒有早些遇見它,如今網際網路行業發展迅速,越來越多的技術提供出來,讓我們大大的提高效率!

docker

  • Docker的思想來自於集裝箱,集裝箱解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在集裝箱裡封裝的好好的,那我就可以用一艘大船把他們都運走。docker就是類似的理念。現在都流行雲計算了,雲端計算就好比大貨輪。docker就是集裝箱。

  • 在實際開發中,你會發現這樣的一個問題,如果一個物理伺服器上只跑一個服務的話,其實很多資源就浪費了,而同時跑很多個服務的話它之間又會互相影響,如果說有一個服務出現了記憶體洩漏把整個記憶體都佔滿了,這時候其他的服務也會跟著遭殃.這個時候docker出現了,它可以實現實現服務之間的隔離,讓它們成為一個獨立體,互不影響,一臺物理伺服器上部署多個docker,他們共享作業系統核心,佔用資源少,啟動速度快。但又能提供了資源(cpu, 記憶體,磁碟等)的一定程度的隔離。

  • 不僅如此,docker給開發者也提供了不少好處,官方提供了大量映象庫方便大家使用,以前需要搭建一個開發環境,可能需要下載tomcat,jdk,maven等等,然後再一個個手動配置,又耗時又耗力,現在你可能只需要一個dockerfile就能完成上述操作.同時還能享受像github一樣的倉庫管理,自己建立好的映象部署到dockerhub上面,需要用的時候pull下來,部署簡單,方便.
    好的,話不多說,進入今天的主題吧!

開始搭建

  • 準備工作
    需要jdk,tomcat,專案war包
    檔案:Dockerfile(名字為Dockerfile,後面配置)
    四個檔案放在統一目錄下
    在這裡插入圖片描述
  • 編寫dockerfile檔案
FROM centos
MAINTAINER [email protected]
COPY ./jdk1.7.0_80 /usr/local/jdk
COPY ./apache-tomcat-7.0.91 /usr/local/tomcat
COPY ./xxx.war /usr/local/tomcat/webapps

ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre  
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib  
ENV PATH $PATH:$JAVA_HOME/bin
ENV CATALINA_OPTS -Xms128m -Xmx1024m -XX:PermSize=64M -XX:MaxPermSize=512M
RUN cd /usr/local/tomcat/logs && echo "1" >>count.txt
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && tail -F /usr/local/tomcat/logs/catalina.out

FROM : 以哪個映象為基礎開始構建.
MAINTAINER :作者資訊
RUN : 執行一條命令.
ENV : 設定環境變數
COPY : 從當前目錄複製檔案到容器. 只是單純地複製檔案.
ENTRYPOINT : docker run IMAGE_ID cmd 這裡的預設命令的前面部分, run 中 cmd 可以作為後續引數.

  • 建立映象
docker build -t 17621238225/healthchat:v2.0 . //最後的.不要落下

-tag, -t: 映象的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中為一個映象設定多個標籤。
.代表當前目錄的Dockerfile
分析:-t 17621238225/healthchat : v2.0 給新構建的映象取名為 17621238225/healthchat, 並設定版本為 v2.0
17621238225 = (docker hub中的使用者名稱 這些用於後期push到倉庫中 )
healthchat = (docker hub中建立的倉庫名稱 這些用於後期push到倉庫中 )

在這裡插入圖片描述

現在映象就建立完畢,我們可以docker images 看看

在這裡插入圖片描述

  • 啟動容器
sudo docker run -p 8090:8080 --name healthchat 17621238225/healthchat:v2.0

-p 8090:8080:將8080埠對映為宿主機的8090埠上,這樣就可以訪問主機的8090埠就到容器的8080埠。
docker run 命令詳解可參考:http://www.runoob.com/docker/docker-run-command.html
最後成功通過http://localhost:8090/xxx 訪問自己的web應用(埠8090)
在這裡插入圖片描述
整個映象建立完畢

  • 上傳至遠端倉庫 docker hub
    1.到官網註冊賬號:https://hub.docker.com/
    需要連線外網才能註冊,不然註冊按鈕是灰色的,無法點選
    2.註冊成功後建立第一個倉庫
    在這裡插入圖片描述

3.在本地Linux登入docker:

[email protected]:~$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: boonyadocker
Password: 
Login Succeeded
[email protected]:~$ 


4.tag修改映象名稱

docker push 註冊使用者名稱/映象名 //這個是推送映象的規範
docker tag test/healthchat 17621238225/healthchat

tag用法:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
具體tag用法參考http://www.runoob.com/docker/docker-tag-command.html

  • 推送映象到Docker Hub
docker push 17621238225/healthchat:v2.0

在這裡插入圖片描述

  • 訪問Docker Hub釋出映象
    在這裡插入圖片描述

  • Docker 使用釋出的映象

docker pull 17621238225/healthchat:v2.0

在本文中,我會寫下我對docker的理解。因為能力所限,可能有些地方描述的不夠欠當。如果你有不同的理解,歡迎交流。