如何使用dockerfile與supervisor建立一個能自動啟動apache2的container

每次docker container關閉後開啟,總是要進去container內手動重新啟動apache2,為了減少自己的困擾與麻煩,我找到了2種方法。

  • 第一種
    直接同步bash檔-v ~/file/bash.bashrc:/etc/bash.bashrc 在bash檔最下面加上service apache2 restart。 ps(最近發現,只要把更改過的bash.bashrc這個檔案ADD到Dockerfile裡面的/etc/bash.bashrc裡面,build起來的container,就可以直接使用/bin/bash自動啟動apache2啦)

  • 第二種
    也就是我這次要介紹的,利用dockerfile與supervisor來建立一個container

第一步

建立一個放dockerfile的資料夾

mkdir  test

在資料夾內建立一個dockerfile的檔案並編寫dockerfile

cd test
nano Dockerfile

簡單介紹一下dockerfile
Dockerfile 由一行行命令語句組成,並且支援以 # 開頭的註解行。
一般而言,Dockerfile 分為四部分:基底映像檔資訊、維護者資訊、映像檔操作指令和容器啟動時執行指令。

這邊就只示範一下單純安裝apache2的寫法

FROM ubuntu:14.04  #### 基本映像檔,必須是第一個指令

MAINTAINER xxxx  xxxx@gamil.com  ###維護者資訊

RUN apt-get update      
RUN apt-get upgrade -y

RUN apt-get install apache2 supervisor  -y
RUN mkdir -p /var/log/supervisor

RUN a2enmod rewrite

ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf   ###ADD為加入的檔案(一般來說會在同資料夾內)
ADD apache2.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/apache2.sh       ###給.sh檔權限
EXPOSE  80
CMD ["/usr/local/bin/apache2.sh"]       ###CMD為container內的檔案目錄

存檔完後
我們還要寫另外兩個檔

nano apache2.sh

#!/bin/sh
service apache2 restart
exec supervisord -n

###存檔在建立supervisord.conf 
nano supervisord.conf  

[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

第二步

現在,我們的test資料夾裡,有3個檔案
Dockerfile ,apache2.sh , supervisord.conf

接下來我們要把container建立起來

docker  build -t test/auto:v1 .

docker bulid是把Dockerfile建立成image(映像檔)
-t 是指定映像檔的標籤資訊
test/auto:v1是我要叫的image名與log
最後面的”.”指的是當前資料夾,這邊也可以換成/xxx/xxx/test這樣

第三步

利用剛剛建立好的image來建立container

docker -d --name testauto -p 1055:80 test/auto:v1

第四步

開啟自己電腦的瀏覽器
網址那邊輸入127.0.0.1:1055
有成功,就會看到apache2的歡迎頁