Home » Posts tagged "docker"

透過 Docker 跑 Command Line 程式時,螢幕大小改變時程式不會變更的問題...

其實是我拿 DockerrTorrent 遇到的問題... (在 gslin/rtorrent-docker 這包裡面)

因為平常都是用 tmux 掛著,有時候是使用桌機接起來,有時候是使用 Mac 接起來,就會遇到 resize 的問題了 :o

GitHub 上其實有討論這個問題:「SIGWINCH attached processes · Issue #5736 · moby/moby」(Docker 改名叫 Moby 了,如果你看到網址不是很確定的話,提醒一下... XD)。

在 resize 的機制上是透過 SIGWINCH 這個 signal 傳進去,所以就一層一層檢查... 然後發現是 su 不會把 SIGWINCH 傳下去,改用 sudo 就解決了,這樣就不用每次切換時還要重跑 rTorrent...

AWS Batch 在東京區可以用了

AWS Batch 支援東京區了:「AWS Batch is Now Available in Tokyo」。

總算是在東京出現了... 在 FAQ 裡面有提到:

AWS Batch uses Amazon ECS to execute containerized jobs and therefore requires the ECS Agent to be installed on compute resources within your AWS Batch Compute Environments. The ECS Agent is pre-installed in Managed Compute Environments.

開起來測一些東西看看...

Amazon ECS 可以跑 cron job 了...

Amazon ECS 上面固定時間跑某些東西,以前得自己用 AWS Lambda 帶 (或是自己架,不過這樣就要自己考慮 High Availability 架構了),現在則是直接支援:「Amazon ECS Now Supports Time and Event-Based Task Scheduling」。

Previously, you could start and stop Amazon ECS tasks manually, but running tasks on a schedule required writing and integrating an external scheduler with the Amazon ECS API.

Now you can schedule tasks through the Amazon ECS console on fixed time intervals (e.g.: number of minutes, hours, or days). Additionally, you can now set Amazon ECS as a CloudWatch Events target, allowing you to launch tasks by using CloudWatch Events.

對於是否要用 Container (Docker) 的檢查表

這篇積的有點久,但很不錯的一篇文章 (以條列出來的東西來看):「Instead of containerization, give me strong config & deployment primitives」。

作者遇到了現在很多團隊「因為潮/因為好像可以解決問題,而想要用 Docker」,在沒有想清楚的情況跳下去用,發現沒解決本來的問題,反而製造了一堆問題。

如果你已經在用 AWS,那麼 Docker 相較於 AWS 大致上只有一個優點,也就是開啟速度很快 (因為是 container 的特性)。Docker 的另外幾個優點在 AWS 上是不存在的,包括了 immutable 以及隔離性。

在 AWS 上使用 Docker 反而有不少麻煩,像是要處理 AutoScaling + Service Discovery 時整合的問題,以及 storage 問題。這些都需要另外花力氣處理。

另外一個常聽到的是「讓開發環境與線上環境一致」的議題常常是假議題,對於有照 The Twelve-Factor App 避免寫出有 bad smell code 的程式,開發環境用 Docker,正式環境用標準的 EC2 其實不會有太大問題。

PS:雖然我覺得 The Twelve-Factor App 裡面有些想法有點走火入魔,但對於大多數情況,裡面寫的其實不錯。

把 rTorrent 跑到 Docker 裡

花了些時間研究如何把 rTorrent 丟進 Docker 裡跑,對應的設定都放在 GitHub 上的「gslin/rtorrent-docker」這邊。

使用的方式是傳入使用者的 uid 與 gid (-e USER_GID-e USER_UID),以及預期的 port (有兩個地方,一個是 -e PORT,另外一個是 -p 開 port forwarding,不然外面沒辦法直接連進來),然後把 TERM 變數丟進確保 console 的操作。剩下來把對應的目錄掛進 container 讓他可以寫入 (-v 的部份):

docker run \
    -e PORT=6991 -e TERM=${TERM} \
    -e USER_GID=`id -g` -e USER_UID=`id -u` \
    -i -p 6991:6991 -t -v "`pwd`:/srv/rtorrent" \
    gslin/rtorrent:latest

自己用這樣應該是夠用了... 把這串命令放到 shell 的 alias 裡面用就好了。

在 Docker 裡面跑 GUI 程式

由於想把一些東西隔離放到 Docker 裡跑,所以找了些資料看看怎麼做。

在「Running GUI apps with Docker」這邊講了怎麼在 Docker 裡面跑 Firefox,不過在我的電腦上有狀況 (跑起來沒問題,但開網頁後 Firefox 就會 crash),也許再找時間看看吧...

不過這邊學到了把 X11 的相關資源丟進去的方式:

docker run -ti --rm \
       -e DISPLAY=$DISPLAY \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       firefox

不過畢竟是把整個 X11 資源都暴露進去了,技術上並不安全,只能跑一些大公司的程式,這些公司至少不能明目張膽的把 screenshot 一直傳回去... (還是其實都有做?@_@)

另外是 Skype,之前在「用 Docker 跑 Skype 講電話」這邊就有提過了。而另外一個是「tomparys/docker-skype-pulseaudio」。但之前發現中文字型都還是有問題,也續要看看他們的 Dockerfile 怎麼寫,然後自己再改一下,把中文的部份包進去...

然後是 Dropbox,在經過「Dropbox Responds to Mac 'Security Risk' Accusations [Updated]」事件以後,還是把 Dropbox 放進 Docker 裡面比較好... 這邊用 Googledocker dropbox 東西就不少,主要還是看 Dockerfile 來自己改。

Archives