實戰 Docker File
Docker 的 Pokemon 農場
寫在前面
- 此教學不提供 Github、dockerfile
- 僅供學習交流使用,任何個人和組織均不得將其用于商業用途
- 此教學不代表本公司立場
不自殺聲明
本人在此特地聲明:
本人樂觀開朗,身體健康,
無任何使我困擾之慢性病或心理疾病,故絕不可能做出任何看似自殺之行為。
本人從無睡眠困擾,故不需服用安眠藥。
本人不酗酒亦不吸毒,也絕不會接近下列地點──
1. 開放性水域
2. 無救生員之游泳池
3. 有高壓、危險氣體,或密閉式未經抽氣處理之地下室、蓄水池、水桶等
4. 無安全護欄之任何高處
5. 任何施工地點(拆政府除外),包括製作消波塊之工地
6. 任何以上未提及但為一般人正常不會前往之地點
本人恪遵下列事項──
1. 車輛上路前會檢查煞車部件、油門線等,並會在加油前關閉車輛電源與行動電話。
2. 絕不擅搶黃燈、闖紅燈。
3. 乘坐任何軌道類交通工具一定退到警戒線後一步以上,直到車輛停妥。
4. 騎乘機車必戴安全帽;乘車必繫安全帶。
5. 絕不接近任何會放射對人體有立即危害的輻射之場所(如核電廠)或設備。
6. 颱風天不登山、不觀浪。
本人將盡可能注意電器、瓦斯、火源之使用。
本人居住之房屋均使用符合法規之電路電線,絕無電線走火之可能;
也絕未在家中放置過量可燃性氣體或液體。
浴室中除該有之照明外,不放置任何電器用品,
並在睡覺前關閉除電燈、冰箱、電扇外之所有電器開關。
本人絕不會與隨機的不明人士起衝突,並盡可能保護自我人身安全。
傅耀德
Fuyaode
- 創科資訊 全端工程師
- React Native Taiwin 社群創辦人之一
- Hello JS 講師
- 熟悉 Node DevOps 開發流程
- 不會 Python....
GitHub
今天我要來聊聊
很夯的 pokemon
Pokemon go?
關 Docker 屁事!
我們都知道Pokemon GO
有很多負面新聞
- 搶劫
- 車禍
- 溺斃
- 塞車
- 沒前途
今天我們有完美的解決方案
Docker x Pokemon
優點與解決問題
- 不流汗
- 隨手環保
- 解決交通問題
- 提升工具人技能點
有錢途
所以大家有聽過
PokemonGo-Bot嗎?
使用 Pokemon Go api 的開源項目已經多到滿出來拉!!!
為了學習 Docker....
只好撩落去了....
PokemonGo-Bot剛好有 Docker 版
大家都知道我不會 Python...
這是安裝教學
這是免安裝
直接使用Docker教學
直接複製貼上我就能開始
當專業工具人拉!!!
$ docker run
-it
-v $(pwd)/configs/config.json:/usr/src/app/configs/config.json
pokemongo-bot
那~麼厲害?!
呵呵 這就是 Docker
而且 Docker 還有一個好處
我一次能幫十幾二十個妹紙掛
多執行緒你懂嗎?
那我們來看看怎麼寫
Dockerfile
官方 Dockerfile
FROM python:2.7
WORKDIR /usr/src/app
VOLUME ["/usr/src/app/configs", "/usr/src/app/web"]
ARG timezone=Etc/UTC
RUN echo $timezone > /etc/timezone \
&& ln -sfn /usr/share/zoneinfo/$timezone /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata
RUN cd /tmp && wget "http://pgoapi.com/pgoencrypt.tar.gz" \
&& tar zxvf pgoencrypt.tar.gz \
&& cd pgoencrypt/src \
&& make \
&& cp libencrypt.so /usr/src/app/encrypt.so \
&& cd /tmp \
&& rm -rf /tmp/pgoencrypt*
ENV LD_LIBRARY_PATH /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
ENTRYPOINT ["python", "pokecli.py"]
FROM
FROM python:2.7
WORKDIR
WORKDIR /usr/src/app
VOLUME
VOLUME
["/usr/app/configs",
"/usr/src/app/web"]
ARG
ARG timezone=Etc/UTC
RUN
RUN echo $timezone > /etc/timezone \
&& ln -sfn /usr/share/zoneinfo/$timezone /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata
RUN cd /tmp && wget "http://pgoapi.com/pgoencrypt.tar.gz" \
&& tar zxvf pgoencrypt.tar.gz \
&& cd pgoencrypt/src \
&& make \
&& cp libencrypt.so /usr/src/app/encrypt.so \
&& cd /tmp \
&& rm -rf /tmp/pgoencrypt*
ENV
ENV LD_LIBRARY_PATH /usr/src/app
COPY
COPY . /usr/src/app
ENTRYPOINT
ENTRYPOINT
["python", "pokecli.py"]
再複習一遍官方 Dockerfile
FROM python:2.7
WORKDIR /usr/src/app
VOLUME ["/usr/src/app/configs", "/usr/src/app/web"]
ARG timezone=Etc/UTC
RUN echo $timezone > /etc/timezone \
&& ln -sfn /usr/share/zoneinfo/$timezone /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata
RUN cd /tmp && wget "http://pgoapi.com/pgoencrypt.tar.gz" \
&& tar zxvf pgoencrypt.tar.gz \
&& cd pgoencrypt/src \
&& make \
&& cp libencrypt.so /usr/src/app/encrypt.so \
&& cd /tmp \
&& rm -rf /tmp/pgoencrypt*
ENV LD_LIBRARY_PATH /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
ENTRYPOINT ["python", "pokecli.py"]
寫好 Dockerfile 後
來 build image 吧!
$docker build
--build-arg timezone=Europe/London
-t pokemongo-bot ./
然後就可以
快快樂樂地執行了
$ docker run
-it
-v $(pwd)/configs/config.json:/usr/src/app/configs/config.json
pokemongo-bot
那這串 docker run 在幹麻?
-it 可以讓你在 docker 裡面下 cmd 和看 log
-v 路徑:docker內的路徑 掛載檔案進 docker
最後面有個 pokemongo-bot 代表 image 名稱
那我要在背景執行怎麼辦?
-d 背景執行
--name=名稱
命名這次 run 的名稱方便等等看 log
背景執行怎麼看 log?
$docker logs name -f
好還要更好!!
工具人那麼多
你要怎麼有競爭力?
這世界是講求效率的!
每次改 config 再 run
煩不煩啊?
大家還記得 ENV 嗎?
可以傳入變數變成environment
那是不是可以把config 傳進去替換掉 config?
像是這樣
$ docker run
--name=40018217
-d
-e CONFIG="/test.json"
-e LOGIN="ptc"
-e BASE="./configs/path.json"
-e USERNAME=""
-e PASS=""
-e LOCATION=""
-v $(pwd)/configs:/usr/src/app/configs
pokemongo-bot
加上一行 code
CMD cat $BASE | jq ".auth_service=\"$LOGIN\" > $CONFIG \
&& cat $CONFIG \
&& ./run.sh $CONFIG
CMD
docker run 會馬上執行的部分
剛剛那行就能幫你替換 config 的變數
Dockerfile 指令整理
- FROM - Base 某個 docker image
- WORKDIR - 為後續的 指令指定工作目錄
- VOLUME - 建立可以從本地端或其他容器掛載的掛載點
- ARG - Build image 時能傳入的參數
- RUN - build image 會執行的 script
- ENV - 啟動容器時的環境變數
- COPY - 複製本地端的檔案、資料夾到容器中的
- ENTRYPOINT - 指定容器啟動後執行的命令
- CMD - 啟動容器時執行的命令
- EXPOSE - 設定 Docker 伺服器容器對外的埠號,供外界使用