一、背景
一直以來的開發流程都是先從Docker Hub中獲取到基礎鏡像,之后在這個鏡像的基礎上做開發,以滿足一定的需求或者提供某種服務,並由此產生新的鏡像,然后就可以push到Docker Hub中。
那么究竟如何在制作自己的的鏡像的?
本次,我會介紹Dockerfile的基本知識語法,帶大家構建一個自己的鏡像。
二、Dockerfile簡介
2.1 先看一個簡單例子
Dockerfile的注釋都是以“#”開始的,每一行都是一個指令,一般情況下,Dockerfile由4個部分組成:基礎鏡像信息,維護者信息,鏡像操作指令和容器啟動指令。例如:
# Version 0.1 # 基礎鏡像 FROM ubuntu:14.04 # 維護者信息 MAINTAINER zhangyongli # 鏡像操作命令 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> |
三、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.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/ 如發現有錯,請留言,謝謝)