1. 程式人生 > >docker容器中檔案的上傳與下載

docker容器中檔案的上傳與下載

1. 操作環境

1. CentOS:

  • CentOS-7-x86_64-DVD-1611

2. Docker:

  • Docker version 1.12.6, build 88a4867/1.12.6

3. busybox:

  • latest

2. 啟動一個容器

  啟動一個容器,還是以之前我們所下載的busybox映象為例來進行說明。

  在docker中映象是靜態的,是不能被拿來直接執行的,而我們要想執行映象中的系統,那麼我們就必須得把映象放到容器中來執行才行。

  建立容器的指令為:

docker run -dit busybox

  建立的結果為:

這裡寫圖片描述

  其中新建立的容器di為:

ecef8319d2c8d25d9c9b1e70b9a4c523c466d2f5e825ae651267f184c895813a

  檢視新建立的容器:

docker ps

  建立的結果如下:

這裡寫圖片描述

3. 上傳檔案

  上傳檔案還是以之前所上傳到CentOS作業系統中的文字檔案test.txt為例來進行說明。

  檔案上傳指令格式:

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

  OPTIONS說明:

  • -L :保持源目標中的連結

  上傳檔案

docker cp /root/test.txt ecef8319d2c8:/root/

  該命令的意思是將當前作業系統(CentOS)家目錄(root)下的檔案test.txt拷貝到容器id為ecef8319d2c8的家目錄(root)資料夾下。

4. 登入容器

1. 通過attach命令登入容器

  • attach登入

  要想檢視上傳的結果,那麼這就得需要我們登入到目標容器中去,登入目標容器的方法有兩個,分別是通過attach命令或者是exec命令。

  通過attach登入容器的語法:

docker attach [OPTIONS] CONTAINER

  要attach上去的容器必須正在執行才行,但是這樣登入上去的容器有一個缺點,那就是一旦我們執行退出操作(比如說當我們執行exit指令),正在執行的容器也立即停止了。

  attach登入容器的指令為:

docker attach ecef8319d2c8

  • W3C官方挖坑

  這裡存在一個誤區有必要科普一下,那就是在docker的W3C的官方文件中是這樣介紹的,那就是當執行下面的命令

docker attach –sig-proxy=false ecef8319d2c8

  後,再次執行CTRL-D不會關閉容器,但是實際操作並非如此,比如說我們在執行前檢視一下正在執行的容器:

docker ps

  顯示的結果如下:

這裡寫圖片描述

  當我們執行了下面的命令

docker attach –sig-proxy=false ecef8319d2c8

  然後再點選CTRL-D,顯示的結果如下:

這裡寫圖片描述

  結果顯示容器已經退出了,此時我們再次檢視正在執行著的容器

docker ps

這裡寫圖片描述

  上面顯示的結果為沒有任何容器正在執行,這說明容器確實已經關閉了。

  在不加–sig-proxy=false時,當我們執行CTRL-C命令時,容器也不會自動關閉,這個大家可以去做測試,我這裡就不再複述了。

  總之大家在登入時一定要注意這一誤區,以免誤人子弟。

2. 通過exec命令登入容器

  • exec登入

  exec登入語法格式如下:

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

  OPTIONS說明:

  • -d :分離模式: 在後臺執行
  • -i :即使沒有附加也保持STDIN 開啟
  • -t :分配一個偽終端

  exec登入容器指令為:

docker exec -it ecef8319d2c8 /bin/sh

  檢視上傳的檔案:

ls /root/

  可以看到,檔案確實是已經上傳成功了,如下圖:

這裡寫圖片描述

  • 優點

  當我們執行CTRL-D或者exit命令後,退出容器,而該容器仍然在後臺執行中。

  檢視後臺執行的容器:

docker ps

  結果如下:

這裡寫圖片描述

  我們可以看到,容器仍然在後臺照樣執行中,所以說在連線容器的時候,我極力推薦大家採用這種方式。

5. 下載檔案

  • 刪除CentOS中的test.txt檔案

  在下載busybox中的test.txt檔案前,為了不致使CentOS中原有的test.txt檔案出現干擾,所以說我們可以先刪除該檔案

  刪除指令如下:

rm -rf /root/test.txt

  • cp指令下載

  cp指令下載語法格式

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

  cp指令下載

docker cp ecef8319d2c8:/root/test.txt /root/

  檢視下載的結果:

ll

  結果如下:

這裡寫圖片描述