Skip to content

[Linux] Docker 基本介紹與建立步驟筆記

介紹

Docker 是一種輕量級的『虛擬化』技術,讓我們可以自由搭建適合自己程式開發的環境,也能打包整個配置的環境(也就是的所謂 Container,容器),讓程式即使再轉移到其他裝置上時,仍然能啟動同樣的 Docker 環境正常執行程式。

這是個很棒的技術,讓我們可以不必煩惱不同平台上需要依照不同情境做出相應配置。

既然提到 Docker,自然也不能免俗地得提一下和 Virtual Machine(VM,虛擬機器)的差異了。

大家一定都對 VM 比較熟悉:我們可以透過在電腦中安裝像是 VirtualBox 等等的軟體,在我們本機端的作業系統中完整地模擬另外一個作業系統。但是在號稱輕量化的 Docker 中,Container 是直接共用了主要的 Host OS(本機端的作業系統),所以並不像 VM 一般需要等待開機,對系統(比方說記憶體)的負擔也較小。

不過 Docker 不能沒有 Host OS,因為 Docker 仍然需要作業系統的檔案系統。

如果要建立一個 Docker 的環境,我們可以透過以下流程建立:

  • 建立映像檔Image):可以自己撰寫 Dockerfile 或 從 DockerHub 上取得
  • 使用映像檔建立容器Container
  • 開始開發(我們可以隨時退出、重新連接、關閉)

映像檔就像是我們環境的設定檔案,容器則是我們利用映像檔建立起的虛擬環境。

以下就逐步介紹如何安裝 Docker、建立 Dockerfile、啟動容器,以及如何進行這個容器的操作。

(註:僅安裝 docker 是無法直接使用 GPU 環境的,要使用 nvidia-docker 比較方便。關於 nvidia-docker 的安裝介紹會在其他文章中提及。)


安裝 Docker

Step 1. 更新系統

sudo apt-get update


Step 2. 移除舊的版本(良好的習慣)

sudo apt-get remove docker docker-engine docker.io


Step 3. 安裝 Docker

sudo apt install docker.io


Step 4. 設定讓 Docker 在系統中自動執行

sudo systemctl start docker
sudo systemctl enable docker

Output:

Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.

如果有看到以上資訊,那 Docker 應該就安裝成功了。


製作 Dockerfile

你可以像我一樣,在工作目錄底下建立屬於自己的 Dockerfile

Dockerfile 中寫下:

# Initial
FROM tensorflow/tensorflow:2.2.1-gpu-py3

# Work dir
WORKDIR /workspace

# Command
RUN pip3 install -U numpy torch torchvision transformers
RUN apt-get update


FROM 是使用到的映像檔名稱,可以上 DockerHub 查找(資源來自於 https://hub.docker.com/r/tensorflow/tensorflow/tags

WORKDIR 是虛擬環境的工作路徑。

RUN 後頭則是直接接終端機指令,這裡我是拿來安裝 Python 的一些深度學習套件。

寫好之後,在同樣的目錄底下執行(clay/test 是我自訂的名稱,你也可以改成你的):

docker build -t clay/test .

Output:

應該會看到這樣的下載、安裝畫面。

等到配置完成後,就要啟動容器了。

docker run \
-e NVIDIA_VISBLE_DEVICES=0 \
--rm \
-it \
-p "8899" \
--name clay_test \
-v /home/ccs96307/workspace/:/workspace/Projects clay/test


這裡我要先聲明,我這樣的配置仍然無法使用 GPU 做深度學習,應該去安裝 nvidia-docker

最重要的就是 -v 參數了,後面是將系統中真正的資料夾映射至虛擬環境中的資料夾,最後頭的 clay/test 就是剛才建立的自定義名稱了。(如果你有更改,就應該改成你的

執行之後應該會看到進入虛擬環境中了。


Docker 的基本操作

1. 暫時退出

如果只是要暫時退出,而希望容器仍在後台運行不必關閉,直接使用:

  • Ctrl + q
  • Ctrl + p
  • 直接關閉終端機

即可。


2. 重新連接

那既然我們退出了,那該如何連接回容器、恢復當前的工作內容呢?

docker attach clay_test


3. 徹底關閉容器

沒有比這個更簡單的了,直接:

  • Ctrl + D
  • 輸入 exit

即可。


References


Read More

Leave a Reply