一直以來的開發流程都是先從Docker Hub中獲取到基礎鏡像,以後在這個鏡像的基礎上作開發,以知足必定的需求或者提供某種服務,並由此產生新的鏡像,而後就能夠push到Docker Hub中。linux
那麼究竟如何在製做本身的的鏡像的?web
本次,我會介紹Dockerfile的基本知識語法,帶你們構建一個本身的鏡像。docker
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第一條有效指令(註釋除外),必須是基礎鏡像指令,維護者信息緊隨其後。下面具體介紹下其指令。
指定即將製做的鏡像,繼承哪位鏡像。
格式:FROM <image> 或 FROM <image>:<tag> |
指定維護者信息
格式:MAINTAINER <name> |
執行shell命令的,當解析Dockerfile時,遇到RUN指令,將自動翻譯爲/bin/sh -c 「xxxx」
格式:RUN <command> |
指啓動容器時執行的命令,每一個Dockerfile只能有一條CMD指令,若是指定了多條CMD,只有最後一條會被執行。
格式:1. CMD command param1 param2 2. CMD [「executable」,」param1」,」param2」] 3. CMD [「param1」,」param2」] |
(特別說明,若是用戶啓動容器時制訂了運行的命令,則會覆蓋掉CMD指定的指令)
指定一個環境變量,會被後續的RUN指令使用,並在容器運行時保持。
ENV <key> <value> |
複製指定<src>到容器中的<dest>中,能夠是Dockerfile所在目錄的一個相對路徑,也能夠是一個URL,還能夠是一個tar文件(自動解壓爲目錄)
ADD <src> <dest> |
複製本地主機<src>到容器中的<dest>中,當使用本地目錄爲源目錄時,推薦使用
COPY <src> <dest> |
新建一個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"] |
進入Dockerfile目錄,執行
docker build -t 鏡像名稱:tag標識 . |
當執行一步步執行完成後,出現Successfully built 時,則表示建立鏡像成功。
輸入命令:
docker run -d -p 80:80 --name webtest myiserver:v1 |
而後瀏覽器訪問80端口 便可看到apache2 默認頁面。
將iServer 811安裝包,放到/opt/docker_images下。
當前目錄下,
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 |
建議提早先解壓一個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 |
當前目錄下執行
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 |
docker build -t supermap/iserver:c811a |
docker run --name iserver1 -p 8090:8090 -d supermap/iserver:c811a |
而後使用 IP:8090訪問便可。
(轉發請註明出處:http://www.cnblogs.com/zhangyongli2011/ 如發現有錯,請留言,謝謝)