Build dockerfile

    版本為 16:18, 6 Oct 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    Dockerfile 語法

    FROM

    用來指定作為 base 的 image 名稱,這裡的 image 可以是 Local 或 Docker Hub 上的。

    RUN

    這是最常用的指令,用來執行安裝/設定時所需要的各種指令。

    ADD

    增加外部的檔案至 image 內,常用於設定檔或啟動檔。

    EXPOSE

    指定 container 開啟後要開放的通訊埠 port,這裡的 port 是用於不同的 container 之間互連,不可用於與 host 的通訊;要與 host 通訊,必須在開啟 container 時,使用 -p 參數作 port forward。

    CMD

    開啟 container 後,需要執行的預設指令。

    這裡的指令常用於 container 在被開啟後,可以自動啟動各項需要的服務。

    NOTE:

    container 裡的 Linux 不同於一般 VM 或實體機的啟動方式,Linux 內建的 SysV 機制在 container 裡無法被執行,替代方法是必須手動寫另一個啟動檔。

    使用方法

    單一指令時
    ["/bin/bash"]
    
    指令較長時
    ["/bin/bash", "/opt/startup.sh"]
    

    建立 LAMP 基本環境

    重點說明:
    • 這個範例是以 CentOS 5 + PHP 5.1 為例。
    • 建立後的 image,在啟動後,系統所作的任何變更,包括 MySQL 資料,一旦 container 關閉,所有資料都不會被保留。(NOTE: 若要保留資料,必須修改 Dockerfile 的部分內容)

     

    #> mkdir centos5-lamp_php51
    #> cd centos5-lamp_php51/ 
    

    新增兩個檔案 Dockerfile,startup.sh

    Dockerfile:

    ############################################################
    # Dockerfile to build LAMP with PHP 5.1.x container images
    # Based on CentOS 5
    ############################################################
    FROM centos:centos5
    MAINTAINER A-Lang <alang.hsu@gmail.com>
    
    RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
    RUN yum -y update
    
    RUN yum -y install mysql-server
    RUN yum -y install httpd php php-mbstring php-mysql
    RUN yum -y install wv links pdftohtml tidy html2ps
    
    ADD ./startup.sh /opt/startup.sh
    RUN chmod +x /opt/startup.sh
    RUN echo "/opt/startup.sh" >> /etc/bashrc
    
    EXPOSE 80 3306
    CMD ["/bin/bash"]
    

    startup.sh:

    #!/usr/bin/env bash
    #===============================================================================
    #
    # AUTHOR: A-Lang <alang.hsu@gmail.com>
    #
    #===============================================================================
    echo "Starting mysql:"
    service mysqld start
    echo "Starting Apache:"
    service httpd start
    

    開始 build image

    #> docker build -t alang/centos5-lamp_php51 .
    

    build 的程序會按照 Dockerfile 的內容依序完成。

    完成後,檢查 image。

    #> docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    alang/centos5-lamp_php51   latest              967949717d3f        19 minutes ago      717.8 MB
    centos                     centos5             192178b11d36        2 weeks ago         466.9 MB
    ubuntu                     latest              5506de2b643b        4 weeks ago         199.3 MB
    ubuntu                     12.04               0b310e6bf058        4 weeks ago         126.7 MB
    ubuntu                     13.10               195eb90b5349        5 months ago        184.7 MB
    

    開啟這個 image 成為一個 container

    #> docker run -t -i alang/centos-lamp_php51
    

     NOTE:

    contaioner 開啟會直接進入它的 console,想跳離開但又不想結束 container,可以按下 Ctrl P 後再按下 Ctrl Q,就可以跳離至 host。

    在 host 時,想重新進入開啟中的 container,可以執行 docker attach <container-ID>

    另一種以 daemon 方式開啟 container

    #> docker run -d -t alang/centos-lamp_php51
    

    NOTE:

    注意:這樣的啟動方式,無法使用 docker attach 進入該 container console。

    Powered by MindTouch Core