本文總結自《第一本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...