Docker Docker構建映象

2021-08-08 15:38:14 字數 4411 閱讀 1760

本文總結自《第一本docker書 修訂版》james turnbull

建立docker映象的第一種方法是使用docker commit命令,可以將此想象為我們往版本控制系統(如git)中提交變更

我們先建立乙個容器,然後在容器裡做出修改,最後將修改提交為乙個新映象

首先,在乙個基礎映象上建立乙個容器

sudo docker run -it ubuntu /bin/bash
然後做出修改

apt-get -yqq update

apt-get -y install apache2

最後使用exit命令退出容器

先得到剛剛建立的容器的id

$ sudo docker ps -l -q

4aab3ce3cb76

然後提交修改後的容器

sudo docker commit 4aab3ce3cb76 examples/apache2
也可以在提交映象時指定更多的資料(包括標籤)

sudo docker commit -m"a new custom image" -a"author" 4aab3ce3cb76 example/apache2:webserver
注意docker commit提交的只是建立容器的映象與容器的當前狀態之間有差異的部分,這使得該更新非常輕量

檢查新建立的映象

sudo docker images example/apache2:webserver
如果要檢視提交的映象的詳細資訊

sudo docker inspect example/apache2:webserver
從提交的映象執行乙個新容器

sudo docker run -it example/apache2:webserver /bin/bash
並不推薦使用docker commit的方法來建立映象。推薦使用dockerfile定義檔案和docker build命令來建立映象

dockerfile使用基本的基於dsl(domain specific language)語法的指令來構建乙個docker映象

通過dockerfile構建映象更具備可重複性、透明性以及冪等性

首先新建乙個目錄

mkdir static_web

cd static_web

這個目錄就是我們的構建環境(build environment),對於docker來說,此環境為上下文(context)或者構建上下文(build context)

docker會在構建映象時將構建上下文和其中的檔案和目錄上傳到docker守護程序。這樣docker守護程序就能直接訪問使用者想在映象中儲存的任何**、檔案或者其他資料

然後新建乙個空的dockerfile

touch dockerfile
dockerfile檔案中寫入如下內容

# version: 0.0.1

from ubuntu:14.04

maintainer author "[email protected]"

run apt-get update && apt-get install -y nginx

run echo 'i am in your container' \

>/usr/share/nginx/html/index.html

expose 80

dockerfile中的指令可以參照dockerfile指令

docker大體上按照如下流程執行dockerfile中的指令

在構建上下文的根目錄中新建乙個.dockerignore檔案

touch .dockerignore
該檔案內容會被按行進行分割,每一行都是一條檔案過濾匹配模式。非常像.gitignore檔案,用來設定哪些檔案不會被當作構建上下文的一部分,防止它們被上傳到docker守護程序中去,即被忽略。該檔案中的匹配規則採用了go語言中的filepath

dockerfile檔案準備好之後,執行構建命令

sudo docker build -t example/static_web:latest .
-t指令為新映象設定了倉庫名、映象名和標籤,如果沒有指定標籤,docker會自動為映象設定乙個latest標籤

上面命令中的.告訴docker到當前目錄找dockerfile檔案。

也可以指定乙個git倉庫的源位址來指定dockerfile的位置,docker假設這個git倉庫的根目錄下存在dockerfile檔案

sudo docker build -t example/static_web:latest \

[email protected]:example/docker-static_web

檢視新映象

sudo docker images example/static_web:latest
如果想要深入檢視映象是如何建立出來的

sudo docker history example/static_web:latest
從新映象啟動容器

sudo docker run -d -p 80 --name static-web example/static_web \

nginx -g "daemon off;"

-d選項告訴docker以分離(detached)的方式在後台執行

nginx -g "daemon off;"是需要在容器中執行的命令,這將以前臺的執行的方式啟動nginx

-p標誌用來控制docker在執行時應該公開那些網路埠給宿主機

執行乙個容器時,docker可以通過兩種方法在宿主機上分配埠

先檢視一下容器的埠分配情況

sudo docker ps -l

或者sudo docker port static_web 80

結果假如是

0.0.0.0:49154

-p選項還可以指定將容器中的埠對映到宿主機的某一埠號上,比如將容器的80埠繫結到宿主機的8080埠

sudo docker run -d -p 8080:80 --name static_web example/static_web \

nginx -g "daemon off;"

也可以將埠繫結到特定的網路介面(ip位址)上,比如將容器的80埠繫結到宿主機的127.0.0.1的80埠上

sudo docker run -d -p 127.0.0.1:80:80 --name static_web example/static_web \

nginx -g "daemon off;"

或者將容器的80埠繫結到宿主機127.0.0.1的隨機埠上

sudo docker run -d -p 127.0.0.1::80 --name static_web example/static_web \

nginx -g "daemon off;"

還有一種更簡單的方式,使用-p引數,可以對外公開在dockerfile中通過expose指令公開的所有埠

sudo docker run -d -p --name static_web example/static_web \

nginx -g "daemon off;"

有了對映到宿主機的埠號,就可以連線到執行中的容器

$ curl localhost:49154

i am in your container

Docker Docker入門操作容器和映象

從映象上建立並執行乙個新的容器 sudo docker run i t ubuntu bin bash要在命令列下建立乙個能互動的容器,而不是乙個執行後台服務的容器,則 i和 t是最基本的引數。i引數保證容器中stdin是開啟的,t引數告訴docker為要建立的容器分配乙個偽tty終端。如果要建立乙...

使用Dockerfile構建nginx映象

dockerfile的指令 from 指定基礎映象 from是必備的指令,並且必須為第一條指令 run 用來執行命令列命令。其基本格式 shell格式 run 命令 輸入在bash環境中的命令即可,乙個dockerfile允許使用run不得超過127層,所以,使用一次run,使用 換行,使用 執行下...

docker registry構建私有的映象倉庫

docker registry是官方提供的工具,可以用於構建私有的映象倉庫。1.安裝執行docker registry 可以通過獲取官方registry映象來執行。預設情況下,倉庫會被建立在容器的 var lib registry目錄下。可以通過 v引數來將映象檔案存放在本地的指定路徑。執行命令 d...