Build dockerfile

    版本為 00:44, 27 Dec 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    Dockerfile 語法

    FROM

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

    FROM debian:jessie
    

    MAINTAINER

    記錄作者的資訊

    MAINTAINER Alang <alanghsu@gmail.com>
    

    RUN

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

    RUN export DEBIAN_FRONTEND=noninteractive && \
        apt-get update -y -q && \
        apt-get install -y -q --no-install-recommends\
        fail2ban \
        iptables \
        exim4 \
        bsd-mailx \
        whois \
    && rm -rf /var/lib/apt/lists/*
    

    ADD

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

    EXPOSE

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

    COPY

    增加整個資料夾的內容

    COPY filter.d/ /etc/fail2ban/filter.d/
    COPY action.d/ /etc/fail2ban/action.d/
    COPY jail.local /etc/fail2ban/

    CMD

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


    NOTE:

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

     

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

    ENTRYPOINT

    與 CMD 類似用途,但都是用在最後一行。

    ENTRYPOINT ["/root/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;可以改用

    docker exec -it <container-id> /bin/bash

    檢查 container 開啟狀態

    #> docker ps
    CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS                      NAMES
    8e7cae94770e        alang/centos5-lamp_php51:latest   "/bin/bash"         About an hour ago   Up About an hour    80/tcp, 3306/tcp   sharp_perlman 
    
    Powered by MindTouch Core