雲端容器化技術與資源調度

簡單用 Docker 架設 Nginx

Docker Run!

在 Cloud Shell 中輸入以下指令來啟動一個 nginx:

$ docker run --name my-nginx -p 8080:80 -d nginx:1.17.4

確認容器啟動狀態

$ docker ps

應該會看到類似下面的輸出:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c758c99a7d38        nginx:1.17.4        "nginx -g 'daemon of…"   11 seconds ago      Up 8 seconds        0.0.0.0:8080->80/tcp   my-nginx

啟動 Cloud Shell 網頁預覽

cloud shell preview

此時應該會看到 Welcome to nginx! 預設歡迎頁面。

進入容器內部

如果對容器概念很陌生的話,可以暫時先把我們剛剛啟動的容器想像為一台跑在 cloud shell linux 上面的VM。而這台VM幫我們預裝了一個 nginx。 現在,我們就來試圖看看怎樣進入這個容器裡面,實際操控這個容器。

請注意,容器和VM本質上還是有很大的差異,只是暫時先這樣理解一下,後面會在詳細做出區別。

$ docker exec -it my-nginx bash

# 如果看到shell 的開頭變為以下這樣,說明你已經進入容器內了:
root@c758c99a7d38:/#

對預設頁面進行改動

在 Nginx 容器內,執行:

$ cd /usr/share/nginx/html/
$ ls 

這時會看到以下輸出,其中 index.html 就是我們看到的歡迎頁面了。

50x.html  index.html

透過指令故意在 index.html 檔案的最後面,補上一句 hello my nginx!:

$ echo 'hello my nginx!' >> /usr/share/nginx/html/index.html

這時重新整理剛剛的預覽視窗,應該就會看到變化了。

退出容器內部

$ exit
# 退出回到cloud shell後,會看到原先cloud shell 的開頭,類似這樣:
jlin0420@cloudshell:~ (cloud-container-255813)$

把外部檔案傳入容器內

我們接下就要把 Nginx 歡迎頁面,取代為我們在前一章所準備的靜態網頁。因此,最直觀的方式就是把我們製作的網頁傳入該容器內,並取代掉容器內的 /usr/share/nginx/html/index.html

$ docker cp ~/hello-site/index.html my-nginx:/usr/share/nginx/html/index.html

這時重新整理剛剛的預覽視窗,應該就會看到我們自己的網頁了。

暫時停止容器

$ docker stop my-nginx

只是暫時停止容器,類似把VM關機的概念,但東西都還在。

啟動容器

$ docker start my-nginx

把處於停止狀態的容器再度啟動。

小結

simple ngx diagram

到這邊,假設這是你第一次接觸容器的話,可以先暫時這樣理解我們剛才完成的事情:

  1. 我們擁有一台在雲端上的個人工作站 (其實是 Cloud Shell)
  2. 我們在這台工作站上開了一台『VM』 (其實是開了一個容器)
  3. 我什麼都沒做,但這台 『VM』 已經預裝了一個 Nginx 應用程式(其實是容器內有一個 Nginx)
  4. 我什麼都沒做,但這個 『VM』 的 Nginx 居然是跑起來的
  5. 我可以實際進入到這個 『VM』當中,並且操控這個內部的作業系統。 例如,cd, ls
  6. 我可以把一個檔案從『VM』外,傳送到到 『VM』裡面
  7. 這台 『VM』可以被關機、開機