Leon

圖片來自 planet_fox

(本文譯自〈Docker for PHP Developers〉)

Nginx Docker容器(Container)

我們在實例化(instantiate)Nginx Docker 容器之前,需要先傳好虛擬主機的組態檔,在你的專案目錄下建立下面檔案 src/vhost.conf:

server {
listen 80;
index index.html;
server_name docker.dev;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
}

這是個基本(rudimentary)的 Nginx 虛擬主機,它會監聽 HTTP 80 埠的連入要求;它會回應對於主機名稱 docker.dev 的所有的 HTTP 要求;它把錯誤與存取紀錄輸出到指定的路徑檔案(並且這些檔案也符號連接(symlink)到容器的標準輸出與表準錯誤描述子(descriptor));它定義了網站根目錄在 /var/www/public。我們在實例化時會把這份虛擬主機組態檔案拷貝到我們的 Docker 容器內。

在你的專案根目錄內執行下面的 Bash 指令,實例化並且跑一個基於我們訂製的 tutorial/nginx Docker 映像的新的 Nginx Docker 容器。

docker run \
-d \
-p 8080:80 \
-v $(pwd)/src/vhost.conf:/etc/nginx/sites-enabled/vhost.conf \
-v $(pwd)/src:/var/www \
tutorial/nginx;
圖片來自 Derks24

(本文譯自〈Docker for PHP Developers〉)

應用(Application)設定

至今我們的應用所需的 Docker 映像(image)都有了,該開始把 Docker 映像實例化(instantiate)出 Docker 容器(container)了。首先在專案跟目錄下建立如下的目錄結構。

src/
public/
index.html

src/ 目錄放我們的應用源碼、src/public/ 作為我們的網頁伺服器的網站根目錄、index.html 檔案內容打「Hello World!」。

我們的應用將會透過 docker.dev 的域名(domain)存取,你應當把這個域名對映(map)到你的 Docker 母機(host)的 IP 位址,假設你是用裝在 Linux 內的原生的 Docker 的話,那麼就是你自己電腦的 IP 位址;如果你是用 Boot2Docker 的話,可以執行 Bash 指令 boot2docker ip 來找出你的 Docker 母機的 IP 位址。在此先假設你的 Docker 母機 IP 位址為 192.168.59.103,要把 docker.dev 域名對映到 192.168.59.103 這組 IP 位址的話,在你的本地電腦內的 /etc/hosts 檔案最後加入下面這一行:

192.168.59.103    docker.dev

(待續…)

圖片來自 Docker

(本文譯自〈Docker for PHP Developers〉)

哈囉!Docker

Docker 是一個包含許多技術的概括性詞彙,它提供的工具可以幫助你把某個應用(application)的基礎架構(infrastructure)分離成數個邏輯模塊(容器),你可以只組合某些必要的模塊去把應用的基礎架構建構成可移植(portable)的,這樣的基礎架構可以於開發(development)、上線(staging)、生產(production)環境中遷移。

什麼是 Docker 容器(Container)?

一個容器指的是一個大型應用內的某個單一的服務。舉例來說,假設我們正在建構一個 PHP 應用,那麼我們需要一個網頁伺服器(如 nginx);我們也需要一個應用伺服器(如 PHP-FPM);我們還需要一個資料庫伺服器(如 MySQL)。也就是說我們的應用需要三個這樣的獨立的服務:網頁伺服器、應用伺服器、資料庫伺服器,這三樣服務都可以被分離成各自專屬的 Docker 容器,只要我們把這三個容器連結起來,我們就有了一個完整的應用。

什麼是 Docker 映像(Image)?

把某個應用分成數個容器看來像是吃力不討好的工作,至少我以往是這麼認為的,不過實際上並不然,首先,容器實際上是映像的實例(instance),若把 Docker 的映像想像成 PHP 的類別(class),就像 PHP 類別可以讓我們實例化(instantiate)出許多獨立的物件(object)一樣,Docker 的映像也可以實例化出許多獨立的 Docker 容器。例如我們可以拿一個 PHP-FPM Docker 映像去為我們的每個應用實例化出它們的獨立的 PHP-FPM 容器。

我們也可以自製 Docker 映像,不過還是從 Docker Hub 去找適合的 Docker 映像會比較簡單些,像是我們會抓 sameersbn/mysql 這個 Docker 映像來建立 MySQL 資料庫容器。如果別人已經建好了能幫我們解決問題的 Docker 映像,為什麼還要重新發明輪子呢

(待續…)

圖片來自 yoshitaka2

Break

break 用來中斷整個迴圈:

for (int i = 0, i < 10, i++) {
if (i = 2) {
break; // i = 2 就中斷整個迴圈
} else {
System.out.println(i);
}
}

輸出:

0
1

Continue

continue 用來略過某次迴圈:

for (int i = 0, i < 5, i++) {
if (i = 2) {
continue; // 跳過 i = 2 的迴圈
} else {
System.out.println(i);
}
}

輸出:

0
1
3
4

Label

如果是巢狀迴圈的話勒?

Java 的迴圈是可以命名的,稱為 label,可以指定要 breakcontinue 的是哪一層的迴圈:

labelA: while (i > 0) {
labelB: while (j > 0) {
if (j = 2) {
break labelA; // 會中斷整個 labelA
}
}
}

帥吧!

圖片來自 timwesterhoff

今日在朋友分享給我的 buzz 中有一則〈如何將 NB 的無線網路變成可分享 Wi-Fi 的 AP 模式 (Ad-Hoc)〉,不過,其實這世界上還有更平易近人的做法,並且不限於透過單一界面,每一台 Mac 上的基本配備 — WiFi、乙太網路 、藍牙(還有 FireWire),只要其中一種界面可以上網,都可以任意分享到其它任一界面。

  1. 首先進入系統偏好設定。
  2. 進入共享。
  3. 選擇 Internet 共享,來源即現在已經有網路的界面,下方則是欲分享的界面,例子就是最典型的從乙太網路分享到 WiFi。
  4. 如果要設密碼的話則再選 AirPort 選項,在這裡可以設定名稱和密碼。
  5. 最後,對 Internet 共享打個勾就好了!

「就這麼簡單?」就這麼簡單,比 OGUMA 水美媒還簡單!

延續上週的計畫,這個週末仍然去了八里,這次的行程和上週略有不同,除了十三行博物館外,還有沿著腳踏車道一路騎向渡船頭,還有中間的一間兔子餐廳,另外渡船頭那邊排渡輪的隊伍,真的讓我完全打消搭船的念頭 =“=。

從淡水河左岸往對面看是很不同於一般的,在出海口附近,雖然名為河,但實際上可說是海,但所見看得到對面高樓的海,又不同於一般的海,真的是滿特別的景色。

以下都是八里左岸公園。