使用Dockerfile制作自己的Docker鏡像


一、背景

  一直以來的開發流程都是先從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/ 如發現有錯,請留言,謝謝)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM