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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker 命令终极教程:8步走

發(fā)布時(shí)間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 命令终极教程:8步走 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Docker容器已經(jīng)從一種錦上添花的技術(shù)轉(zhuǎn)變成了部署環(huán)境的必需品。有時(shí),作為開(kāi)發(fā)人員,我們需要花費(fèi)大量時(shí)間調(diào)試或研究Docker工具來(lái)幫助我們提高生產(chǎn)力。每一次新技術(shù)浪潮來(lái)臨之際,我們都需要花費(fèi)大量時(shí)間學(xué)習(xí)。?

花費(fèi)1-2天的時(shí)間來(lái)設(shè)置Docker集群,或找出導(dǎo)致Docker容器啟動(dòng)失敗的代碼,你是不是也有過(guò)類似的經(jīng)歷?對(duì)于大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō),我們花費(fèi)在研究配置和找bug上的時(shí)間似乎都超過(guò)了實(shí)際推出新功能的時(shí)間,尤其是當(dāng)你所使用的環(huán)境仍然相對(duì)較新或尚未成熟時(shí)。

我們中的有些人并沒(méi)有那么走運(yùn),無(wú)法通過(guò)完善的CI/CD流程打造穩(wěn)定的環(huán)境。為此,我從各大主流Docker技術(shù)文檔網(wǎng)站上搜羅和整理出了這份日常工作最常使用的Docker命令教程。

詳盡的可選標(biāo)志和參數(shù)的詳細(xì)列表,請(qǐng)參閱Docker手冊(cè)https://docs.docker.com/engine/reference/commandline/cli/

提示:每個(gè)Docker命令都有內(nèi)置的文檔,比如鍵入docker run --help就可以得到幫助文檔。鍵入docker run --help將生成以下幫助文檔。

我希望本文可以幫助你擺脫調(diào)試和使用Docker的煩惱。閱讀各個(gè)命令時(shí),請(qǐng)注意命令的相關(guān)說(shuō)明。

Docker構(gòu)建?

$?docker?build?\
--build-arg?ARTIFACTORY_USERNAME=timothy.mugayi?\
--build-arg?ARTIFACTORY_SECRET_TOKEN=AP284233QnYX9Ckrdr7pUEY1F?\
--build-arg?LICENSE_URL='https://source.com/license.txt'?\
--no-cache??-t?helloworld:latest?.
你可以使用可選的構(gòu)建參數(shù)構(gòu)建Docker鏡像。在默認(rèn)情況下,Docker會(huì)緩存第一個(gè)Dockerfile構(gòu)建,或根據(jù)Dockerfile中的run命令向鏡像添加新層后的構(gòu)建,目的是加速后續(xù)構(gòu)建。

如果你不需要緩存,那么可以向上面的示例一樣添加一個(gè)不緩存的參數(shù)。

注意:Docker命令可以按名稱或Docker容器ID執(zhí)行。下述命令中的<CONTAINER>可以換成容器ID或容器名稱。

?

運(yùn)行Docker容器

$?docker?start?<CONTAINER>
?
啟動(dòng)一個(gè)已有的容器。我們假定該容器已經(jīng)下載并創(chuàng)建完畢。

$?docker?stop?<CONTAINER>
停止正在運(yùn)行的Docker容器。

$?docker?stop?$(docker?container?ls?-aq)
?
如果你有多個(gè)正在運(yùn)行的Docker容器,而且你想停止所有容器,那么可以輸入docker stop以及所有容器ID的列表。

$?docker?exec?-ti?<CONTAINER>?[COMMAND]?
在某個(gè)特定的容器內(nèi)運(yùn)行一個(gè)shell命令。?

$?docker?run?-ti?—?image?<IMAGE>?<CONTAINER>?[COMMAND]
Docker run 與 start 有著明顯的區(qū)別。從根本上說(shuō),Docker run 做了兩件事情:(1)創(chuàng)建一個(gè)鏡像的新容器;(2)執(zhí)行這個(gè)容器。如果你希望重新運(yùn)行失敗或退出的容器,請(qǐng)使用docker start命令。

$?docker?run?-ti?—?rm?—?image?<IMAGE>?<CONTAINER>?[COMMAND]?
這是一個(gè)很有趣的命令,旨在同時(shí)創(chuàng)建和啟動(dòng)容器。它還想在容器內(nèi)運(yùn)行命令,然后在命令執(zhí)行完成后刪除容器。

docker?run?-d??<IMAGE>:<IMAGE_TAG>
Usage:
??docker?run?-d??helloworld:latest
如果你希望在分離狀態(tài)中啟動(dòng)docker run命令(例如,作為L(zhǎng)inux的后臺(tái)守護(hù)程序),則可以在run命令最后添加-d。

$?docker?pause?<CONTAINER>
暫停某個(gè)特定容器內(nèi)所有正在運(yùn)行的進(jìn)程。

$?docker?ps?-a
上述命令將列出之前運(yùn)行的所有Docker鏡像。在找出你想運(yùn)行的鏡像后,可以執(zhí)行如下命令。請(qǐng)確保更改容器ID,以反映最初的docker ps -a命令顯示的結(jié)果。

sudo?docker?run?{container?ID}?-e?AWS_DEFAULT_REGION=us-east-1?\
e?INPUT_QUEUE_URL="https://sqs.us-east-1.amazonaws.com/my_input_sqs_queue.fifo"?\
e?REDIS_ENDPOINT="redis.dfasdf.0001.cache.amazonaws.com:8000"?\
e?ENV=dev?\
e?DJANGO_SETTINGS_MODULE=engine.settings?\
e?REDIS_HOST="cmgadsfv7avlq.us-east-1.redis.amazonaws.com"?\
e?REDIS_PORT=5439?\
e?REDIS_USER=hello?\
e?REDIS_PASSWORD=trasdf**#0ynpXkzg
上述命令展示了如何運(yùn)行帶有多個(gè)作為參數(shù)傳入的環(huán)境變量的Docker鏡像,\表示換行符。?

調(diào)試Docker容器

你可以使用docker ps獲取當(dāng)前正在運(yùn)行的容器名稱。?

$?docker?history?<IMAGE>
example?usage:
$?docker?history?my_image_name
上述命令可以顯示特定鏡像的歷史記錄。當(dāng)你想深入了解Docker鏡像時(shí),這些信息非常有用。讓我們深入討論一下,因?yàn)槟惴浅S斜匾私膺@個(gè)命令的功能,而有關(guān)該命令的文檔少之又少。

在我們談?wù)揇ocker時(shí),鏡像是建立在多層之上的,這些層是Docker鏡像的基礎(chǔ)。每個(gè)容器都包含一個(gè)可讀/可寫層的鏡像(你可以-將其視為持久狀態(tài)或文件)。在這之上才是其他只讀層。這些層(也稱為中間鏡像)是在執(zhí)行Docker鏡像的build命令時(shí),執(zhí)行Dockerfile中的命令時(shí)生成的。

如果你的Dockerfile中包含from、run和/或copy指令,那么build該鏡像時(shí),run指令就會(huì)用自己的鏡像ID創(chuàng)建一層。然后,該鏡像/層就會(huì)顯示在docker history中,而且還會(huì)顯示鏡像的ID以及生成日期。后續(xù)指令將生成另一個(gè)條目,依此類推。CREATED BY列大致對(duì)應(yīng)于Dockerfile中的一行。如下圖所示。

'docker history'命令的圖示

$?docker?images
?
列出當(dāng)前存儲(chǔ)在機(jī)器中的所有鏡像。

$?docker?inspect?<IMAGE|CONTAINER?ID>
Docker inspect將顯示有關(guān)特定Docker對(duì)象的低級(jí)信息。在調(diào)試的情況下, 存儲(chǔ)在該對(duì)象中的數(shù)據(jù)會(huì)非常有用,例如交叉檢查Docker掛載點(diǎn)。

請(qǐng)注意:該命令獲取兩個(gè)主要響應(yīng):鏡像級(jí)別的詳細(xì)信息和容器級(jí)別的詳細(xì)信息。你可以從該命令中獲取如下信息:

容器ID以及創(chuàng)建的時(shí)間戳

當(dāng)前狀態(tài)(在嘗試識(shí)別容器是否已停止以及為何停止時(shí)很有用)

Docker鏡像信息、文件系統(tǒng)綁定、卷信息以及掛載

環(huán)境變量,例如傳遞給容器的命令行參數(shù)

網(wǎng)絡(luò)配置:IPv4和IPv6的IP地址以及網(wǎng)關(guān)和輔助地址

$?docker?version?
這個(gè)命令顯示Docker的版本,包括計(jì)算機(jī)上當(dāng)前安裝的客戶端和服務(wù)器版本。?

沒(méi)錯(cuò),Docker是一個(gè)客戶端-服務(wù)器應(yīng)用程序。守護(hù)程序(長(zhǎng)期運(yùn)行的Linux后臺(tái)服務(wù))是服務(wù)器,CLI是眾多客戶端之一。Docker守護(hù)程序會(huì)公開(kāi)一個(gè)REST API,許多不同的工具可以通過(guò)該API與該守護(hù)程序進(jìn)行通信。

$?docker?version
Client:?Docker?Engine?-?Community
?Version:???????????19.03.5
?API?version:???????1.40
?Go?version:????????go1.12.12
?Git?commit:????????633a0ea
?Built:?????????????Wed?Nov?13?07:22:34?2019
?OS/Arch:???????????darwin/amd64
?Experimental:??????false
?
Server:?Docker?Engine?-?Community
?Engine:
??Version:??????????19.03.5
??API?version:??????1.40?(minimum?version?1.12)
??Go?version:???????go1.12.12
??Git?commit:???????633a0ea
??Built:????????????Wed?Nov?13?07:29:19?2019
??OS/Arch:??????????linux/amd64
??Experimental:?????false
?containerd:
??Version:??????????v1.2.10
??GitCommit:????????b34a5c8af56e510852c35414db4c1f4fa6172339
?runc:
??Version:??????????1.0.0-rc8+dev
??GitCommit:????????3e425f80a8c931f88e6d94a8c831b9d5aa481657
?docker-init:
??Version:??????????0.18.0
??GitCommit:????????fec3683
?
Docker版本輸出

這是如何設(shè)置客戶端-服務(wù)器體系結(jié)構(gòu)的圖像

AWS ECS上的Docker

有時(shí),你需要進(jìn)入運(yùn)行中的Docker容器,調(diào)試或交叉檢查配置是否正確。

你可以使用docker exec -it <container ID> /bin/bash來(lái)獲取shell訪問(wèn)權(quán)限。如果你想找出無(wú)法運(yùn)行的Docker鏡像,例如你想使用AWS ECS集群,則會(huì)收到一則晦澀難懂的錯(cuò)誤消息,如下所示。

坦白地說(shuō),引發(fā)這一錯(cuò)誤的原因多種多樣,例如

1)你的代碼有問(wèn)題,引發(fā)了未捕獲的異常,并且Docker容器在啟動(dòng)時(shí)宕機(jī);

2)在使用EC2實(shí)例上的ECS群集時(shí),出現(xiàn)了磁盤空間不足的情況,如果你的ECS的放置類型沒(méi)有選擇Fargate就會(huì)出現(xiàn)這種問(wèn)題;

3)你現(xiàn)有的Docker容器占用了所有EC2的可用內(nèi)存。

Essential?container?in?task?exited
?
執(zhí)行以下命令即可找出最近運(yùn)行失敗的Docker容器。如果你的賬號(hào)擁有sudo訪問(wèn)權(quán)限,請(qǐng)忽略sudo。你可以使用該命令,根據(jù)給定的輸出,通過(guò)重新運(yùn)行容器來(lái)查看其失敗的原因。

$?sudo?docker?ps?-a?--filter?status=dead?--filter?status=exited?--last?1


如有疑慮,重啟Docker服務(wù)

$?sudo?service?docker?stop
$?sudo?service?docker?start
#?on?a?MAC?you?an?use?the?docker?utilty?or?alternatively?run
$?killall?Docker?&&?open?/Applications/Docker.app
?相信無(wú)需進(jìn)一步的解釋。

?

清理Docker鏡像

?

$?docker?system?prune
Docker在清理未使用的對(duì)象(例如鏡像、容器、卷和網(wǎng)絡(luò))方面采取了保守的態(tài)度。

?除非你明確要求Docker刪除,否則通常不會(huì)刪除這些對(duì)象。因此,如果不刪除這些對(duì)象,那么很快就會(huì)占用大量空間。因此,定期運(yùn)行下述命令,清理未使用的Docker鏡像非常重要。

docker?kill?<CONTAINER>
殺死某個(gè)正在運(yùn)行的容器。

$?docker?kill?$(docker?ps?-q)
殺死所有正在運(yùn)行的容器。

$?docker?rm?<CONTAINER>?
刪除某個(gè)目前沒(méi)有運(yùn)行的容器。如果鏡像保存在遠(yuǎn)程鏡像庫(kù)中,那么不會(huì)受到影響。?

$?docker?rm?$(docker?ps?-a?-q):?
刪除所有沒(méi)有運(yùn)行的容器。

$?docker?logs?my_container?
訪問(wèn)容器的日志,在調(diào)試時(shí)非常有用。?

從遠(yuǎn)程鏡像庫(kù)中提取Docker鏡像?

1、Docker Hub

Docker Hub是Docker提供的一項(xiàng)服務(wù),用于查找和共享打開(kāi)的容器鏡像。?

如果你希望從Docker Hub將鏡像拉取到本地,那么只需在Docker run命令后面加上鏡像路徑即可。以下命令說(shuō)明了如何拉并運(yùn)行穩(wěn)定版本的Rocker鏡像

$?docker?run?--rm?-p?8787:8787?rocker/verse?
Docker首先會(huì)嘗試檢查本地計(jì)算機(jī)上是否有該鏡像。如果沒(méi)有,在從Docker Hub庫(kù)中下載鏡像,這個(gè)功能是開(kāi)箱即用的。

$?docker?pull?rocker/verse?
如果你只想拉取鏡像,而不想運(yùn)行鏡像,則只需運(yùn)行docker pull即可。

如果你想登錄Docker Hub,則可以運(yùn)行上述命令,然后輸入密碼即可。?

2、自定義 Docker 鏡像庫(kù)

$?docker?login?your.docker.host.com
Username:?foo
Password:?********
Email:?user@myemail.com
如果你想從某個(gè)需要身份驗(yàn)證的通用自定義Docker鏡像庫(kù)提取鏡像,則可以使用docker login命令,如上所示。請(qǐng)注意,執(zhí)行上述操作時(shí),會(huì)在~/.docker/config.json

文件中創(chuàng)建一個(gè)條目。修改~/.docker/config.json可以修改身份驗(yàn)證詳細(xì)信息。

3、亞馬遜ECR

亞馬遜ECR(Amazon Elastic Container Registry)是一個(gè)完全托管的Docker容器倉(cāng)庫(kù),允許開(kāi)發(fā)人員存儲(chǔ)、管理和部署Docker容器鏡像。亞馬遜ECR與ECS(Elastic Container Service)無(wú)縫協(xié)作。如果你需要從ECR提取鏡像,則可以參照如下命令。

你需要使用擁有AWS訪問(wèn)權(quán)限和密鑰的IAM用戶配置AWS CLI。

亞馬遜ECR要求IAM用戶訪問(wèn)秘鑰必須通過(guò)某個(gè)IAM策略賦予ecr:GetAuthorizationToken的權(quán)限,然后才能通過(guò)鏡像庫(kù)的驗(yàn)證并提取鏡像。另外,你可以利用亞馬遜ECR Docker Credential Helper實(shí)用程序。以下方法假定你使用的是AWS CLI,且已設(shè)置好所有權(quán)限。

$?aws?ecr?list-images?--repository-name=twitter-data-engine-core
$?aws?ecr?describe-images?—-?repository-name=twitter-data-engine-core
$?aws?ecr?get-login?—-?region?us-east-1?—-?no-include-email?
Get-login命令會(huì)生成一個(gè)長(zhǎng)的Docker登錄命令。你只需復(fù)制并執(zhí)行。當(dāng)然首先必須先進(jìn)行身份驗(yàn)證,然后才能嘗試從AWS ECR執(zhí)行Docker鏡像提取。

$?docker?login?-u?AWS?-p?{YOUR_TEMPORARY_TOKEN}
$?docker?pull?723123836077.dkr.ecr.us-east-1.amazonaws.com/twitter-data-engine-core:build-9


導(dǎo)入和導(dǎo)出Docker鏡像

$?docker?save?your_docker_image:latest?>?/usr/local/your_docker_image.tar
$?docker?load?<?/usr/local/your_docker_image.tar?
如果你有需要,并且想將鏡像導(dǎo)出到硬盤,并加載到Docker鏡像,那么就可以執(zhí)行上述命令。

如果你想通過(guò)另一種媒介(Docker鏡像庫(kù)之外),將Docker鏡像從一臺(tái)機(jī)器轉(zhuǎn)移到另一臺(tái)機(jī)器,那么導(dǎo)出到文件非常有用。由于安全性,在某些環(huán)境中你的訪問(wèn)可能會(huì)受到限制。你無(wú)法實(shí)施鏡像庫(kù)到鏡像庫(kù)的遷移,因此這是一個(gè)很實(shí)用的命令。

原文:https://medium.com/better-programming/the-ultimate-docker-command-list-d98ef300fe6d
?

總結(jié)

以上是生活随笔為你收集整理的Docker 命令终极教程:8步走的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。