2017年11月30日 星期四

[docker] Docker image 怎麼 build 沒 cache 的 images --no-cache


我們會使用 docker build 來 build image
當docker 辨識是同樣 layer 的時候他會使用已經產生的 layer cache。

當 我們Dockerfile 中有 RUN apt-get update 這類型的指令時,很容易就有過時的狀況,
container 沒有辦法獲取過期或是已經消失的 file 或是url 。

這時候我們就要使用 $ docker build -t "mytest" --no-cache .

舉個例子來看 Dockerfile
$ cat Dockerfile
FROM ubuntu:16.04
RUN apt-get update

第一次 build image

$ docker build -t "mytest" .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:16.04
 ---> d355ed3537e9
Step 2/2 : RUN apt-get update
 ---> Running in e9efeedd4b03
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [53.1 kB]
Get:4 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [505 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:6 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Get:7 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.9 kB]
Get:8 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [229 kB]
Get:9 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3479 B]
Get:10 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [231 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [866 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.7 kB]
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [719 kB]
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [18.5 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5174 B]
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7150 B]
Fetched 24.6 MB in 8s (2966 kB/s)
Reading package lists...
 ---> 5821cf494987
Removing intermediate container e9efeedd4b03
Successfully built 5821cf494987
Successfully tagged mytest:latest

第二次 build 的時候已經有cache

$ docker build -t "mytest" .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:16.04
 ---> d355ed3537e9
Step 2/2 : RUN apt-get update
 ---> Using cache
 ---> 5821cf494987
Successfully built 5821cf494987
Successfully tagged mytest:latest

這時候注意到已經沒有在 apt-get update 要是有些檔案已經從sourcelist移除 就發生狀況

怎麼不使用 cache 再 build 一次呢

$ docker build -t "mytest" --no-cache .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:16.04
 ---> d355ed3537e9
Step 2/2 : RUN apt-get update
 ---> Running in 76da71f4b31b
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [53.1 kB]
Get:4 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [505 kB]
Get:5 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:6 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.9 kB]
Get:7 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [229 kB]
Get:8 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [3479 B]
Get:9 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Get:10 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB]
Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
Get:12 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
Get:13 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
Get:14 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [231 kB]
Get:16 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [866 kB]
Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.7 kB]
Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [719 kB]
Get:19 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [18.5 kB]
Get:20 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [5174 B]
Get:21 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [7150 B]
Fetched 24.6 MB in 9s (2597 kB/s)
Reading package lists...
 ---> 7ffb5d5b40ab
Removing intermediate container 76da71f4b31b
Successfully built 7ffb5d5b40ab
Successfully tagged mytest:latest



ref
「Allen 谈 Docker 系列」docker build 的 cache 机制
http://open.daocloud.io/docker-build-de-cache-ji-zhi/

2017年11月19日 星期日

[life] 產出是真的獲得 記即時記錄的反思


最近,有幾場旅行,來去匆匆的都沒有好好把它記錄下來。

以旅遊遊記為例,從以往的旅程來看,覺得要在當天或是在事前先做好記錄,然後,在回程的一兩週內迅速整理,最有效率,內容也比較精采。

技術類的文章,應該也是要及時的整理,不然,要在整理起來隨筆就很耗費時間。

只有在產出的時候,你在清楚的在回顧跟整理。

2017年11月18日 星期六

[mac] bash bash-completion 指令自動補齊


在ubuntu 中在 bash 打指令,
像是 git checkout 按上 tab 他會幫你自動補齊。

如果在mac bash 中呢?
使用 bash-completion

$ brew install bash-completion
==> Downloading https://homebrew.bintray.com/bottles/bash-completion-1.3_1.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring bash-completion-1.3_1.el_capitan.bottle.tar.gz
==> Caveats
Add the following lines to your ~/.bash_profile:
  if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
  fi

Homebrew's own bash completion script has been installed to
  /usr/local/etc/bash_completion.d

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/bash-completion/1.3_1: 188 files, 605.9K

2017年11月2日 星期四

[電影] 雷神索爾3 :諸神黃昏 Thor: Ragnarok


在「蘇科維亞戰役」兩年後,索爾得知諸神黃昏的預言並希望全力阻止火焰巨人蘇爾特爾毀滅阿斯嘉。同時,索爾與洛基來到地球尋找奧丁時碰到奇異博士,在奇異博士的指引下,終於找到身處於挪威的奧丁,奧丁向他們兄弟二人道出他們還有一位姐姐-「死亡女神」海拉。在一場戰鬥裡雷神之鎚被海拉所毀,然後返回阿斯嘉時被推離彩虹橋而來到薩卡星(Sakaar),於此星上成為階下囚被逼在當地統治者宗師所舉辦的競技場展開角鬥士對決,而對手居然是自己的老戰友浩克。索爾請浩克幫助以便及時趕回阿斯嘉,阻止海拉和即將到來的諸神黃昏。
在最後一戰中,索爾被奪一目後陷入苦戰,奧丁及時出現索爾的幻像之中,提醒他是雷神索爾的真正身份,重拾他本來的力量,並且說出「阿斯嘉從來不是一個地方,而是一個民族。」即便如此,合兄弟二人之力仍無法擊敗海拉,他們最後決定讓火焰巨人蘇爾特爾在永恆火焰中重生,引發諸神黃昏以打敗海拉。阿斯嘉被毀後,成為阿斯嘉之王的索爾帶領著阿斯嘉人民前往地球,前方卻迎面而來一艘巨型戰艦……

週四抽空去看雷神索爾三 with L ,有一陣子沒在電影院看電影了。本來在想說這樣的片長,能夠坐滿嗎?
後來才發現這個是marvel 系列電影中,可能是最短的片長了。電影的節奏滿緊湊的,感覺也很跳,幾乎沒有冷場的度過。難怪有人說這是威漫近期的搞笑片了。

用了指定電影兌換券,還有電影券去換票的。不過,在信義威秀平日還是滿滿人潮,本來想再7:20 排隊時間已經過了,就想說看8:00的,但是只有四排的位置。只好再下一場8:20 的電影。有最後一排與中前右旁邊選擇,剛好選到了 H排 17 18 ,距離不錯,不過有點稍微偏旁邊了點。

從上次到美麗華看了場四個人的平日電影 敦克爾克大作戰,這次的體驗還算不錯。

[問題] 信義威秀選位 (5廳) - 看板 Theater - 批踢踢實業坊 https://www.ptt.cc/bbs/Theater/M.1389962595.A.455.html


雷神索爾3:諸神黃昏 - 維基百科,自由的百科全書  片長130 分鐘 
https://zh.wikipedia.org/wiki/%E9%9B%B7%E7%A5%9E%E7%B4%A2%E7%88%BE3%EF%BC%9A%E8%AB%B8%E7%A5%9E%E9%BB%83%E6%98%8F
諸神黃昏挪威語Ragnarök)是北歐神話預言中的一連串巨大劫難,包括造成許多重要死亡的大戰(奧丁索爾弗雷海姆達爾火巨人霜巨人洛基等),無數的自然浩劫,之後整個世界沉沒在水底。然而最終世界復甦了,存活的神與兩名人類重新建立了新世界。這是北歐神話極重要的一部份,也是許多學術研討與理論的主題。
諸神黃昏主要記錄在詩體埃達散文埃達。其原名RagnarökrRagnarökkr意為「諸神的末日」。

諸神的黃昏 - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/%E8%AB%B8%E7%A5%9E%E7%9A%84%E9%BB%83%E6%98%8F
後設笑點連發!《雷神索爾 3:諸神黃昏》中暗藏的 9 個小秘密 - Punchline 娛樂重擊 http://punchline.asia/archives/47122

"已經看過電影的人應該都有注意到,電影中海拉接住雷神之鎚那場景的背景,與預告中看起來完全不一樣,那是因為原來這場戲設定在紐約,但導演覺得不妥就改掉了;不過預告中的版本背景中還是有藏著一個小彩蛋,眼尖的人會發現索爾背後的塗鴉寫著「skux life」,正是導演的前一部電影《神鬼嚎野人》中出現過的詞。"

2017年11月1日 星期三

[linux] xargs 怎麼在多個指令使用相同的參數 xargs with multiple commands as argument

xargs 怎麼在多個指令使用相同的參數 xargs with multiple commands as argument
我們常常使用 xargs , awk 與 grep 來組合複合式的command,但是,要怎麼使用同一個 arguments 再不同的 command中呢 ?
xargs - build and execute command lines from standard input

   -I replace-str
          Replace occurrences of replace-str in the initial-arguments with names read
          from standard input.  Also, unquoted blanks do not terminate  input  items;
          instead the separator is the newline character.  Implies -x and -L 1.
舉一個例子,想要刪除git 不需要的branch 還有刪除遠端的 branch。
先使用grep 與 awk 濾出這些 branch 名稱
$ git branch | grep fix fix/ios_poster_zip fix_langs_admin fix_langs_key fix_poster_counts
使用 xargs -I 來 產生參數 (-I 後面可以使用能使用的字,來當作替代)
$ git branch | grep fix | awk '{print $1}' | xargs -I {} git push origin :{}
刪除本地 branch
$ git branch | grep fix | awk '{print $1}' | xargs -I {} git branch -d {}
如果我們想刪除本地與遠端branch呢?
先看看怎麼在單個 xargs 使用多個command 。
$ git branch | grep fix | awk '{print $1}' | xargs -I {} sh -c 'echo {};echo {}'fix/ios_poster_zipfix/ios_poster_zipfix_langs_adminfix_langs_adminfix_langs_keyfix_langs_keyfix_poster_countsfix_poster_counts
$ git branch | grep fix | awk '{print $1}' | xargs -I {} sh -c 'git push origin :{}; git branch -d {}'
這樣在單一 xargs 中多個指令使用同一個變數
bash - xargs with multiple commands as argument - Stack Overflowhttps://stackoverflow.com/questions/6958689/xargs-with-multiple-commands-as-argument