使用dockerfile構建本身的鏡像

CentOS Linux release 7.2.1511java

Docker version 17.03.1-cedocker

首先應該瞭解docker鏡像的分層機制,這個網上文章不少,簡單說就是對鏡像的每次修改都是在原鏡像基礎上加了一層包裝;centos

構建本身的docker鏡像有兩種方式;網絡

一種是在啓動容器後,直接對容器進行操做,而後commit,好處是方便直觀,但會致使不少中間層,且很差追溯,因此不推薦這樣用;測試

另外一種是編輯dockerfile,而後經過docker build生成鏡像,下面詳細說說如何使用dockerfile構建一個帶jdk的centos鏡像;ui

先準備一個文件夾img,把須要的文件放到子文件夾resource中,這裏還拿了一個rpm文件演示如何安裝,以下:spa

img/
├── Dockerfile
└── resource
    ├── jdk1.7.0_65
    ├── nc-1.84-22.el6.x86_64.rpmcode

文件Dockerfile的內容以下:blog

FROM daocloud.io/centos:latest

COPY resource /usr/local

RUN cd /usr/local \
    && rpm -ivh nc-1.84-22.el6.x86_64.rpm \
&& yum install which -y \
&& rm -rf nc-1.84-22.el6.x86_64.rpm \
&& yum clean all

ENV JAVA_HOME=/usr/local/jdk1.7.0_65/jre
ENV CLASSPATH=.:$JAVA_HOME/lib \
    PATH=$JAVA_HOME/bin:$PATH

FROM  必須位於第一行,表示基礎鏡像,這裏爲centos,若不須要任何基礎環境就用scratch;資源

COPY  拷貝宿主機的資源到鏡像,這裏是將resource下全部東西拷貝到鏡像的/usr/local/目錄;

RUN    鏡像中執行命令,這裏安裝了一個rpm包和yum安裝which命令,而後進行了清理;

     這裏把多個命令合併到一個RUN語句是爲了減小層數;

ENV     設置鏡像的環境變量,因爲後面兩個變量依賴JAVA_HOME,因此必須分到兩個ENV語句了;

其餘命令還有:ADD/CMD/ENTRYPOINT/VOLUME/ARG/EXPOSE/WORKDIR/USER/HEALTHCHECK/ONBUILD等;

下面構建鏡像:

# cd img/
# docker build -t my/base .
# docker images
  REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
  my/base              latest              2cdd09a142e5        24 seconds ago      359MB
  daocloud.io/centos   latest              a8493f5f50ff        4 days ago          192MB

.   命令最後傳入的是build的工做目錄,這個工做目錄是很重要的;

    工做目錄裏全部的文件會傳輸到docker服務端,並且dockfile中指定文件時(COPY那行的resource)必須是工做目錄的相對路徑;

        因此,在img目錄外面這樣build也是同樣的:

     docker build -t my/base img/

-t  指定鏡像在倉庫的名字;

-f  指定dockfile,由於咱們這裏用的默認名稱Dockerfile,因此不用指定;

--network=host  build也是啓動了一個鏡像執行的,由於默認的bridge網絡模式有網絡損耗,因此若是build中包含較多外網訪問,建議改成host:

          docker build --network=host -t my/base .

下面啓動測試下這個鏡像:

# docker run --name mb -dti my/base
c86b648c10174271e080f90e8d437a4ee2e25993003bdc68317477514349cb10
# docker attach mb
[root@c86b648c1017 /]# which java
  /usr/local/jdk1.7.0_65/jre/bin/java
[root@c86b648c1017 /]# java -version
    java version "1.7.0_65"
    Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

over

相關文章
相關標籤/搜索