映象是容器的基礎,每次執行docker run的時候都會制定哪個映象作為容器執行的基礎。在之前的例子中,我們所使用的都來自於Docker Hub的映象。直接使用這些映象是可以滿足一定的需求,而當這些映象無法直接滿足需求的時候,我們就需要定製這些映象。
映象是多層儲存,每一層是在前一層的基礎上進行的修改;而容器同樣也是多層儲存,是在以映象為基礎層,在其基礎層上加一層作為容器執行時的儲存層。
我們定製一個Web伺服器為例。
docker run --name webserver -d -p 80:80 nginx
以上命令會用nginx映象啟動一個容器,命名為webserver,並且對映了80埠,這樣我們可以用瀏覽器去訪問這個nginx伺服器。
然後訪問地址。
試著修改一下nginx的歡迎介面。
docker exec -it webserver bash
echo '<h1>My Docker</h1>' > /usr/share/nginx/html/index.html
我們以互動式終端方式進入webserver 容器,並執行bash命令,也就是獲的一個可操作的shell,然後覆蓋了nginx下的index.html內容,重新整理瀏覽器。
我們修改了容器的檔案,也就是改動了容器的儲存層。我們可以通過docker diff ID | name 檢視改動內容。
容器內容改變了,如果我們希望儲存成新的映象,那麼我們可以使用docker commit命令,語法為:
docker commit \
--author "update by wt" \
--message "修改了nginx的主頁" \
webserver \ //ID或者名稱
nginx:v2
其中, --author 是指定修改的作者,而 --message是備註,可以留空。
docker images 檢視新的映象
新的映象定製好之後,我們可以執行這個映象
docker run --name newwebserver -d -p 81:80 nginx:v1
這裡我們命令為新的服務newwebserver ,並且對映到81埠。訪問在瀏覽器加埠即可http://192.168.52.133:81,然後獲的shell修改nginx歡迎介面即可。
慎重docker commit,關於為什麼慎用,去網上搜尋一下。