2015年9月10日 星期四

試玩 Docker 紀錄 - 1

試玩 Docker 紀錄

參考:

Docker實作入門-OpenFoundry

docker on Linux Mint初體驗

在 Ubuntu/Linux Mint 環境記得要用 docker.io 而不是 docker,因為 docker 這個名稱好像已經被一個別的工作列小圖示套件先佔用了。由於一開始這個沒搞清楚,照著教學操作時弄得好亂。原來只要把指令的 docker 換成 docker.io 即可。

測試環境:

edward ~ $ uname -a
Linux edward-Mint15-Cite 3.13.0-33-generic #58-Ubuntu SMP Tue Jul 29 16:45:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

下載

edward ~ $ sudo apt-get update
edward ~ $ sudo apt-get install docker.io
正在讀取套件清單... 完成
正在重建相依關係          
正在讀取狀態資料... 完成
下列的額外套件將被安裝:
  aufs-tools cgroup-lite
建議套件:
  debootstrap lxc rinse
下列【新】套件將會被安裝:
  aufs-tools cgroup-lite docker.io
升級 0 個,新安裝 3 個,移除 0 個,有 44 個未被升級。
需要下載 4,207 kB 的套件檔。
此操作完成之後,會多佔用 25.0 MB 的磁碟空間。
(...中間省略)
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
設定 aufs-tools (1:3.2+20130722-1.1) ...
設定 docker.io (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1) ...
新增 `docker' 群組 (GID 126) ...
完成。
docker.io start/running, process 6286    ###這裡其實就已經啟動docker.io了
設定 cgroup-lite (1.9) ...
cgroup-lite start/running
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
Processing triggers for ureadahead (0.100.0-16) ...

接著要「檢視一下 docker 是否安裝成功」就遇到問題:

edward ~ $ sudo docker info
2015/09/10 22:47:25 Cannot connect to the Docker daemon. Is 'docker -d' running on this host?

但是明明有安裝了:

edward ~ $ docker version
Client version: 1.0.1
Client API version: 1.12
Go version (client): go1.2.1
Git commit (client): 990021a
2015/09/10 22:51:04 Get http:///var/run/docker.sock/v1.12/version: dial unix     /var/run/docker.sock: permission denied

只好執行 docker -d

edward ~ $ sudo docker -d
2015/09/10 22:57:37 docker daemon: 1.0.1 990021a; execdriver: native;     graphdriver:
[c9df1395] +job serveapi(unix:///var/run/docker.sock)
[c9df1395] +job initserver()
[c9df1395.initserver()] Creating server
2015/09/10 22:57:37 Listening for HTTP on unix (/var/run/docker.sock)
[c9df1395] +job init_networkdriver()
[c9df1395] -job init_networkdriver() = OK (0)
2015/09/10 22:57:38 WARNING: Your kernel does not support cgroup swap limit.
Error loading docker apparmor profile: exec: "/sbin/apparmor_parser": stat     /sbin/apparmor_parser: no such file or directory ()
[c9df1395] -job initserver() = ERR (1)
2015/09/10 22:57:38 Error loading docker apparmor profile: exec:     "/sbin/apparmor_parser": stat /sbin/apparmor_parser: no such file or directory     ()
# 到這裡必須按 Ctrl-C 才能離開

安裝 apparmor

因為上面有錯誤訊息說 Error loading docker apparmor profile: exec: "/sbin/apparmor_parser": stat /sbin/apparmor_parser: no such file or directory () ,所以要安裝 apparmor:

edward ~ $ sudo apt-get install apparmor

嘗試啟動 docker 服務,但是不行:

edward ~ $ sudo service docker start
sudo: timestamp too far in the future: Sep 10 23:11:13 2015
[sudo] password for edward:
docker: unrecognized service

不行是應該的,因為要寫 docker.io 才對:

edward ~ $ sudo service docker.io start
docker.io start/running, process 8470

再看 info 就可以了:

edward ~ $ sudo docker.io info
[sudo] password for edward:
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.0-33-generic
WARNING: No swap limit support

登入 Docker Hub

接著上Docker Hub註冊一組帳號密碼,就可以登入 Docker Hub了:

edward ~ $ sudo docker login
[sudo] password for edward:
Username: XXXXXXXXX
Password:
Email: XXXXXXXX@gmail.com
Login Succeeded

啟動一個 CentOS 7 的容器(container)來顯示 uname 系統資訊:

edward ~ $ sudo docker.io run centos:centos7 /bin/uname -a
[sudo] password for edward:
Unable to find image 'centos:centos7' locally   #centos是repo名稱,centos7則是tag名稱
Pulling repository centos    #本機找不到該image時,就會去線上的repository找
0f73ae75014f: Download complete
47d44cb6f252: Download complete
f6f39725d938: Download complete
f9a8cbc8dd13: Download complete
f37e6a610a37: Download complete
Linux 7845411ac2b0 3.13.0-33-generic #58-Ubuntu SMP Tue Jul 29 16:45:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

可以看到執行的結果還是顯示出底層主機的資訊…

求助:顯示說明資訊

edward ~ $ docker.io --help

(比起 man docker.io 會比較詳細), 也可以針對特定指令例如:

edward ~ $ docker.io run --help

以互動模式進入容器的終端機

  • -t 開啟 tty 進入容器
  • -i 透過 STDIN 與容器進行互動

    edward ~ $ sudo docker.io run -t -i centos:centos7 bash bash-4.2# whoami root

退出容器(會結束掉這個運行中的容器。下次再執行將會是重新開一個容器)

用指令 exit 或者 Ctrl-D 來結束正在運行中的容器:

bash-4.2# exit
exit

退出 tty 終端機但保持容器運行

按Ctrl + P,再按Ctrl + Q ,就可以跳離開這個容器的tty。

如果只是退出終端機,容器仍在繼續運行,就必須要學會如何管理容器。

取得 Container ID

edward ~ $ sudo docker.io run -t -i centos:centos7 bash
root@6870de310b50 / $uname -n
6870de310b50              #每一個容器都有一個唯一的 CONTAINER ID
bash-4.2# PS1="\u@\h \w \$"
root@6870de310b50 / $            #這個 6870de310b50 就是 CONTAINER ID

用 docker ps 查看運行中的容器

Docker client 提供了 docker ps 可以查看目前開啟且正在執行的容器:

edward ~ $ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6870de310b50        centos:centos7      bash                12 minutes ago      Up 12 minutes                           cranky_hoover       
edward ~ $

cranky_hoover是容器名稱,而6870de310b50是container ID,兩者都可以用來指稱特定的容器。

回到容器的終端機 tty

對於沒有關閉(stop)的容器,可以利用容器名稱(或Container ID)指定在容器中執行指令:

edward ~ $ sudo docker.io attach cranky_hoover bash
bash-4.2#

雖然看資料也可以用這個指令達成一樣的目的:

edward ~ $ sudo docker.io exec -t -i cranky_hoover bash

但是無法執行,help檔也查不到 exec 這個指令。

接著按 Ctrl-P 然後 Ctrl-Q 退出終端機。回到host本機的指令環境。

停止容器運作

使用 docker stop指令來停止背景運行中的容器。

edward ~ $ sudo docker.io stop 6870de310b50
6870de310b50

查看所有容器

使用 docker ps -a 來查看所有未被刪除的容器:

edward ~ $ sudo docker.io ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
6870de310b50        centos:centos7      bash                25 minutes ago      Exited (-1) 45 seconds ago                         cranky_hoover          
a69f74cf6f23        centos:centos7      bash                34 minutes ago      Exited (0) 33 minutes ago                          high_poincare          
0bc4a3bc4420        centos:centos7      /bin/date           46 minutes ago      Exited (0) 46 minutes ago                          backstabbing_wozniak   
7845411ac2b0        centos:centos7      /bin/uname -a       About an hour ago   Exited (0) About an hour ago                       jolly_ritchie

啟動已被停止的容器

使用 docker start 來重新啟動已經被停止的容器:

edward ~ $ sudo docker.io start 6870de310b50
6870de310b50

刪除不需要的容器

以 docker rm 來刪除不需要的容器

edward ~ $ sudo docker.io rm jolly_ritchie
jolly_ritchie

2015年1月18日 星期日

Linux Mint檔案管理員的nemo script指令稿

簡單說就是可以自己寫一些在Linux檔案管理介面中快速操作的簡單功能。指令稿(script)也常被翻譯為腳本。

什麼是Nemo Script?

在Linux Mint的Cinnamon發行版本中,預設的檔案管理程式是Nemo,提供了與歷史悠久的檔案管理程式Nautilus類似的「從右鍵快顯功能表執行自訂指令稿」功能,稱為Nemo Script。

如何使用Nemo Scirpt?

只要在Nemo視窗中,按下滑鼠右鍵即可看到「命令稿(S)」快速選單。在選單中選取其中一個指令稿,將會以「所有已選取的檔案或目錄」作為輸入資料,來執行該指令稿。

Nemo Script的指令稿選單是如何產生的?

把可執行檔(例如副檔名為.sh的shell script檔)放在 ~/.gnome2/nemo-scripts 中,即可成為快速選單中的項目,執行檔的檔名就會成為選單項目的名稱。也可以建立子資料夾進一步將指令稿加以分類,子資料夾會在快速選單中成為下一層目錄。

如何快速進入存放指令稿的資料夾,並取得線上說明?

在快速選單最下面選擇「開啟指令稿資料夾」即可進入存放這些指令稿的目錄中。若按下「顯示更多細節」還會顯示一些說明文字,但大致都整理在本文中了。

如何把檔案作為操作對象交給 Nemo Script 執行?

從本機端的資料夾執行指令稿時,已選取的檔案名稱將會被傳遞給指令稿。但是當執行的位置是在遠端的資料夾(例如顯示web、FTP或網路芳鄰SMB的內容)時,將不會有任何參數被傳遞給指令稿。

Nemo Script如何取得環境相關資料?

任何時候Nemo都會建立下列環境變數,可供指令稿使用:
  • NEMO_SCRIPT_SELECTED_FILE_PATHS:已選取的檔案路徑(path),以換列(newline)為區隔。僅適用於本地端。
  • NEMO_SCRIPT_SELECTED_URIS:已選取的檔案URI,以換列為間隔。
  • NEMO_SCRIPT_CURRENT_URI:當前位置的URI。
  • NEMO_SCRIPT_WINDOW_GEOMETRY:當前視窗的位置與尺寸。
  • NEMO_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS:在非作用中的分割視窗裡面已被選取的檔案路徑,以換列為間隔。僅適用於本地端。
  • NEMO_SCRIPT_NEXT_PANE_SELECTED_URIS:在非作用中的分割視窗裡面已被選取的檔案URI,以換列為間隔。
  • NEMO_SCRIPT_NEXT_PANE_CURRENT_URI:在非作用中的分割視窗裡面的當前位置的URI。

2014年6月3日 星期二

解決iOS7裝置連接Linux電腦時時重覆詢問「是否信任此電腦」問題

參考How To Mount iPhone Or iPad With iOS 7 In Ubuntu 13.10這篇文章,決定採取 自行下載 libimobiledevice 進行編譯 下載編譯好的程式進行安裝。

2014年1月8日 星期三

ls搭配萬用字元列出子目錄內容

ls 指令預設會列出當前目錄中的檔案或目錄:

$ ls
Applications        Documents           Google Drive     Music               Sites
CTX.DAT             Downloads           Library             Pictures            Test
Desktop             Dropbox             Movies              Public              VirtualBox VMs

$ ls Music/
GarageBand iTunes


但如果加上了萬用字元「*」或「?」,就會自動遞迴,列出符合字元樣式的子目錄內容:

$ ls M*
Movies:
20120205                                           iMovie Events.localized
Linux教學                                          iMovie Projects.localized
com.GoodLuckTechnologyTeam.EasyScreenRecorderLiteE
com.softtote.videoConverterMaster

Music:
GarageBand iTunes

或者

$ ls M????
GarageBand iTunes



若使用 -d 選項則可以強制只在當前目錄中搜尋:

$ ls -d M????
Music


但若使用 -R 選項,則會一路遞迴詳細列完所有符合路徑的子目錄內容:

$ ls -R M????
GarageBand iTunes

Music/GarageBand:

Music/iTunes:
Album Artwork              iTunes Library Extras.itdb iTunes Library.itl         iTunes Music Library.xml
Previous iTunes Libraries  iTunes Library Genius.itdb iTunes Media               sentinel

Music/iTunes/Album Artwork:
Cache           Cloud           Cloud Purchases Download

Music/iTunes/Album Artwork/Cache:

Music/iTunes/Album Artwork/Cloud:

Music/iTunes/Album Artwork/Cloud Purchases:

Music/iTunes/Album Artwork/Download:

2013年4月30日 星期二

在 Linux Mint 安裝 Fuji Xerox 多功能複合事務機

公司換了Fuji Xerox 多功能複合事務機

據說這些型號都是一樣的驅動及操作
彩色機種:ApeosPort-IV   C5575/C4475/C3375
單色機種:ApeosPort-IV   5070/4070/3070


用以下指令安裝(參考 http://goo.gl/WJGxt

sudo apt-get install libcups2 libcups2-dev
wget http://download.fujixerox.co.jp/pub/exe/apeosport/c4300series/fxlinuxprint-src-1.0.1.tar.gz
tar xvfz fxlinuxprint-src-1.0.1.tar.gz
cd fxlinuxprint-src-1.0.1
./configure
make
sudo make install


但是從系統選單的「印表機」進行新增無效,必須到CUPS設定頁中手動增加印表機(參考 http://goo.gl/a7QgU

在瀏覽器網址列輸入
localhost:631

CUPS for Administrators → Adding Printers and Classes → Add Printer → 輸入本機帳號密碼 →
在 Discovered Network Printers 中選取:
彩色機ApeosPort-IV C3375 (b6:d8:1f) (FUJI XEROX ApeosPort-IV C3375 ) 或者
單色機ApeosPort-IV 3070 (c5:93:34) (FUJI XEROX ApeosPort-IV 3070 )
→ 輸入別名/位置並決定是否分享印表機 → 在 Provide a PPD File 的欄位指定 PPD 檔路徑為: /usr/share/cups/model/FujiXerox/en/fxlinuxprint.ppd

這樣應該就完成了。

2012年10月30日 星期二

從 Linux Mint 遠端連線登入 Windows XP

需求:

從 Linux Mint 連線登入區網中的一台 Windows XP Pro 電腦。簡單筆記備忘。

先在 XP 端作準備:


1. 登入XP,在 [我的電腦] 上按右鍵 -> [電腦名稱],抄下「完整電腦名稱」及「網域」。(為防萬一無法用電腦名稱登入,也可 [開始] -> [所有程式] -> [附屬應用程式] -> [命令提示字元],然後在終端機中輸入ipconfig並抄下本機的IP Address)

2. 在 [我的電腦] 上按右鍵 -> [遠端] -> 勾選「允許使用者遠端連線到這部電腦」

Remmina 安裝設定:


1. 先安裝遠端桌面用戶端軟體。在軟體管理員搜尋 Remmina 並安裝

2. 從 [Menu] -> [Internet] -> [Remmina遠端桌面客戶端] 開啟程式

3. 從 [連線] -> [新增] 先新增一個遠端桌面設定檔,在「名稱」欄位填入好記的名稱。「協定」下拉選擇RDP。

4. 接著主要就是把前面抄下的「完整電腦名稱」填入「伺服器」欄位,再把「網域」填入「Domain」欄位,然後把用來登入XP的帳密也輸入。

5. 解析度可以視需要自行設置,若用全螢幕檢視其實畫面可以不小。色彩深度也可以設定高一點,透過內網傳輸其實效能很夠。

6. 在「Share Folder」中選定一個資料夾,在XP 我的電腦中會掛載成為一台連線磁碟機,便可以共用檔案。不過這個共享資料夾名稱最好用英文,否則會顯示不正常,但裡面的檔案名稱則可以正常顯示中文。

再來就可以連線使用啦~

2012年4月10日 星期二

Google Chrome 在 Linux Mint 12 裡面安裝不起來?

下載了 Google Chrome 瀏覽器的安裝檔之後,用 GDebi 套件安裝程式開啟,卻跳出錯誤訊息無法完成安裝。查了一下解決方法,一樣紀錄存查。

簡單說就是 Google Chrome 的 .deb 安裝檔,缺了兩個相依套件,而且好像 Linux Mint 基於安全因素不允許隨便自行安裝deb封裝檔,必須要放在一些特定目錄裏面才接受。

先把我下載的 google-chrome-stable_current_amd64.deb 安裝檔移到 /opt 裏面,開一個 google-chrome-stable 目錄來放。如此一來擁有者變成了 root。

接著在該目錄中執行
sudo dpkg -i google-chrome-stable_current_amd64.deb







結果顯示一些錯誤訊息:

選取了原先未被選取的套件 google-chrome-stable。
(正在讀取資料庫 ... 171024 files and directories currently installed.)
正在解開 google-chrome-stable (從 google-chrome-stable_current_amd64.deb)...
dpkg:因相依問題,不能設定 google-chrome-stable:
 google-chrome-stable 相依於 libnss3-1d (>= 3.12.3)﹔然而:
  未曾安裝套件 `libnss3-1d'。
 google-chrome-stable 相依於 libcurl3﹔然而:
  未曾安裝套件 `libcurl3'。
dpkg:在處理 google-chrome-stable (--install) 時發生錯誤:
 相依問題 - 保留為未設定
正在進行 desktop-file-utils 的觸發程式 ...
正在進行 bamfdaemon 的觸發程式 ...
Rebuilding /usr/share/applications/bamf.index...
正在進行 gnome-menus 的觸發程式 ...
正在進行 man-db 的觸發程式 ...
在處理時有錯誤發生:
 google-chrome-stable

反正就是安裝不完全,因此來修復一下:

sudo apt-get install -f


正在讀取套件清單... 完成
正在重建相依關係         
正在讀取狀態資料... 完成
正在修正相依關係... 完成
下列的額外套件將被安裝:
  libcurl3 libnss3-1d
下列【新】套件將會被安裝:
  libcurl3 libnss3-1d

跑完就搞定了,可以在應用程式清單的「網際網路」裏面找到Google Chrome囉。

PS. 其實上面那兩個失落的相依套件,在安裝 Chromium 時是有包含進去的。所以其實只要先安裝過 Chromium 再安裝 Google Chrome 就完全不會有問題。