Docker 是什麼?
Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心命名空間(namespaces),來建立獨立的容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機器造成的額外負擔[2]。
來源: 維基百科
開發者常碰到,在本地開發是用 Windows 系統,上線後的環境是 Linux 系統,系統的不同造成程式錯誤的機率就越大。早期的普遍做法就是透過 virtualbox 或 vmware 等,來安裝整個作業系統,安裝系統及設定系統,需要相當的時間,且也佔用相當多的本地資源,Docker 是使用本地系統的核心,以最小資源運行其環境。
淺談輕量化的虛擬技術 — Docker容器http://www.cc.ntu.edu.tw/chinese/epaper/0036/20160321_3611.html
Windows 也支援 Linux 的開發環境,可以搜尋關鍵字 Windows Subsystem for Linux。在 Windows 下安裝 Docker Desktop for Windows 需滿足以下條件。
Windows 10 64bit: Pro, Enterprise or Education (Build 15063 or later). Virtualization is enabled in BIOS. Typically, virtualization is enabled by default. This is different from having Hyper-V enabled. For more detail see Virtualization must be enabled in Troubleshooting.
CPU SLAT-capable feature.
At least 4GB of RAM.
來源: https://docs.docker.com/docker-for-windows/install/
會開始接觸 Docker 的場景,當 MAC 系統更新,本地設定的開發環境都會還原成預設值,一開時的做法認為環境跑掉就重設,沒什麼難度,但每次的重設都是不同的操作流程才能完成,最後真的心累的,才漸漸使用 Docker 來部署環境。Docker 環境建置好了,不管新人舊人來要協同開發,也相對省時,省去建置環境的時間。
這次實作,使用的 image 為 jupyter/datascience-notebook,預設安裝支援的語言有Julia 、R、Python,我們需要再加入Javascript 及 Typescript。
找尋是否有現成 image 可以上 docker hub 搜尋
https://hub.docker.com/search?q=jupyter&type=image
這邊啟用 Container 的方式,是透過 Dockerfile 及 docker-compose 的方式。
下面是 Dockerfile 的代碼,針對 image jupyter/datascience-notebook 做一些調整,以下代碼均來自 https://hub.docker.com/r/jupyter/datascience-notebook/dockerfile。
針對上述,我們加入的部份如下,我們增加nodejs、 ijavascript、itypescript
RUN conda install -c conda-forge nodejsRUN npm install -g ijavascript itypescriptRUN ijsinstallRUN its — install=local
ijavascript
https://github.com/n-riesco/ijavascript
itypescript
https://github.com/nearbydelta/itypescript
docker-compose 的目的在於,針對不同的 image 做管理,由於此範例只有一個 image ,無法看出 docker-compose 的方便性。這邊有定義 Port,本地的Port 8888 對應到容器的 8888,啟動服務後,可以使用 http://localhost:8888,查看該服務。
上述設定完後,以下指令,安裝及啟動服務,耗時差不多 20 分鐘,image 檔案約 5G。
# docker-compose up
完成後,終端機下會顯示一段如下 URL,token 的用意,是在認證您的身份。
http://0.0.0.0:8888/?token=[token]
順利的話,會顯示如下畫面,且會有Javascript 及 Typescript 的選項。
通常都不順利,我們可以查看目前運多的服務,直接進入 Container 下啟用。
以下指令查看當前運作的 Container
# docker ps
將看到的CONTAINER ID 帶入以下的[CONTAINER ID]
# docker exec -it -u root [CONTAINER ID] /bin/bash
進入後,執行以下指令,讓Javascript 及 Typescript 可以運作。重整剛剛網頁的畫面,應該就會顯示這兩個選項。
# ijsinstall# its --install=local
來 TRY 一下 Typescript。
刪除 Container
# docker-compose down
啟動存在的 Container
# docker-compose start
停止 Container
# docker-compose stop