mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典
讀者可以將下面的命令綱要當(dāng)作成功使用Docker必須掌握的公認(rèn)寶典——從搜索和構(gòu)建鏡像到創(chuàng)建自己的Dockerfile。我們先看一些簡單的命令,然后在此基礎(chǔ)上接觸更復(fù)雜的命令。
7.1.1 docker search
docker search命令能夠在Docker CLI上運行,以搜索Docker注冊中心中可用的鏡像:
docker search [options] term基于圖形界面的客戶端也提供了搜索功能。
在圖7-1展示的例子中,docker search mysql返回所有鏡像名字中包含“mysql”的鏡像。正如所見到的,它返回了前25個結(jié)果?;趫D形界面的搜索提供了相似的結(jié)果,如圖7-2所示。
圖7-1 Docker搜索“mysql”的結(jié)果
圖7-2 基于圖形界面搜索“mysql”的結(jié)果
盡管像dockerizedrupal這樣的一些結(jié)果是唯一的,但多數(shù)結(jié)果是重復(fù)的,因為這些鏡像被不同用戶上傳,這些用戶將鏡像用于定制或者用于進行集成。當(dāng)使用-s選項時,搜索只提供被廣泛使用(基于其他用戶的反饋)的文件:
docker search –s 50 mysql該命令會返回鏡像名中包含“mysql”并且反饋至少有50顆星的所有鏡像,如圖 7-3所示。
圖7-3 鏡像名字中有“mysql”并且反饋至少有50顆星的搜索結(jié)果
在這種情況下,只列出兩條,因為超過50評級的只有兩條。
注意 Docker一直以驚人的速度發(fā)展,因此命令、選項甚至特性和功能都在不同版本之間頻繁變化。例如,在編寫本書時,搜索的-s被廢棄了,取而代之的是必須使用稱為--filter的標(biāo)志。對于filter選項,列出所有評價星級超過50顆的所有MySQL鏡像的命令會是docker search --filter stars=50 mysql7.1.2 docker pull
docker pull命令將請求的鏡像從Docker注冊中心下載到本地機器:
docker pull image:tag例如,如圖7-4所示,docker pull mysql從注冊中心拉取MySQL鏡像。如果沒有指定版本之類的標(biāo)簽,這個命令默認(rèn)會附加“l(fā)atest”標(biāo)簽,而不是拉取所有可用的MySQL鏡像。這個命令等價于
docker pull MySQL:latest圖7-4 docker pull從注冊中心拉取MySQL的latest鏡像
7.1.3 docker images
docker images命令返回本地機器上可用的頂層鏡像列表:
docker images[options]例如,docker images-a展示所有頂層鏡像列表,包括它們的倉庫、標(biāo)簽、創(chuàng)建日期和虛擬尺寸,如圖7-5所示,但它沒有展示中間層的鏡像。
圖7-5 docke images-a命令展示所有頂層鏡像列表,包括它們的倉庫、標(biāo)簽、創(chuàng)建日期和虛擬尺寸
要記住的一件重要的事情是,當(dāng)在本地機器上創(chuàng)建或構(gòu)建Docker鏡像時,也創(chuàng)建了各種中間層。例如,如果使用包含多個命令的Dockerfile構(gòu)建鏡像,則執(zhí)行的每個命令都會產(chǎn)生一個鏡像層,這是Docker的關(guān)鍵方面之一,這使容器輕量并且非常適合復(fù)用。
7.1.4 docker rmi
docker rmi命令從本地機器上刪除所要求的鏡像:
docker rmi[options] image [image, image...]例如,圖7-6所示的docker rmi mysql命令從宿主機上刪除了MySQL鏡像,包括安裝的所有層。
圖7-6 通過docker rmi mysql命令刪除MySQL鏡像
7.1.5 docker run
下載(拉取)了鏡像之后,下一步就是執(zhí)行(運行)鏡像,這正是docker run命令所要做的事情:
docker run [options] image: tag [command, args]這個命令使用容器自己的文件系統(tǒng)、端口和IP地址啟動容器。我們還可以用一個或多個參數(shù)給run命令傳遞一些選項。下面是一些常用選項:
i切換到STDIN打開的交互模式;
t分配一個偽tty控制臺終端。
docker run命令還有許多其他選項,例如,以分離(-d)狀態(tài)(后臺)啟動進程,也就是說,容器會啟動但不監(jiān)聽命令行。我們可以指定命令來覆蓋想要運行的鏡像自身的默認(rèn)命令,也可以指定CPU和內(nèi)存方面的運行時約束。
舉個例子,讓我們拉取Ubuntu鏡像并執(zhí)行run命令(見圖7-7):
docker pull ubuntu:latest圖7-7 從Docker Hub倉庫下載Ubuntu鏡像
該命令將最新的Ubuntu鏡像拉取到本地主機上,如圖7-8所示。
圖7-8 拉取的最新Ubuntu鏡像
現(xiàn)在,讓我們用i和t選項在本地主機上運行Ubuntu。我們還指明了我們想要運行shell進程:
docker run –it ubuntu sh現(xiàn)在我們在本地機器上運行了一個帶有shell提示符入口的Ubuntu容器。從這里,我們可以運行我們想要的任何shell命令。圖7-9展示了幾個簡單的例子。例如:
echo 'Learning Docker';
ls;
cd bin(為了查看bin目錄的內(nèi)容)。
圖7-9 運行交互式shell
正如所見,bin目錄有系統(tǒng)運轉(zhuǎn)所需的關(guān)鍵程序。
7.1.6 docker ps
docker ps命令列出所有正在運行的容器(見圖7-10):
docker ps [Options]記住,每個容器運行且只運行一個進程。在這個例子中,沒有正在運行的容器,因此展示了一個空列表。
圖7-10 docker ps命令顯示了所有當(dāng)前正在運行的容器
讓我們用-a選項再次運行ps命令,如圖7-11所示,以查看所有容器,甚至是那些沒有運行的容器。
圖7-11 -a選項將不活躍的容器混合到結(jié)果中
正如所見,由于退出了shell提示符,Ubuntu容器不再運行或活躍,但是它并沒有被刪除,只是不活躍而已。如果愿意,我們可以重啟容器,我們很快就會學(xué)到。
7.1.7 docker logs
docker ogs命令提供了指定容器的日志文件,該日志文件包含了容器的標(biāo)準(zhǔn)輸出(stdout和stderr):
docker logs [Options] Container這一命令僅適用于帶有JSON文件日志驅(qū)動的容器。舉個例子,讓我們用下面的命令運行shell進程:
docker run –it ubuntu sh運行幾個shell命令,如ls -a和cd bin,如圖7-12所示。
圖7-12 shell命令的一些例子
打開另一個終端窗口,通過下面的命令來查找我們剛剛啟動的Ubuntu容器的容器ID(見圖7-13):
docker ps –a圖7-13 查找我們剛剛啟動的Ubuntu容器的容器ID
復(fù)制運行的Ubuntu容器的容器ID?,F(xiàn)在,我們可以執(zhí)行l(wèi)og命令來查看這個特定容器的日志(見圖7-14):
docker log eded3539719c我們能夠看到日志的內(nèi)容,在這個例子中是已經(jīng)執(zhí)行的命令的歷史。
圖7-14 執(zhí)行l(wèi)og命令來查看容器的日志
舉一個更復(fù)雜的例子。讓我們先下載并創(chuàng)建MySQL容器。
首先,拉取最新的MySQL鏡像(見圖7-15):
docker pull MySQL: latest圖7-15 拉取的最新MySQL鏡像
下一步,使用run命令創(chuàng)建MySQL容器(見圖7-16),并記錄容器ID:
docker run --name myDatabase > -e MySQL_ROOT_PASSWORD=myPassword > -d MySQL:latest這里,name是數(shù)據(jù)庫名,e是指定數(shù)據(jù)庫密碼的環(huán)境變量的標(biāo)志,docker run命令的d選項以分離模式啟動進程。
圖7-16 運行MySQL容器
接下來,驗證容器進程:
docker ps注意,容器啟動并運行起來,如圖7-17所示。
圖7-17 驗證容器進程
現(xiàn)在容器已經(jīng)啟動并運行起來,我們需要連接它。我們首先要知道的是端口。盡管我們知道默認(rèn)端口是什么,但我們還是通過運行l(wèi)ogs命令來檢查一下日志文件:
docker logs fcb85434597b這里,fcb85434597b是之前啟動的容器的容器ID(見圖7-18)。
圖7-18 運行l(wèi)ogs命令
如圖7-19所示,我們看到MySQL的版本和正在監(jiān)聽的端口。請再次注意,Docker日志展示了容器的stdout和stderr的信息,不要將其與MySQL的標(biāo)準(zhǔn)日志文件混淆。
圖7-19 MySQL的版本及正在監(jiān)聽的端口
注意 另一個檢查容器正在監(jiān)聽什么端口的方法是查看docker ps輸出。如果你有留意,圖7-18中有一個PORTS列顯示了3306/tcp,這表明MySQL將監(jiān)聽3306端口。7.1.8 docker restart
docker restart命令會重啟指定的容器:
docker restart [Options] Container ID (s)讓我們通過指定容器ID來重啟Ubuntu容器,前面的例子中該容器ID是c8b9770c88e9,如圖7-20所示。
圖7-20 重啟Ubuntu容器
如果再次運行ps命令,應(yīng)該會看到一個活動的容器,如圖7-21所示。
圖7-21 ps命令顯示了一個活動的容器
正如所見,我們沒有得到shell提示符。我們可以通過運行docker attach命令來解決這個問題,接下來將討論這個命令。
7.1.9 docker attach
docker attach命令允許使用者連接到指定的正在運行的容器上,以交互式地控制它或者查看正在進行的輸出:
docker attach[Options] Container ID運行這個命令,連接到c8b9770c88e9的Ubuntu容器,以與shell提示符交互,如圖7-22所示。
圖7-22 通過docker attach命令與shell提示符交互
注意,命令提示符回來了,我們可以繼續(xù)了。另一個重要的方面是,無論什么時候重啟這個容器,我們總是會得到shell提示符。我們無法改變其行為,因為這是最初在run命令中使用-it啟動容器的方式。不過我們肯定可以使用不同的選項、參數(shù)和命令再次運行相同的Ubuntu鏡像。這正是Docker的美妙之處。
7.1.10 docker rm
docker rm命令會刪除一個或多個指定的容器:
docker rm [Options] Container(s)例如,讓我們嘗試刪除Ubuntu容器。在刪除容器前必須停止容器,或者使用-f(強制)選項直接刪除容器,這實際上會給容器內(nèi)運行的進程發(fā)送SKGKILL,然后將容器刪除:
docker stop [Options] Container(s)圖7-23展示了Ubuntu容器的狀態(tài)。Ubuntu容器處于運行狀態(tài),并已經(jīng)運行了38個小時,如狀態(tài)屬性所示。
圖7-23 Ubuntu容器的狀態(tài)
讓我們運行stop命令并再次執(zhí)行ps`` -``a,如圖7-24所示。
圖7-24 運行stop命令并再次執(zhí)行ps -a
正如所見,容器不再運行,狀態(tài)是以代碼137退出,這意味著容器收到了SIGKILL命令。stop命令會在一定的寬限期之后發(fā)送SIGTERM和SIGKILL。我們可以用-t選項指定秒數(shù)來調(diào)整寬限期。當(dāng)我們想讓進程完成重要的請求時,時間選項對這樣的實例可能是非常重要的,HTTP就是這種情況。
我們也可以使用docker kill命令,它直接發(fā)送SIGKILL。它不會給容器進程優(yōu)雅地退出的機會,但它讓我們可以向容器進程發(fā)送除SIGKILL之外的其他東西。
現(xiàn)在,容器停止了,讓我們刪除容器并再次執(zhí)行ps -a,如圖7-25所示。
圖7-25 被刪除的容器
注意,容器已經(jīng)被完全刪除,ps -a命令中已經(jīng)沒有任何蹤跡。
7.1.11 docker inspect
docker inspect命令提供了關(guān)于容器或鏡像的底層、深入的信息:
docker inspect [Options] Container ID/Image讓我們在MySQL容器上運行這個命令,如圖7-26所示。回想一下,fcb85434597b是之前示例的容器ID:
docker inspect fcb85434597b圖7-26 docker inspect的結(jié)果
注意,這個命令返回了包含所有信息的完整的JSON數(shù)組。我們還可以指定其他格式或者查詢某些特定信息,如數(shù)據(jù)庫名、IP地址和端口信息。
下面這一命令將返回數(shù)據(jù)庫名:
docker inspect –format='{{.Name}}' fcb85434597b下面這一命令將返回MySQL容器的IP地址:
docker inspect > –format='{{.NetworkSettings.IPAddress}}' fcb85434597b7.1.12 docker exec
docker exec命令可以在已經(jīng)運行的容器中遠程運行命令:
docker exec [Options] Container ID Command [Arg...]讓我們在Ubuntu容器中運行這個命令,如圖7-27所示。c8b9770c88e9是之前示例的容器ID:
docker exec c8b9770c88e9 ls -a圖7-27 docker exec命令可以在已經(jīng)運行的容器中運行命令
7.1.13 docker rename
是否已經(jīng)厭倦了復(fù)制和粘貼容器ID?我們可以給容器起有意義的名字,這樣可以更容易記憶和分類。使用docker rename命令可以重新命名已經(jīng)運行的容器:
Usage: docker rename Container ID new_name讓我們重新給Ubuntu容器命名。先來查找已有的名字:
docker ps -a注意,在圖7-28中,容器當(dāng)前的名字是jolly_gates。
圖7-28 docker ps -a的結(jié)果
讓我們執(zhí)行rename命令:
docker rename e510f8e769fc Parminder注意,在圖7-29中,執(zhí)行rename命令改變了容器的名字。
圖7-29 容器重新命名成功
我們現(xiàn)在可以使用這個新名字運行其他各種命令,而不是使用8位數(shù)的ID,如圖7-30所示。
圖7-30 用新名字運行其他命令
7.1.14 docker cp
docker cp命令能夠在容器和運行容器的機器之間復(fù)制文件。下面的命令形式將文件從容器復(fù)制到本地機器:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH下面的命令形式將文件從本地機器復(fù)制到指定的容器:
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH讓我們用Ubuntu容器運行第一個命令。圖7-31展示了這個例子中要使用的sample.txt文件。
圖7-31 我們將使用的sample.txt文件
Parminder是之前示例的容器名,下面是復(fù)制文件的命令(見圖7-32):
docker cp Parminder:/var/sample.txt .圖7-32 將文件從Parminder容器復(fù)制到本地機器
現(xiàn)在讓我們嘗試將文件從本地機器復(fù)制到容器的命令。這里,我們使用本地機器上名為MyFile.txt的示例文件,如圖7-33所示。
圖7-33 將MyFile.txt文件從本地機器復(fù)制到容器
下面的命令將MyFile.txt文件復(fù)制到名為Parminder的容器中并存放在/var目錄下,如圖7-34所示。Parminder是之前示例中的容器名:
docker cp MyFile.txt Parminder:/var圖7-34 將MyFile.txt從本地機器復(fù)制到名為Parminder的容器的/var目錄下
7.1.15 docker pause/unpause
docker pause命令掛起指定容器內(nèi)的所有進程:
docker pause CONTAINER [CONTAINER...]在Linux中,這個命令使用了cgroups的freezer。docker unpause命令讓容器再次運行:
docker unpause CONTAINER [CONTAINER...]讓我們用Ubuntu容器運行docker pause命令,如圖7-35所示。Parminder是之前示例的容器名:
docker pause Parminder圖7-35 用Ubuntu容器運行docker pause命令
我們剛剛暫停了容器,有效地暫停了其中所有進程。嘗試在容器內(nèi)運行命令,會發(fā)現(xiàn)與圖7-36所示的類似情況。
圖7-36 嘗試在已暫停的容器內(nèi)運行命令
讓我們?nèi)∠麜和?#xff08;見圖7-37):
docker unpause Parminder圖7-37 取消暫停的容器
由于我們剛剛?cè)∠萜鞯臅和?#xff0c;因此所有進程又再次恢復(fù)運行。掛起的ls命令(處于等待狀態(tài))也完成了運行,如圖7-38所示。
圖7-38 掛起的ls命令,之前處于等待狀態(tài),現(xiàn)在完成了執(zhí)行
7.1.16 docker create
docker create命令在指定鏡像之上創(chuàng)建可寫的容器層并為運行指定的命令做好準(zhǔn)備:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]容器ID會作為結(jié)果輸出。這個命令與運行docker run -d的細(xì)微差別在于容器并沒有啟動。接下來可以使用docker start命令啟動容器。例如,當(dāng)IT團隊想要預(yù)先搭建一個容器,以便在準(zhǔn)備好上線時可以隨時啟動的時候,這種創(chuàng)建容器卻推遲啟動的能力是很方便的。
讓我們創(chuàng)建一個新容器(見圖7-39):
docker create -t -i fedora bash圖7-39 新創(chuàng)建的容器
注意,這個容器被創(chuàng)建了但并未啟動。
7.1.17 docker commit
docker commit命令簡單但卻非常重要——它容許用容器的更改來創(chuàng)建新鏡像:
docker commit{Options} Container [Repository:Tag]當(dāng)對容器進行了修改并且想將其作為新鏡像發(fā)送給另一個開發(fā)者或測試團隊時,這個命令可以從運行的容器創(chuàng)建新鏡像。
7.1.18 docker diff
docker diff命令是另一個重要命令,它的功能不言而喻——列出容器文件系統(tǒng)中變化的文件和目錄:
docker diff Container ID隨著時間推移,當(dāng)對容器進行了修改時,這個命令會突出顯示文件系統(tǒng)相對于基礎(chǔ)鏡像的差異。
本文摘自《微服務(wù)與容器》
本書作者長期擔(dān)任系統(tǒng)架構(gòu)和工程團隊的領(lǐng)導(dǎo)者,他在本書中分析了兩個最熱的新技術(shù)趨勢——微服務(wù)和容器。正如作者所展示的,微服務(wù)和Docker容器能夠為應(yīng)用開發(fā)和部署帶來的敏捷性和伸縮性,特別是在速度是關(guān)鍵而小錯誤可能帶來災(zāi)難性后果的復(fù)雜的大型項目中。
為了便于讀者學(xué)習(xí)如何利用微服務(wù)和Docker 來驅(qū)動模塊化架構(gòu)設(shè)計、按需擴展、應(yīng)用性能和可靠性、上市時間、代碼復(fù)用以及DevOps 效能的指數(shù)級提升,作者不但提供了從單體架構(gòu)遷移的詳細(xì)指導(dǎo)和完整路線圖,而且提供了一個帶領(lǐng)讀者了解企業(yè)級SOA 系統(tǒng)遷移的深入的案例研究。
本書對軟件架構(gòu)師/開發(fā)者、希望繼續(xù)堅持使用舊方法的系統(tǒng)專業(yè)人員以及嘗試*大化這些技術(shù)的業(yè)務(wù)價值的管理者,都是很寶貴的參考資料。
- 理解微服務(wù)如何能夠讓使用者將應(yīng)用組織到易于管理、更新和擴展的獨立組件中。
- 決定微服務(wù)和容器是否值得投入并管理與它們相關(guān)的組織學(xué)習(xí)曲線。
- 應(yīng)用微服務(wù)之間進程間通信的*佳實踐。
- 以有序的方式遷移單體系統(tǒng)。
- 理解Docker 容器,了解Docker的安裝和Docker接口。
- 網(wǎng)絡(luò)、編排和有效地管理Docker容器。
- 使用Docker*大化基于微服務(wù)的應(yīng)用的擴展性。
- 通過深入、動手的案例研究來應(yīng)用所學(xué)。
總結(jié)
以上是生活随笔為你收集整理的mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word 打印技巧大全,打印文档必须要掌
- 下一篇: 技术选型方案怎么写_活动运营方案怎么写?