Docker打包映象的兩種方式

GSQ_Cat發表於2020-11-24

前言

Docker映象是一個特殊的檔案系統,既提供了執行時所需的程式、庫和資源,還提供了相應的配置引數,只是不包含動態資料。我們可以將任何我們的軟體產品打包成映象,以供伺服器能夠用Docker直接快速安裝並部署執行。

System:Linux(CentOS 7)
Docker Version:19.03.12

構建Image

通過Dockerfile

通過編寫Dockerfile檔案,Dockerfile示例如下:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

每條指令建立一層:

  • FROMubuntu:18.04Docker映象建立一個圖層。
  • COPY從Docker客戶端的當前目錄新增檔案。
  • RUN通過make構建您的應用程式。
  • CMD指定在容器中執行什麼命令。

執行映象生成容器時,可以在基礎層之上新增一個新的可寫層(“容器層”)。對執行中的容器所做的所有更改(例如寫入新檔案,修改現有檔案和刪除檔案)都將寫入這層薄的但是可寫的容器層。

然後執行命令docker build生成映象,如下

docker build -t myUbuntu:v1.0 .

通過docker commit

當我們覺得某個執行中的容器特別好用,就想把它保留起來,這時候我們可以通過docker build指令將這個執行中的容器構建成一個映象,然後在其他電腦上也可以使用了;

還有就是針對容器進行改造,通過把一個執行中的容器通過增刪改檔案或者安裝解除安裝一個程式改造成自己心儀的容器,然後通過命令列生成對應的映象檔案;

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS說明:

  • -a :提交的映象作者;
  • -c :使用Dockerfile指令來建立映象;
  • -m :提交時的說明文字;
  • -p :在commit時,將容器暫停。

映象的使用者許可權

這裡強調一個點,所有的映象在構建的時候如果在Dockerfile不指定uid,那麼執行成容器的時候都會預設生成使用者許可權為uid為 0,其實就是相當於root許可權。

就會出現你以普通使用者執行的一個掛載目錄的容器,它操作過的目錄,你在宿主機會無法操作的問題;

相關文章