摘要:利用鏡像創(chuàng)建并啟動一個容器分配一個文件系統(tǒng),并在只讀的鏡像層外層掛接一個寫讀寫層。容器的啟動過程,對于理解容器至關(guān)重要,需要深入的理解。同時,對于終止?fàn)顟B(tài)的容器,我們可以采用來啟動。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。
上篇文章我們介紹了Docker三大概念中的Image,這篇我們來介紹Container,上篇文章中我們了解到了Image是運行在Container中的,實際上在容器里跑的指令都是在Container中run的。
啟動容器啟動容器的方法一般有兩種:
基于一個Image重新啟動一個新的容器
啟動一個現(xiàn)在已經(jīng)是在Stopped狀態(tài)下的容器。
來試著運行下邊的這個命令:
docker run ubuntu /bin/echo "Hello Docker" Hello Docker
有沒有感覺和本地執(zhí)行 echo ‘Hello Docker’ 的速度沒什么差別?但是其實人家是在一個Container里運行的啊。想想之前用VM的情況,啟動一個instance得2分鐘,所要執(zhí)行的Job只有幾秒而已。如果同樣的Job放到docker里跑,那會快多了,太爽快了。
所以一般用戶在使用容器的時候都是隨時新建和刪除容器的。
上邊那個例子是我們用docker 運行了一個輸出語句,下面我們來看這樣一個例子:
docker run -t -i ubuntu /bin/bash root@42099bcd8196:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
這樣進入了一個docker container 并運行l(wèi)s命令。-t讓docker分配一個偽終端綁定到容器的標(biāo)準(zhǔn)輸入上, -i讓容器的標(biāo)準(zhǔn)輸入一直打開。
容器的啟動過程那么一個容器的啟動到底經(jīng)歷那些過程呢:
檢查images如果本地不存在就是從遠(yuǎn)程倉庫下載。
利用鏡像創(chuàng)建并啟動一個容器
分配一個文件系統(tǒng),并在只讀的鏡像層外層掛接一個寫讀寫層。
從宿主主機配置的網(wǎng)橋接口橋接一個虛擬接口到容器中
分配一個ip地址給容器
運行用戶給定的應(yīng)用程序
運行完畢,容器被終止。
容器的啟動過程,對于理解容器至關(guān)重要,需要深入的理解。
使用docker ps -al查看所有的歷史,使用docker start可以啟動一個已經(jīng)終止的容器。
后臺運行添加 -d參數(shù)可以后臺運行docker container
docker run -d ubuntu /bin/bash -c "while true; do echo hello docker; sleep 2; done"
這樣我們就看不到容器的輸出信息了,可以通過docker logs來查看
docker logs [container ID or NAME]
like this
docker logs 133e58dbdc78 hello docker hello docker hello docker hello docker ...停止容器
要停止一個容器也是相當(dāng)簡單的,docker stop就能辦到了。同時,對于終止?fàn)顟B(tài)的容器,我們可以采用docker start 來啟動。通過docker restart來重啟這個容器。
docker stop [CONTAINER ID OR NAME]進入容器
當(dāng)我們使用 -d參數(shù)運行了一個Container的時候,有時候我們需要進入這個容器進行一些操作。例如有這樣的一個情況,我們運行了一個app在一個容器里,我們想進入容器看看,這個app運行的狀態(tài),查看log。那們?nèi)绾芜M入呢?其實有很多種方法,這里介紹兩種。
第一:
docker attach [CONTAINER ID OR NAME]
$ docker run -d --name topdemo ubuntu /usr/bin/top -b $ docker attach topdemo top - 02:05:52 up 3:05, 0 users, load average: 0.01, 0.02, 0.05 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 373572k total, 355560k used, 18012k free, 27872k buffers Swap: 786428k total, 0k used, 786428k free, 221740k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 17200 1116 912 R 0 0.3 0:00.03 top
這里我們使用了attach命令進入了容器,看到了top命令的輸出。
回到我剛才說的那個例子,如果有個Container后臺里執(zhí)行的是一個webapp,如何看到logs 或者是輸出呢?接下來具體說說。
docker run -d --name webapp -p 5000:5000 training/webapp
在執(zhí)行了這個命令后,我們在后臺run了一個images為training/webapp的Container(這是一個python的flask app)我們將本機的5000端口與Container的5000端口(flask的默認(rèn)端口)進行了mapping。當(dāng)我們從Browser訪問的時候,我們就能訪問到這個app。
當(dāng)我們在本地開發(fā)的時候,我們很容易的可以從console里看到,這個app的訪問的記錄,同時也能方便的查看log文件。那么這些在容器里怎么進行呢?當(dāng)然我們可以使用上邊介紹的attach命令。
docker attach webapp
當(dāng)從瀏覽器訪問這個app的時候,通過attach我們可以看到Container里的輸出。
docker attach webapp 172.17.0.1 - - [04/Oct/2016 04:44:23] "GET / HTTP/1.1" 200 - 172.17.0.1 - - [04/Oct/2016 04:44:24] "GET / HTTP/1.1" 200 -
但是問題來了,如果我們要看log文件,或者想進入Container,看看其他的文件狀態(tài),該怎么辦呢?那么這時候我們就會用到 docker exec了。
docker exec -it webapp /bin/bash root@e0cac87036f0:/opt/webapp# ls Procfile app.py requirements.txt tests.py root@e0cac87036f0:/opt/webapp#
通過docker exec我們就在這個Container里又運行了bash,這時候我們就能做其他我們想做的事情了。
那么docker attach 和 docker exec有什么區(qū)別呢?
docker attach 讓用戶可以進入Container查看輸出等等操作,但是并不會另外啟動一個進程! 如果你用CTRL-c來退出,同時這個信號會kill Container(默認(rèn)情況)
docker exec 會啟動另外一個進程來進入Container,這里的操作是在這個進程下的。如果你用CTRL-c來退出,不會kill 原來的Container
好了,對于Container今天就聊到這里,下片文章我們繼續(xù)聊最后一個概念,Docker倉庫。
歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26732.html
摘要:圖表君聊開篇今天是圖表君聊的第一篇,為什么會有這個系列呢容器技術(shù)出現(xiàn)已經(jīng)有一段時間了,之前零零星星的也看過一些文章,圖表君的項目上也在使用。至于,圖表君沒試過,官網(wǎng)有的教程,大家可以參考。上的官網(wǎng),安裝,然后跟著圖表君一起學(xué)習(xí)吧。 圖表君聊Docker-開篇 今天是圖表君聊Docker的第一篇,為什么會有這個系列呢?容器技術(shù)Docker出現(xiàn)已經(jīng)有一段時間了,之前零零星星的也看過一些文章...
摘要:圖表君聊倉庫今天我們來繼續(xù)聊,上篇文章我們介紹了里的今天來繼續(xù)三大概念中的最后一個倉庫。這個倉庫可以是一個私有的倉庫,供一個內(nèi)部使用。目前官方維護一個公共倉庫里邊有大量的,可以滿足我們的大部分需求。原創(chuàng)文章,歡迎轉(zhuǎn)發(fā),但請標(biāo)明出處。 圖表君聊docker-倉庫 今天我們來繼續(xù)聊docker,上篇文章我們介紹了docker里的Container.今天來繼續(xù)三大概念中的最后一個--倉庫(R...
摘要:圖表君聊前邊幾篇文章給大家介紹了的三大基本概念。維護者的信息是圖表君當(dāng)前目錄到容器中的目錄下指定工作路徑為安裝依賴暴露端口啟動創(chuàng)建鏡像編寫好后,就可以使用來了。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。 圖表君聊docker-Dockerfile 前邊幾篇文章給大家介紹了docker的三大基本概念。可能大家覺得概念的東西比較生澀,有沒有更多實戰(zhàn)的例子呢?好了,從這篇文章開始,我會...
摘要:當(dāng)運行這條命令的時候,實際上是從上來請求標(biāo)記為的,當(dāng)然由于眾所周知的原因,的速度會很慢。運行下邊這條命令,我們就可以清理下了。歡迎訂閱我的公眾號,第一時間獲取圖表君的新文章。 上篇文章我們介紹了docker的歷史由來帶來的一些好處,從這篇文章開始,我們開始正式的進入Docker的世界,首先給大家介紹一下Docker一些基本概念。 Docker的基本概念 Docker的基本概念并不是很多...
本文介紹docker中的contanier,基于操作系統(tǒng)介紹什么是container。進程(Processes)Container是具有指定配置的Linux進程(processes)。我們進行如下操作: ##啟動一個redis進程 ?~dockerrun-d--name=dbredis:alpine ##顯示容器運行的進程 ?~dockertopdb PIDUSERTIMECOMMA...
閱讀 3284·2021-11-24 09:39
閱讀 3865·2021-11-22 09:34
閱讀 4799·2021-08-11 11:17
閱讀 1060·2019-08-29 13:58
閱讀 2570·2019-08-28 18:18
閱讀 537·2019-08-26 12:24
閱讀 825·2019-08-26 12:14
閱讀 726·2019-08-26 11:58