Docker修煉第一招: 先從Dockerfile開始

Docker修煉第一招: 先從Dockerfile開始java

百度AI開發者大賽帶你邊學邊開發,贏100萬獎金,加羣:418589053   linux

0git

收藏(5)github

東坡有詩:日建鏡像三百個,不辭長用Dockerfile。
以爲鏡像構建枯燥乏味?困貨,快來根Dockerfile吧! 
做爲一枚構建鏡像的老司機,下面跟你們展現一篇Dockerfile實戰。web

Docker、Dockerfile、Docker鏡像、容器這些都是什麼鳥?

老生常談,再再再……普及一下:docker

  • Docker:最先是dotCloud公司出品的一套容器管理工具,但後來Docker慢慢火起來了,連公司名字都從dotCloud改爲Docker。apache

  • Dockerfile: 它是Docker鏡像的描述文件,能夠理解成火箭發射的A、B、C、D……的步驟。ubuntu

  • Docker鏡像: 經過Dockerfile作出來的,包含操做系統基礎文件和軟件運行環境,它使用分層的存儲方式。
  • 容器: 是運行起來的鏡像,簡單理解,Docker鏡像至關於程序,容器至關於進程。

講了這麼多,你們可能已經意識到了,想玩轉Docker必須先要搞定Docker鏡像,鏡像又來自於 Dockerfile,所以本文從Dockerfile編寫開始,與您分享Docker鏡像的製做過程,裏面有 經驗,有 技巧,還有 彩蛋~!vim

如何經過Dockerfile快速構建鏡像

接下來,咱們經過構建一個Tomcat鏡像,來演示Dockerfile的使用方法,固然前提是你的電腦安裝了Docker環境,如何安裝Docker環境就不在此贅述了。tomcat

一、建立一個Dockerfile

Dockerfile命名必須爲「Dockerfile」,Docker鏡像構建時,會查找指定目錄中的Dockerfile。

二、編寫Dockerfile

(1)環境配置

FROM ubuntu:14.04

經過FROM指令,Docker編譯程序可以知道經過哪一個基礎鏡像執行來進行編譯。全部的Dockerfile都必須以FROM指令開始。經過該指令,咱們至關於有了一個最基本的Ubuntu系統。

(2)其餘環境配置

MAINTAINER example <example@goodrain.com>

另外咱們須要指定時區,不然咱們作出的鏡像可能會跟當前時間不符。

RUN echo "Asia/Shanghai" > /etc/timezone;dpkg-reconfigure -f noninteractive tzdata

咱們能夠像在電腦上安裝Tomcat同樣,把Tomcat安裝在Docker容器中。

(3)Tomcat必要軟件安裝。

咱們此時使用的Ubuntu系統實際上是很簡陋的系統,上面不少系統都沒有。因此我先安裝一些必要的軟件。

RUN apt-get update && apt-get install -y curl vim net-tools && \
	rm -rf /var/lib/apt/lists/* && mkdir -p /app

RUN 指令用來在Docker的編譯環境中運行指定命令。這裏我安裝了curl、vim、net-tools,其中curl用來獲取java和tomcat的安裝包,vim和net-tools用來調試,並建立了/app目錄。

(4)指定工做目錄

使用 WORKDIR /app 能夠將工做目錄定位到/app 目錄下

(5)獲取安裝軟件

咱們使用 第 (3)步 安裝的 curl 工具來獲取安裝包。

RUN  curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz \
    && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz

以上命令將會從指定地址下載安裝包,並解壓到當前目錄(上一步咱們指定了工做空間爲/app,因此會解壓到此目錄下)

(6)指定運行腳本

截止到上一步,咱們已經將須要的準備工做都作好了,剩下的還有Java環境變量的設置,Tomcat環境變量設置(非必須)和Tomcat的啓動。

COPY tomcat7.sh /app/tomcat7.sh
RUN chmod +x /app/tomcat7.sh

上面的兩行命令會將與Dockerfile同級目錄的tomcat7.sh文件上傳到docker容器中的/app目錄下,而且給該文件賦予可執行的權限。
看一眼該腳本的內容便一目瞭然了。

# Java環境變量配置 export JAVA_HOME=/app/jdk1.7.0_65 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # Tomcat環境變量配置 export TOMCAT_HOME=/app/apache-tomcat-7.0.8 export PATH=$TOMCAT_HOME/bin:$PATH # 啓動 Tomcat exec $TOMCAT_HOME/bin/catalina.sh run

(7)指定端口

EXPOSE 8080

一般狀況下,Tomcat啓動後會監聽8080端口,在容器中也同樣。
EXPOSE指令用於標明,這個鏡像中的應用將會偵聽某個端口,而且但願能將這個端口映射到主機的網絡界面上

(8)指定腳本的運行

至此,咱們要作的準備工做就作完了。使用下面這條命令,運行咱們在第6步建立的腳本,一個簡單的Tomcat的Dockerfile就編寫完成了。

ENTRYPOINT [「/app/tomcat7.sh"]

ENTRYPOINT 用於標明一個鏡像做爲容器運行時,最後要執行的程序或命令。

3.構建鏡像

進入Dockerfile所在目錄,運行命令 docker build -t mytomcat . (注意最後有個點用來表示當前目錄,初次構建速度會比較慢,須要多等一會。)

出現以下信息就構建成功了

4.運行Docker容器

docker run -i -t -p 5000:8080 mytom

其中,docker run 用於運行一個容器

  • -t 在容器指定一個僞終端或者終端;
  • -i 進行命令交互;
  • -p 匹配鏡像內的網絡端口號,即咱們能夠經過宿主機中訪問5000端口來達到訪問容器8080端口的目的。

5.查看構建好的鏡像和運行的容器

docker images #查看鏡像

docker ps -a #查看全部的容器

6.查看服務是否運行

在宿主機中咱們輸入localhost:5000訪問,出現以下界面,表示Tomcat成功運行。

至此,咱們就成功的建立了一個Tomcat鏡像了,固然這裏只是爲了簡單演示,因此鏡像作的比較簡單,官方的Tomcat鏡像比這複雜的多,在熟悉了Dockerfile後能夠去看看官方的作法。

6.其餘

在作鏡像的時候有那麼多步驟,根本不可能一次將全部的步驟完成,因此,這裏教給你們一個 小技巧

在編寫完Dockerfile到第二步的時候,其實能夠先使用一個腳本先運行着,而後進入容器內部進行操做。筆者在編寫Dockerfile時先使用以下命令

COPY run.sh /app/run.sh
RUN chmod +x /app/run.sh
ENTRYPOINT [「/app/run.sh"]

run.sh腳本的內容以下

#!/bin/bash sleep 15 while true do echo "true" sleep 180 done

其實就是一段死循環代碼代替原有的tomcat7.sh,接着就能夠build和run咱們的容器了。容器運行起來後使用docker exec -it container_id bash 進入docker容器。此時就和咱們平時裝軟件的方式同樣了,作完一個步驟,在Dockerfile中記錄一條,這樣Dockerfile也就作出來了。(ps:exit退出容器。)

特別注意的一點,若是作好鏡像之後,在鏡像中有須要保存的數據(持久化目錄)須要咱們在Dockerfile中指定持久化目錄。爲了可以保存(持久化)數據以及共享容器間的數據,Docker提出了Volume的概念。簡單來講,Volume就是目錄或者文件,它能夠繞過默認的聯合文件系統,而以正常的文件或者目錄的形式存在於宿主機上。而且咱們運行容器的時候須要使用使用 -v 來聲明Volume,如:

docker run -it -v /home/dock/logs:/usr/logs tomcat /bin/bash

冒號前爲宿主機目錄,必須爲絕對路徑,冒號後爲鏡像內掛載的路徑,這樣容器內更改的數據就被寫到宿主機上了。
擁有了Tomcat服務器後,就能夠跑寫好的java-web程序了,如何運行java-web程序就不在此詳述了,跟普通運行java-web程序同樣。

一樣的,若是你有一個web應用,將其放入Docker容器中,寫好Dockerfile,構建好應用運行須要的環境後,就能夠很快的使用應用了。

Dockerfile源碼已放到好雨的github公共倉庫了,上面有不少使用Dockerfile構建的項目。能夠方便你們學習。地址:tomcat-demo

相關文章
相關標籤/搜索