日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典

發布時間:2023/12/19 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讀者可以將下面的命令綱要當作成功使用Docker必須掌握的公認寶典——從搜索和構建鏡像到創建自己的Dockerfile。我們先看一些簡單的命令,然后在此基礎上接觸更復雜的命令。

7.1.1 docker search

docker search命令能夠在Docker CLI上運行,以搜索Docker注冊中心中可用的鏡像:

docker search [options] term

基于圖形界面的客戶端也提供了搜索功能。

在圖7-1展示的例子中,docker search mysql返回所有鏡像名字中包含“mysql”的鏡像。正如所見到的,它返回了前25個結果。基于圖形界面的搜索提供了相似的結果,如圖7-2所示。

圖7-1 Docker搜索“mysql”的結果

圖7-2 基于圖形界面搜索“mysql”的結果

盡管像dockerizedrupal這樣的一些結果是唯一的,但多數結果是重復的,因為這些鏡像被不同用戶上傳,這些用戶將鏡像用于定制或者用于進行集成。當使用-s選項時,搜索只提供被廣泛使用(基于其他用戶的反饋)的文件:

docker search –s 50 mysql

該命令會返回鏡像名中包含“mysql”并且反饋至少有50顆星的所有鏡像,如圖 7-3所示。

圖7-3 鏡像名字中有“mysql”并且反饋至少有50顆星的搜索結果

在這種情況下,只列出兩條,因為超過50評級的只有兩條。

注意 Docker一直以驚人的速度發展,因此命令、選項甚至特性和功能都在不同版本之間頻繁變化。例如,在編寫本書時,搜索的-s被廢棄了,取而代之的是必須使用稱為--filter的標志。對于filter選項,列出所有評價星級超過50顆的所有MySQL鏡像的命令會是docker search --filter stars=50 mysql

7.1.2 docker pull

docker pull命令將請求的鏡像從Docker注冊中心下載到本地機器:

docker pull image:tag

例如,如圖7-4所示,docker pull mysql從注冊中心拉取MySQL鏡像。如果沒有指定版本之類的標簽,這個命令默認會附加“latest”標簽,而不是拉取所有可用的MySQL鏡像。這個命令等價于

docker pull MySQL:latest

圖7-4 docker pull從注冊中心拉取MySQL的latest鏡像

7.1.3 docker images

docker images命令返回本地機器上可用的頂層鏡像列表:

docker images[options]

例如,docker images-a展示所有頂層鏡像列表,包括它們的倉庫、標簽、創建日期和虛擬尺寸,如圖7-5所示,但它沒有展示中間層的鏡像。

圖7-5 docke images-a命令展示所有頂層鏡像列表,包括它們的倉庫、標簽、創建日期和虛擬尺寸

要記住的一件重要的事情是,當在本地機器上創建或構建Docker鏡像時,也創建了各種中間層。例如,如果使用包含多個命令的Dockerfile構建鏡像,則執行的每個命令都會產生一個鏡像層,這是Docker的關鍵方面之一,這使容器輕量并且非常適合復用。

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

下載(拉取)了鏡像之后,下一步就是執行(運行)鏡像,這正是docker run命令所要做的事情:

docker run [options] image: tag [command, args]

這個命令使用容器自己的文件系統、端口和IP地址啟動容器。我們還可以用一個或多個參數給run命令傳遞一些選項。下面是一些常用選項:

i切換到STDIN打開的交互模式;

t分配一個偽tty控制臺終端。

docker run命令還有許多其他選項,例如,以分離(-d)狀態(后臺)啟動進程,也就是說,容器會啟動但不監聽命令行。我們可以指定命令來覆蓋想要運行的鏡像自身的默認命令,也可以指定CPU和內存方面的運行時約束。

舉個例子,讓我們拉取Ubuntu鏡像并執行run命令(見圖7-7):

docker pull ubuntu:latest

圖7-7 從Docker Hub倉庫下載Ubuntu鏡像

該命令將最新的Ubuntu鏡像拉取到本地主機上,如圖7-8所示。

圖7-8 拉取的最新Ubuntu鏡像

現在,讓我們用i和t選項在本地主機上運行Ubuntu。我們還指明了我們想要運行shell進程:

docker run –it ubuntu sh

現在我們在本地機器上運行了一個帶有shell提示符入口的Ubuntu容器。從這里,我們可以運行我們想要的任何shell命令。圖7-9展示了幾個簡單的例子。例如:

echo 'Learning Docker';

ls;

cd bin(為了查看bin目錄的內容)。

圖7-9 運行交互式shell

正如所見,bin目錄有系統運轉所需的關鍵程序。

7.1.6 docker ps

docker ps命令列出所有正在運行的容器(見圖7-10):

docker ps [Options]

記住,每個容器運行且只運行一個進程。在這個例子中,沒有正在運行的容器,因此展示了一個空列表。

圖7-10 docker ps命令顯示了所有當前正在運行的容器

讓我們用-a選項再次運行ps命令,如圖7-11所示,以查看所有容器,甚至是那些沒有運行的容器。

圖7-11 -a選項將不活躍的容器混合到結果中

正如所見,由于退出了shell提示符,Ubuntu容器不再運行或活躍,但是它并沒有被刪除,只是不活躍而已。如果愿意,我們可以重啟容器,我們很快就會學到。

7.1.7 docker logs

docker ogs命令提供了指定容器的日志文件,該日志文件包含了容器的標準輸出(stdout和stderr):

docker logs [Options] Container

這一命令僅適用于帶有JSON文件日志驅動的容器。舉個例子,讓我們用下面的命令運行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

復制運行的Ubuntu容器的容器ID。現在,我們可以執行log命令來查看這個特定容器的日志(見圖7-14):

docker log eded3539719c

我們能夠看到日志的內容,在這個例子中是已經執行的命令的歷史。

圖7-14 執行log命令來查看容器的日志

舉一個更復雜的例子。讓我們先下載并創建MySQL容器。

首先,拉取最新的MySQL鏡像(見圖7-15):

docker pull MySQL: latest

圖7-15 拉取的最新MySQL鏡像

下一步,使用run命令創建MySQL容器(見圖7-16),并記錄容器ID:

docker run --name myDatabase > -e MySQL_ROOT_PASSWORD=myPassword > -d MySQL:latest

這里,name是數據庫名,e是指定數據庫密碼的環境變量的標志,docker run命令的d選項以分離模式啟動進程。

圖7-16 運行MySQL容器

接下來,驗證容器進程:

docker ps

注意,容器啟動并運行起來,如圖7-17所示。

圖7-17 驗證容器進程

現在容器已經啟動并運行起來,我們需要連接它。我們首先要知道的是端口。盡管我們知道默認端口是什么,但我們還是通過運行logs命令來檢查一下日志文件:

docker logs fcb85434597b

這里,fcb85434597b是之前啟動的容器的容器ID(見圖7-18)。

圖7-18 運行logs命令

如圖7-19所示,我們看到MySQL的版本和正在監聽的端口。請再次注意,Docker日志展示了容器的stdout和stderr的信息,不要將其與MySQL的標準日志文件混淆。

圖7-19 MySQL的版本及正在監聽的端口

注意 另一個檢查容器正在監聽什么端口的方法是查看docker ps輸出。如果你有留意,圖7-18中有一個PORTS列顯示了3306/tcp,這表明MySQL將監聽3306端口。

7.1.8 docker restart

docker restart命令會重啟指定的容器:

docker restart [Options] Container ID (s)

讓我們通過指定容器ID來重啟Ubuntu容器,前面的例子中該容器ID是c8b9770c88e9,如圖7-20所示。

圖7-20 重啟Ubuntu容器

如果再次運行ps命令,應該會看到一個活動的容器,如圖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提示符交互

注意,命令提示符回來了,我們可以繼續了。另一個重要的方面是,無論什么時候重啟這個容器,我們總是會得到shell提示符。我們無法改變其行為,因為這是最初在run命令中使用-it啟動容器的方式。不過我們肯定可以使用不同的選項、參數和命令再次運行相同的Ubuntu鏡像。這正是Docker的美妙之處。

7.1.10 docker rm

docker rm命令會刪除一個或多個指定的容器:

docker rm [Options] Container(s)

例如,讓我們嘗試刪除Ubuntu容器。在刪除容器前必須停止容器,或者使用-f(強制)選項直接刪除容器,這實際上會給容器內運行的進程發送SKGKILL,然后將容器刪除:

docker stop [Options] Container(s)

圖7-23展示了Ubuntu容器的狀態。Ubuntu容器處于運行狀態,并已經運行了38個小時,如狀態屬性所示。

圖7-23 Ubuntu容器的狀態

讓我們運行stop命令并再次執行ps`` -``a,如圖7-24所示。

圖7-24 運行stop命令并再次執行ps -a

正如所見,容器不再運行,狀態是以代碼137退出,這意味著容器收到了SIGKILL命令。stop命令會在一定的寬限期之后發送SIGTERM和SIGKILL。我們可以用-t選項指定秒數來調整寬限期。當我們想讓進程完成重要的請求時,時間選項對這樣的實例可能是非常重要的,HTTP就是這種情況。

我們也可以使用docker kill命令,它直接發送SIGKILL。它不會給容器進程優雅地退出的機會,但它讓我們可以向容器進程發送除SIGKILL之外的其他東西。

現在,容器停止了,讓我們刪除容器并再次執行ps -a,如圖7-25所示。

圖7-25 被刪除的容器

注意,容器已經被完全刪除,ps -a命令中已經沒有任何蹤跡。

7.1.11 docker inspect

docker inspect命令提供了關于容器或鏡像的底層、深入的信息:

docker inspect [Options] Container ID/Image

讓我們在MySQL容器上運行這個命令,如圖7-26所示。回想一下,fcb85434597b是之前示例的容器ID:

docker inspect fcb85434597b

圖7-26 docker inspect的結果

注意,這個命令返回了包含所有信息的完整的JSON數組。我們還可以指定其他格式或者查詢某些特定信息,如數據庫名、IP地址和端口信息。

下面這一命令將返回數據庫名:

docker inspect –format='{{.Name}}' fcb85434597b

下面這一命令將返回MySQL容器的IP地址:

docker inspect > –format='{{.NetworkSettings.IPAddress}}' fcb85434597b

7.1.12 docker exec

docker exec命令可以在已經運行的容器中遠程運行命令:

docker exec [Options] Container ID Command [Arg...]

讓我們在Ubuntu容器中運行這個命令,如圖7-27所示。c8b9770c88e9是之前示例的容器ID:

docker exec c8b9770c88e9 ls -a

圖7-27 docker exec命令可以在已經運行的容器中運行命令

7.1.13 docker rename

是否已經厭倦了復制和粘貼容器ID?我們可以給容器起有意義的名字,這樣可以更容易記憶和分類。使用docker rename命令可以重新命名已經運行的容器:

Usage: docker rename Container ID new_name

讓我們重新給Ubuntu容器命名。先來查找已有的名字:

docker ps -a

注意,在圖7-28中,容器當前的名字是jolly_gates。

圖7-28 docker ps -a的結果

讓我們執行rename命令:

docker rename e510f8e769fc Parminder

注意,在圖7-29中,執行rename命令改變了容器的名字。

圖7-29 容器重新命名成功

我們現在可以使用這個新名字運行其他各種命令,而不是使用8位數的ID,如圖7-30所示。

圖7-30 用新名字運行其他命令

7.1.14 docker cp

docker cp命令能夠在容器和運行容器的機器之間復制文件。下面的命令形式將文件從容器復制到本地機器:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

下面的命令形式將文件從本地機器復制到指定的容器:

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

讓我們用Ubuntu容器運行第一個命令。圖7-31展示了這個例子中要使用的sample.txt文件。

圖7-31 我們將使用的sample.txt文件

Parminder是之前示例的容器名,下面是復制文件的命令(見圖7-32):

docker cp Parminder:/var/sample.txt .

圖7-32 將文件從Parminder容器復制到本地機器

現在讓我們嘗試將文件從本地機器復制到容器的命令。這里,我們使用本地機器上名為MyFile.txt的示例文件,如圖7-33所示。

圖7-33 將MyFile.txt文件從本地機器復制到容器

下面的命令將MyFile.txt文件復制到名為Parminder的容器中并存放在/var目錄下,如圖7-34所示。Parminder是之前示例中的容器名:

docker cp MyFile.txt Parminder:/var

圖7-34 將MyFile.txt從本地機器復制到名為Parminder的容器的/var目錄下

7.1.15 docker pause/unpause

docker pause命令掛起指定容器內的所有進程:

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命令

我們剛剛暫停了容器,有效地暫停了其中所有進程。嘗試在容器內運行命令,會發現與圖7-36所示的類似情況。

圖7-36 嘗試在已暫停的容器內運行命令

讓我們取消暫停(見圖7-37):

docker unpause Parminder

圖7-37 取消暫停的容器

由于我們剛剛取消容器的暫停,因此所有進程又再次恢復運行。掛起的ls命令(處于等待狀態)也完成了運行,如圖7-38所示。

圖7-38 掛起的ls命令,之前處于等待狀態,現在完成了執行

7.1.16 docker create

docker create命令在指定鏡像之上創建可寫的容器層并為運行指定的命令做好準備:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

容器ID會作為結果輸出。這個命令與運行docker run -d的細微差別在于容器并沒有啟動。接下來可以使用docker start命令啟動容器。例如,當IT團隊想要預先搭建一個容器,以便在準備好上線時可以隨時啟動的時候,這種創建容器卻推遲啟動的能力是很方便的。

讓我們創建一個新容器(見圖7-39):

docker create -t -i fedora bash

圖7-39 新創建的容器

注意,這個容器被創建了但并未啟動。

7.1.17 docker commit

docker commit命令簡單但卻非常重要——它容許用容器的更改來創建新鏡像:

docker commit{Options} Container [Repository:Tag]

當對容器進行了修改并且想將其作為新鏡像發送給另一個開發者或測試團隊時,這個命令可以從運行的容器創建新鏡像。

7.1.18 docker diff

docker diff命令是另一個重要命令,它的功能不言而喻——列出容器文件系統中變化的文件和目錄:

docker diff Container ID

隨著時間推移,當對容器進行了修改時,這個命令會突出顯示文件系統相對于基礎鏡像的差異。

本文摘自《微服務與容器》

本書作者長期擔任系統架構和工程團隊的領導者,他在本書中分析了兩個最熱的新技術趨勢——微服務和容器。正如作者所展示的,微服務和Docker容器能夠為應用開發和部署帶來的敏捷性和伸縮性,特別是在速度是關鍵而小錯誤可能帶來災難性后果的復雜的大型項目中。

為了便于讀者學習如何利用微服務和Docker 來驅動模塊化架構設計、按需擴展、應用性能和可靠性、上市時間、代碼復用以及DevOps 效能的指數級提升,作者不但提供了從單體架構遷移的詳細指導和完整路線圖,而且提供了一個帶領讀者了解企業級SOA 系統遷移的深入的案例研究。

本書對軟件架構師/開發者、希望繼續堅持使用舊方法的系統專業人員以及嘗試*大化這些技術的業務價值的管理者,都是很寶貴的參考資料。

  • 理解微服務如何能夠讓使用者將應用組織到易于管理、更新和擴展的獨立組件中。
  • 決定微服務和容器是否值得投入并管理與它們相關的組織學習曲線。
  • 應用微服務之間進程間通信的*佳實踐。
  • 以有序的方式遷移單體系統。
  • 理解Docker 容器,了解Docker的安裝和Docker接口。
  • 網絡、編排和有效地管理Docker容器。
  • 使用Docker*大化基于微服務的應用的擴展性。
  • 通過深入、動手的案例研究來應用所學。

總結

以上是生活随笔為你收集整理的mysql执行shell命令_关键Docker命令:使用Docker必须掌握的公认宝典的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。