2017-04-14 88 views
0

我最近開始使用碼頭工作。我已經下載了一個泊塢窗圖像,我想以某種方式更改它,以便我可以將文件夾中的內容從本地複製到該圖像中,或者可以編輯圖像中的任何文件。修改碼頭圖片

我想如果我能以某種方式提取圖像,請進行更改,然後創建一個圖像。不知道它是否會像那樣工作。我試圖尋找選擇,但無法找到一個有前途的解決方案。

的圖像當前Dockerfile有點像這樣:

FROM abc/def 
MAINTAINER Humpty Dumpty <@hd> 


RUN sudo apt-get install -y vim 

ADD . /home/humpty-dumpty 
WORKDIR /home/humpty-dumpty 
RUN cd lib && make 

CMD ["bash"] 

注: -我在尋找一個簡單而乾淨的方式只有改變現有的形象,而不是創建一個新的形象變化。

回答

0

由於現有的碼頭圖像無法更改,我所做的是我基於原始碼頭圖像爲其內容創建了新碼頭圖像的碼頭文件,並將其修改爲在新圖像中包含來自本地的測試文件夾。 這種聯繫是有益的Build your own image - Docker Documentation

FROM abc/def:latest 

在搬運工文件上面行告訴其圖像圖像是基於多克。所以,從父圖像的內容複製到新的圖像

最後,包括本地驅動器上的測試文件夾我在泊塢窗文件

COPY test /home/humpty-dumpty/test 

添加下面的命令,並在新加入的測試文件夾圖片。

以下是用於從現有圖像創建新圖像的dockerfile。

FROM abc/def:latest 

# Extras 
RUN sudo apt-get install -y vim 

# copies local folder into the image 
COPY test /home/humpty-dumpty/test 

更新: -對於運行泊塢窗圖像編輯一個文件,我們可以使用通過上述泊塢窗文件安裝現在

vim <filename> 

vim編輯器打開該文件,vim的命令都可以用於編輯和保存文件。

1

您不更改現有圖像,圖像被標記爲校驗和並被視爲只讀。使用圖像指向文件系統上相同文件的容器,在容器的RW層上添加容器,因此取決於圖像是否保持不變。層緩存也增加了這種依賴性。

由於分層文件系統和緩存,創建一個新的圖像,只有你的一個文件夾添加將只添加一個層添加,而不是一個新的圖像的完整副本。因此,簡單/乾淨/正確的方法是使用Dockerfile創建一個新圖像。

+0

Ohkk ...所以這些圖像無法修改。當我下載泊塢窗圖像時,我沒有這些圖像指向的結構。所以我唯一的選擇是創建一個新的圖像。這同樣適用於文件編輯也..也就是說? – qwerty

+0

請記住圖像是由ID(校驗和)引用的。一個標籤指向一個ID,多個標籤可以指向相同的ID,或者一個標籤,像ubuntu:最新可以指向任何你想要的圖像的ID。 – BMitch

2

首先,我不會推薦搞亂其他圖片。如果你能創造你自己的會更好。向前邁進,您可以使用copy命令將主機中的文件夾添加到泊塢窗圖像。

COPY <src> <dest> 

唯一需要注意的是<src>路徑必須在構建的上下文中;您不能COPY ../something /something,因爲docker build的第一步是將上下文目錄(和子目錄)發送到docker守護進程。

FROM abc/def 
MAINTAINER Humpty Dumpty <@hd> 


RUN sudo apt-get install -y vim 

// Make sure you already have /home/humpty-dumpty directory 
// if not create one 
RUN mkdir -p /home/humpty-dumpty 


COPY test /home/humpty-dumpty/ // This will add test directory to home/humpty-dumpty 
WORKDIR /home/humpty-dumpty 
RUN cd lib && make 

CMD ["bash"] 
1

我想你可以使用docker cp命令來進行更改container這是從碼頭工人的圖像生成並提交更改。

這裏是一個參考,

指南搬運工CP: https://docs.docker.com/engine/reference/commandline/cp/

指南搬運工承諾:https://docs.docker.com/engine/reference/commandline/container_commit/

記住,docker image是俱備只所以你不能做出任何更改。唯一的辦法是修改你的docker文件並重新創建鏡像,但是在這種情況下你會丟失數據(如果沒有安裝在docker volume上)。但是您可以對container進行更改,但這只是未做好準備。