အရှေ့မှာ Dockerfile ကိုသုံးပြီး image ဆောက်ခဲ့တယ် ပြီးတေ့ာ အဲဒီ image ကိုသုံးပြီး container တွေ ဆောက်တာကို မြင်ခဲ့ရပြီးပါပြီ။
အခုပြောမှာကတော့ အဲ့ဒီ Dockerfile ကို ဘယ်လိုရေးမလဲဆိုတာပါ။
Dockerfile ကို Docker directive တွေနဲ့ရေးရတာပါ။
ဒီ FROM ဆိုတဲ့ directive ကို base image ယူသုံးဖို့အတွက် သုံးတာပါ။ ဥပမာ ခင်ဗျားက ubuntu command တွေ သုံးလို့ရမဲ့ container တစ်လုံးလိုချင်တာဆိုရင် FROM ubuntu
ဆိုပြီးသုံးရမှာပါ။
Default အနေနဲ့ဆို docker store မှာရှိတဲ့ ubuntu version တွေထဲကမှ latest version ကို ယူသုံးသွားမှာပါ အဲ့လိုမှမဟုတ်ဘူး latest လိုချင်တာမဟုတ်ဘူး ကိုယ်လိုချင်တာ သက်သက်ဆို အခုလိုရေးလို့ရပါတယ်။ FROM tecadmin/ubuntu-ssh:16.04
ဒါကတော့ နာမည်အတိုင်းပဲ label တပ်တာပါ။ Maintainer address,vendor name,image version,release date
အစရှိသဖြင့်ပေါ့။ ဥပမာ
LABEL maintainer="[email protected]"
LABEL vendor="TecAdmin"
LABEL com.example.version="0.01"
လို့ ရိုက်လိုက်ရုံပါပဲ။ အကြံပြု လိုတာကတော့ တစ် line ထဲကို space ခံ single line ခံပြီး ရေးတာကိုပါ။ Image build တဲ့အချိန်မှာ စာကြောင်းတစ်ကြောင်းကို layer တစ်ခု ဆောက်တာပါ Layer နည်းလေ မြန်လေပါပဲ။
LABEL maintainer="[email protected]" vendor="TecAdmin" \
com.example.version="0.01"
RUN ကိုတော့ လိုအပ်တဲ့ commandတွေ run ဖို့သုံးပါတယ်။ ဥပမာ လိုအပ်တဲ့packageတွေ သွင်းဖို့လိုတဲ့အခါမျိုးပေါ့။
RUN apt-get update
RUN apt-get install -y apache2 automake build-essential curl
ဒီနေရာမှာလဲ အပေါ်ကလို တစ်ကြောင်းထဲဖြစ်အောင် ရေးသင့်ပါတယ်။ Layer နည်းလေကောင်းလေပါ။
RUN apt-get update && apt-get install -y \
automake \
build-essential \
curl
ဒါကိုတော့ ကိုယ့်စက်ထဲမှာရှိတဲ့ files တွေ directories တွေကို ဆောက်မယ့် image ပေါ်copy ကူးချင်ရင် သုံးပါတယ်။
COPY html/* /var/www/html/
COPY *.conf /etc/apache2/sites-available/
ပထမ command ရိုက်လိုက်ရင် host ရဲ့ html directory အောက်က file အကုန်ကို image ရဲ့ /var/www/html/ အောက်ကို copy ကူးသွားမှာပါ။
ဒုတိယ command ကတော့ host ရဲ့ .conf extension file အားလုံးကို image ရဲ့ /etc/apache2/sites-available/ အောက်ကိုပေါ့။
ဒီ directive ကိုတော့ dockerfile ရဲ့အခြားသော directives တွေဖြစ်တဲ့ RUN,CMD,ENTRYPOINT,COPY,ADD
တွေရဲ့ working directory သတ်မှတ်ပေးဖို့သုံးပါတယ်။
WORKDIR /opt
CMD directive ကိုတော့ image မှာပါတဲ့ service,software တွေကို container launch လုပ်တာနဲ့ run ဖို့သုံးပါတယ်။ သူ့ရဲ့ syntax ကတော့
CMD ["executable","param1","param2"]
CMD ["executable","param1","param2"]
အကယ်၍ခင်ဗျားက apache service ကို runချင်တယ်ဆိုပါတော့
CMD ["apachectl", "-D", "FOREGROUND" ]
ဒါက container ရဲ့ port ကိုညွှန်းဆိုမဲ့ directive ပါ။ အပေါ်မှာတွေ့ခဲ့တဲ့ docker run -it -p နဲ့ port ချိတ်တာမှာ ဒီက ညွှန်းဆိုထားတဲ့ port တွေနဲ့ ချိတ်ပေးရပါမယ်။
EXPOSE 80
EXPOSE 443
ENV directive ကိုတော့ environment variable သတ်မှတ်ပေးချင်ရင် သုံးတာပါ။
ENV PATH=$PATH:/usr/local/psgql/bin/ \
PG_MAJOR=9.6.0
နောက်ဆုံး အနေနဲ့တော့ VOLUME directive ပါ။ သူ့ကိုတော့ mount point create ဖို့ သုံးပါတယ်။ သိထားဖို့က သူဟာ externally mounted volumes ပဲဖြစ်ပါတယ်။
VOLUME ["/data"]