2017-03-02 66 views
0

有沒有一種方法可以從命令行完全構建docker容器?也就是說,我需要能夠設置像FROM,RUNCMD之類的東西。docker純粹從命令行構建

我是一個場景,我必須使用Docker容器運行一切(gitnpm等),我想建立一個有準備工作做在飛行容器(如一個與npm install已經運行)。

有很多不同的情況,並且爲每個創建實際的Dockerfile是矯枉過正。相反,我希望能夠在腳本中創建命令行命令。

+0

爲什麼你不能從CLI響應線路到臨時Dockerfile? – BMitch

+0

我正在考慮這樣做,但是如果可以的話,我不想將文件寫入系統。我嘗試了'cmd <(echo'message')'的語法,但是看起來Dockerfile有些繁榮。 – samanime

回答

1

docker build要求Dockerfile是一個實際的文件。您可以使用一個不同的文件名:

docker build -f Dockerfile.temp . 

他們允許構建上下文(又名.或當前目錄),以通過標準輸入傳遞,但試圖通過一個Dockerfile這個語法將失敗:

$ docker build -t test-no-df -f - . <<EOF 
FROM busybox:latest 
CMD echo just a test 
EOF 

unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/bmitch/data/docker/test/-: no such file or directory 

2017-05-05更新:Docker剛剛發佈17.05.0-ce,包含此PR #31236。現在上面的命令創建一個映像:

$ docker build -t test-no-df -f - . <<EOF 
FROM busybox:latest 
CMD echo just a test 
EOF 
Sending build context to Docker daemon 23.34MB 
Step 1/2 : FROM busybox:latest 
---> 00f017a8c2a6 
Step 2/2 : CMD echo just a test 
---> Running in 45fde3938660 
---> d6371335f982 
Removing intermediate container 45fde3938660 
Successfully built d6371335f982 
Successfully tagged test-no-df:latest 
+0

這就是我害怕的那種。這不幸的是很蹩腳。 – samanime

+0

再讀一遍,Dockerfile是上下文中的路徑,因此您可以將您的上下文動態生成爲壓縮的tar文件,您可以在文件系統中不存在的Dockerfile中包含Dockerfile。這將移動從碼頭cli注入文件到tar cli的挑戰。 – BMitch

+0

如果我完全無法將其寫入文件系統,那麼這可能會起作用,但如果可以但不想寫就會變得瘋狂。 – samanime