如何使用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的歡迎頁