使用Dockerfile製做本身的Docker鏡像

1、背景

  一直以來的開發流程都是先從Docker Hub中獲取到基礎鏡像,以後在這個鏡像的基礎上作開發,以知足必定的需求或者提供某種服務,並由此產生新的鏡像,而後就能夠push到Docker Hub中。linux

  那麼究竟如何在製做本身的的鏡像的?web

  本次,我會介紹Dockerfile的基本知識語法,帶你們構建一個本身的鏡像。docker

2、Dockerfile簡介

2.1 先看一個簡單例子

Dockerfile的註釋都是以「#」開始的,每一行都是一個指令,通常狀況下,Dockerfile由4個部分組成:基礎鏡像信息,維護者信息,鏡像操做指令和容器啓動指令。例如:shell

# Version 0.1apache

# 基礎鏡像ubuntu

FROM ubuntu:latest瀏覽器

# 維護者信息ui

MAINTAINER zhangyonglispa

# 鏡像操做命令翻譯

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

# 容器啓動命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

注意:若是是使用Dockerfile來構建鏡像,Dockerfile第一條有效指令(註釋除外),必須是基礎鏡像指令,維護者信息緊隨其後。下面具體介紹下其指令。

2.2 Dockerfile指令

2.2.1 FROM指令

指定即將製做的鏡像,繼承哪位鏡像。

格式:FROM <image> 或 FROM <image>:<tag>

 

2.2.2 MAINTAINER指令

指定維護者信息

格式:MAINTAINER <name>

2.2.3 RUN指令

執行shell命令的,當解析Dockerfile時,遇到RUN指令,將自動翻譯爲/bin/sh -c 「xxxx」

格式:RUN <command>

2.3.4 CMD指令

指啓動容器時執行的命令,每一個Dockerfile只能有一條CMD指令,若是指定了多條CMD,只有最後一條會被執行。

格式:1. CMD command param1 param2

      2. CMD [「executable」,」param1」,」param2」]

      3. CMD [「param1」,」param2」]

(特別說明,若是用戶啓動容器時制訂了運行的命令,則會覆蓋掉CMD指定的指令)

2.3.5 ENV指令

指定一個環境變量,會被後續的RUN指令使用,並在容器運行時保持。

ENV <key> <value>

2.3.6 ADD指令

複製指定<src>到容器中的<dest>中,能夠是Dockerfile所在目錄的一個相對路徑,也能夠是一個URL,還能夠是一個tar文件(自動解壓爲目錄)

ADD <src> <dest>

2.3.7 COPY指令

複製本地主機<src>到容器中的<dest>中,當使用本地目錄爲源目錄時,推薦使用

COPY <src> <dest>

3、Docker鏡像製做

3.1 編寫Dockerfile文件

新建一個Dockerfile文件,裏面填寫上以前簡單例子所包含內容

vi Dockerfile

文件內容以下:

# Version 0.1

# 基礎鏡像

FROM ubuntu:latest

# 維護者信息

MAINTAINER zhangyongli

# 鏡像操做命令

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

# 容器啓動命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

3.2 製做鏡像

進入Dockerfile目錄,執行

docker build -t 鏡像名稱:tag標識 .

當執行一步步執行完成後,出現Successfully built 時,則表示建立鏡像成功。

3.3 驗證

輸入命令:

docker run -d -p 80:80 --name webtest myiserver:v1

而後瀏覽器訪問80端口 便可看到apache2 默認頁面。

4、進階

4.1 準備工做

將iServer 811安裝包,放到/opt/docker_images下。

4.2 使用國內源

當前目錄下,

vi sources.list_aliyun

添加如下內容:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

deb http://mirrors.aliyun.com/ubuntu/ trusty universe

deb-src http://mirrors.aliyun.com/ubuntu/ trusty universe

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates universe

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates universe

deb http://mirrors.aliyun.com/ubuntu/ trusty multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu trusty-security main restricted

deb-src http://mirrors.aliyun.com/ubuntu trusty-security main restricted

deb http://mirrors.aliyun.com/ubuntu trusty-security universe

deb-src http://mirrors.aliyun.com/ubuntu trusty-security universe

deb http://mirrors.aliyun.com/ubuntu trusty-security multiverse

deb-src http://mirrors.aliyun.com/ubuntu trusty-security multiverse

# deb cdrom:[Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Release amd64 (20140416.2)]/ trusty main restricted

#deb cdrom:[Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Release amd64 (20140416.2)]/ trusty main restricted

4.3 編寫shell腳本(配置許可)

建議提早先解壓一個tar包,用於確認目錄和名稱,

當前目錄下執行

vi run.sh

添加如下內容:

# 初始化許可驅動

cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support/SuperMap_License/Support/aksusbd-2.4.1-i386

./dunst

./dinst

echo

 

# 運行iServer

cd /opt/supermap_iserver_8.1.1a_linux64_deploy/bin

./catalina.sh run

4.4編寫iServer Dockerfile

當前目錄下執行

vi Dockerfile

添加如下內容:

FROM ubuntu:14.04

MAINTAINER zhangyongli

ENV ISERVER_VERSION 8.1.1

ENV iServer true

 

# 國內的Ubuntu鏡像源

ADD sources.list_aliyun /etc/apt/sources.list

 

# 安裝iServer產品包

ADD supermap_iserver_8.1.1a_linux64_deploy.tar.gz /opt/

 

# 安裝依賴庫

RUN cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support && \

         ./dependencies_check_and_install.sh install -yu && \

         echo

        

RUN apt-get update

RUN cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support/SuperMap_License/Support && \

       tar xvf aksusbd-2.4.1-i386.tar && \

       echo

ADD run.sh /opt/

RUN chmod 777 /opt/run.sh

# Container啓動時當即運行iServer

CMD /opt/run.sh

4.5 最終目錄內容

 

 

4.6 製做鏡像

docker build -t supermap/iserver:c811a

4.7 建立容器

docker run --name iserver1 -p 8090:8090 -d supermap/iserver:c811a

而後使用 IP:8090訪問便可。

 

 (轉發請註明出處:http://www.cnblogs.com/zhangyongli2011/ 如發現有錯,請留言,謝謝)

相關文章
相關標籤/搜索