透過Bind Mounts讓Docker Container可以與外界交換資料
其實這在每一套虛擬機器都已經是必備的功能,但因為我不常使用Docker,所以不太會設定讓Docker container可以透過共享資料夾的方式,與外界OS(例如Windows)進行資料協同交換,故在此寫下語法供給日後查詢。
Step 1. 在Windows建立一個資料夾,我是建立在E磁碟並命名為DockerSharedFolder,也就是E:\DockerSharedFolder
,建立這個資料夾後,請在目錄下建立一個abc.txt
檔案,內容隨意打。
Step 2. 在Docker中拉一個Images下來,這邊我採用Ubuntu Latest。
Step 3. 在Windows Console中輸入下列指令,建立一個名稱為ubuntu
的Container,要mount在linux下的目錄名稱是shared
,而指令最後的ubuntu
則是Images的名稱。
docker run -it --name ubuntu -v E:\DockerSharedFolder:/shared ubuntu
一般來說,網路上大部分的Docker image都可以透過-d
指令來直接背景啟動。(但因為ubuntu的bash放在/bin/bash
,所以如果直接-d
會啟動失敗)
docker run -d --name ubuntu -v E:\DockerSharedFolder:/shared ubuntu
※ -d
參數的意思是--detach
:意思是以「後台模式」運行容器。
Step 4. 透過上面的指令,Docker會自動依據ubuntu的影像檔建立一個名為ubuntu的容器,並且自動啟動。啟動後,Windows Console將呈現指令輸入模式,代表已經連接上了。接下來我們就透過下圖的指令輸入,來證明可以讀取到Windows分享出來的資料夾內容(E:\DockerSharedFolder)。
由上圖得知的確可以讀取到檔案內容,大功告成。如果日後要透過Windows Console連入這台ubuntu,可以使用下列指令:
docker exec -it ubuntu /bin/bash
※ -it
參數的意思是:
--interactive
:意思是保持容器的標準輸入(STDIN)處於打開狀態。--tty
:分配一個偽終端(pseudo-TTY)模擬終端設備。