利用 Dockerfile 來建立映象

2021-10-23 19:19:48 字數 3348 閱讀 5142

我們可以使用docker build來建立乙個新的映象。為此,首先需要建立乙個 dockerfile,包含一些如何建立映象的指令。

新建乙個目錄和乙個 dockerfile

$ mkdir sinatra

$ cd sinatra

$ touch dockerfile

dockerfile 中每一條指令都建立映象的一層,例如:

# this is a comment

from ubuntu:14.04

maintainer docker newbee run apt-get -qq update

run apt-get -qqy install ruby ruby-dev

run gem install sinatra

dockerfile 基本的語法是

編寫完成 dockerfile 後可以使用docker build來生成映象。

$ sudo docker build -t="ouruser/sinatra:v2" .

uploading context 2.56 kb

uploading context

step 0 : from ubuntu:14.04

---> 99ec81b80c55

step 1 : maintainer newbee ---> running in 7c5664a8a0c1

---> 2fa8ca4e2a13

removing intermediate container 7c5664a8a0c1

step 2 : run apt-get -qq update

---> running in b07cc3fb4256

---> 50d21070ec0c

removing intermediate container b07cc3fb4256

step 3 : run apt-get -qqy install ruby ruby-dev

---> running in a5b038dd127e

selecting previously unselected package libasan0:amd64.

(reading database ... 11518 files and directories currently installed.)

preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ...

setting up ruby (1:1.9.3.4) ...

setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...

processing triggers for libc-bin (2.19-0ubuntu6) ...

---> 2acb20f17878

removing intermediate container a5b038dd127e

step 4 : run gem install sinatra

---> running in 5e9d0065c1f7

. . .

successfully installed rack-protection-1.5.3

successfully installed sinatra-1.4.5

4 gems installed

---> 324104cde6ad

removing intermediate container 5e9d0065c1f7

successfully built 324104cde6ad

其中-t標記來新增 tag,指定新的映象的使用者資訊。 「.」 是 dockerfile 所在的路徑(當前目錄),也可以替換為乙個具體的 dockerfile 的路徑。

可以看到 build 程序在執行操作。它要做的第一件事情就是上傳這個 dockerfile 內容,因為所有的操作都要依據 dockerfile 來進行。 然後,dockfile 中的指令被一條一條的執行。每一步都建立了乙個新的容器,在容器中執行指令並提交修改(就跟之前介紹過的docker commit一樣)。當所有的指令都執行完畢之後,返回了最終的映象 id。所有的中間步驟所產生的容器都被刪除和清理了。

注意乙個映象不能超過 127 層

此外,還可以利用add命令複製本地檔案到映象;用expose命令來向外部開放埠;用cmd命令來描述容器啟動後執行的程式等。例如

現在可以利用新建立的映象來啟動乙個容器。

$ sudo docker run -t -i ouruser/sinatra:v2 /bin/bash

root@8196968dac35:/#

還可以用docker tag命令來修改映象的標籤。

$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel

$ sudo docker images ouruser/sinatra

repository tag image id created virtual size

ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 mb

ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 mb

ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 mb

使用者可以通過docker push命令,把自己建立的映象上傳到倉庫中來共享。例如,使用者在 docker hub 上完成註冊後,可以推送自己的映象到倉庫中。

$ sudo docker push ouruser/sinatra

the push refers to a repository [ouruser/sinatra] (len: 1)

sending image list

pushing repository ouruser/sinatra (3 tags)

利用Dockerfile構建映象

dockerfile 是乙個文字檔案,其內包含了一條條的指 instruction 每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。還以之前定製 nginx 映象為例,這次我們使用 dockerfile 來定製。first dockerfile from ubuntu 14.04...

dockerfile建立映象

dockerfile用來快速建立自定義映象 dockerfile分為部分 基礎映象資訊,維護者資訊,映象操作指令,容器啟動時執行指令 一開始必須指明所基於的映象名稱 維護者資訊 映象操作指令 run 執行容器時的操作命令 cmd from 功能為指定基礎映象,並且必須是第一條指令。如果不以任何映象為...

Dockerfile建立Wordpress論壇

在root目錄下 mkdir docker cd docker mkdire nginx mkdire mysql cd nginx 上傳nginx 1.12.2.tar.gz wordpress 4.9.4 zh cn.tar libmcrypt 2.5.7.tar.gz nginx.conf w...