亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一條命令重啟所有已停止的docker容器操作

 更新時(shí)間:2020年11月20日 11:46:15   作者:生命的清香  
這篇文章主要介紹了一條命令重啟所有已停止的docker容器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一條命令重啟所有已停止的docker容器

docker ps -a | grep Exited

查看所有已停止的容器

docker ps -a | grep Exited | awk ‘{print $1}'

獲取已停止容器的ID

docker ps -a | grep Exited | awk ‘{print $1}' |xargs docker start

把獲取到的已停止容器的ID傳送給容器啟動(dòng)命令

一條命令停止所有運(yùn)行中的docker容器

docker ps -a | grep Up | awk ‘{print $1}' |xargs docker stop

補(bǔ)充知識(shí):Docker學(xué)習(xí)筆記:獲取鏡像&啟動(dòng)容器&停止容器

獲取鏡像

默認(rèn)情況下,使用docker pull命令,會(huì)從官方的Docker Hub庫(kù)中將鏡像拉取到本地。

首先介紹這條命令的格式:

docker pull [OPTIONS] <倉(cāng)庫(kù)名>:<標(biāo)簽>

其中:

docker pull:Docker拉取鏡像的命令關(guān)鍵詞;

[OPTIONS]:命令選項(xiàng);

倉(cāng)庫(kù)名:倉(cāng)庫(kù)名的格式一般為<用戶(hù)名>/<軟件名>。對(duì)于Docker Hub,如果不指定用戶(hù)名,則默認(rèn)為library,即官方鏡像;

標(biāo)簽:標(biāo)簽是區(qū)分鏡像不同版本的一個(gè)重要參數(shù),<倉(cāng)庫(kù)名>:<標(biāo)簽>會(huì)唯一確定一個(gè)鏡像。默認(rèn)為latest。

例如,我們要從Docker Hub官方倉(cāng)庫(kù)拉取一個(gè)Ubuntu 14.04的官方鏡像,其語(yǔ)句如下:

docker pull ubuntu:14.04

docker pull命令背后的工作

首先,如果tag值為空,即沒(méi)有指定標(biāo)簽,就會(huì)使用默認(rèn)tag,也就是latest,如果tag值不為空,就使用指定的tag。

然后,默認(rèn)情況下,會(huì)在Docker Hub中尋找名為“repoName”的倉(cāng)庫(kù),如果倉(cāng)庫(kù)不存在,返回錯(cuò)誤信息。如果倉(cāng)庫(kù)存在,就從倉(cāng)庫(kù)中拉取對(duì)應(yīng)tag的鏡像。例如:如果執(zhí)行docker pull ubuntu:14.04,那么將從“ubuntu”倉(cāng)庫(kù)中拉取tag為14.04的鏡像,而如果執(zhí)行docker pull ubuntu,會(huì)從“ubuntu”倉(cāng)庫(kù)中拉取tag為latest的鏡像。

(在Docker Hub中有很多個(gè)鏡像倉(cāng)庫(kù),一般情況下會(huì)將同一類(lèi)型的鏡像放在同一個(gè)倉(cāng)庫(kù)中,例如在一個(gè)ubuntu倉(cāng)庫(kù)中由很多個(gè)ubuntu鏡像組成,包括ubuntu:14.04、ubuntu:16.04、ubuntu:latest等等鏡像)。

最后,將拉取的鏡像存儲(chǔ)到本地的指定位置。

設(shè)置鏡像加速器

由于“偉大的墻”的原因,在國(guó)內(nèi)從Docker Hub中拉取鏡像的速度可能會(huì)比較慢,國(guó)內(nèi)很多云服務(wù)商都提供了鏡像加速器服務(wù),例如阿里、網(wǎng)易等等。

以Linux系統(tǒng)配置阿里云加速器為例,只需要將下面的命令復(fù)制到Linux的終端,以root用戶(hù)的身份執(zhí)行之后,就成功的配置了阿里云加速器了!

#以root用戶(hù)執(zhí)行以下操作

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{#下面的URL可以替換為你自己的阿里云加速地址
"registry-mirrors": ["https://jxus37ad.mirror.aliyuncs.com "]
}
EOF
systemctl daemon-reload
systemctl restart docker

啟動(dòng)容器

在拉取到一個(gè)鏡像之后,也就為容器準(zhǔn)備了運(yùn)行環(huán)境。

啟動(dòng)容器有兩種方式,一種是基于鏡像新建一個(gè)容器并啟動(dòng),另外一個(gè)是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動(dòng)。

第一種方式:新建并啟動(dòng)

docker run命令會(huì)基于指定的鏡像創(chuàng)建一個(gè)容器并且啟動(dòng)它。docker run的基本語(yǔ)法如下:

docker run [OPTIONS] 鏡像名 [COMMAND] [ARG]

其中:

docker run: Docker創(chuàng)建并啟動(dòng)容器的命令關(guān)鍵詞;

OPTIIONS: 命令選項(xiàng),最常用的包括-d后臺(tái)運(yùn)行容器并返回容器ID,-i以交互模式運(yùn)行容器,-t為容器分配一個(gè)偽輸入終端,–name指定啟動(dòng)容器的名稱(chēng)。更多選項(xiàng)請(qǐng)參考Docker幫助文檔;

鏡像名: 以<倉(cāng)庫(kù)名>:<標(biāo)簽>的方式來(lái)指定;

COMMAND: 設(shè)置啟動(dòng)命令,該命令在容器啟動(dòng)后執(zhí)行;

ARG: 其他一些參數(shù)。

docker run背后的工作

Docker在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載啟動(dòng);

利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器;

分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫(xiě)層;

從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去;

從地址池配置一個(gè)ip地址給容器;

執(zhí)行用戶(hù)指定的啟動(dòng)命令;

執(zhí)行完畢后容器被終止。

docker run實(shí)例一

創(chuàng)建并啟動(dòng)一個(gè)容器,容器中具有ubuntu的運(yùn)行環(huán)境,輸出hello docker。

只需要一條命令:docker run ubuntu:14.04 echo ‘hello docker',問(wèn)題就解決了。

首先由于本地不存在ubuntu:14.04鏡像,所以先到Docker Hub中下載鏡像;(其實(shí)也就是先執(zhí)行docker pull ubuntu:14.04)

然后在下載完鏡像之后,使用鏡像創(chuàng)建。由于一個(gè)ubuntu鏡像包含了一個(gè)ubuntu系統(tǒng)的所有內(nèi)容,使用鏡像啟動(dòng)后,容器中就具備了ubuntu的運(yùn)行環(huán)境了。

啟動(dòng)容器后,執(zhí)行echo 'hello docker'啟動(dòng)命令,執(zhí)行完啟動(dòng)命令之后終止容器。

docker run實(shí)例二

創(chuàng)建并啟動(dòng)一個(gè)容器,容器中具有ubuntu的運(yùn)行環(huán)境,容器名為firstContainer,為容器分配一個(gè)終端,與用戶(hù)進(jìn)行交互。

其中,-i選項(xiàng)告訴Docker保持標(biāo)準(zhǔn)輸入輸出流對(duì)容器開(kāi)放,-t選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上。–name為容器設(shè)置容器名。

注意docker run是創(chuàng)建一個(gè)新容器并啟動(dòng),所以這條命令創(chuàng)建的容器與上個(gè)實(shí)例的創(chuàng)建的容器不是同一個(gè)容器。而且由于本地已經(jīng)存在ubuntu:latest鏡像了,所以并不需要再次從Docker Hub中下載,而是直接使用本地的ubuntu:latest鏡像構(gòu)建容器。

啟動(dòng)容器之后,我們進(jìn)入容器內(nèi)部并在終端進(jìn)行與容器交互。我們可以根據(jù)左側(cè)的命令提示符判斷自己是否在容器內(nèi)部。例如上面的例子,當(dāng)左側(cè)的命令提示符為root@localhost時(shí),表示我們?cè)谌萜魍獠?,而命令提示符為:root@fe263c9359dd/時(shí),表示我們?cè)谌萜鲀?nèi)部,且容器的ID是fe263c9359dd。我們可以通過(guò)exit退出當(dāng)前的容器。

第二種方式:?jiǎn)?dòng)一個(gè)已經(jīng)終止的容器

雖然Docker容器是非常輕量的,這意味著一般情況下,我們?cè)趩?dòng)完容器并完成操作之后都會(huì)將容器刪除掉。但是有些時(shí)候我們會(huì)進(jìn)入之前創(chuàng)建的容器,而docker run每次都會(huì)創(chuàng)建一個(gè)新容器,顯然不符合我們的需求。這種時(shí)候,可以使用docker start命令,使用容器名或者容器id啟動(dòng)一個(gè)已經(jīng)終止的容器。

docker start [OPTIONS] 容器 [容器2...]

其中:

docker start: Docker啟動(dòng)容器的命令關(guān)鍵詞;

OPTIIONS: 命令選項(xiàng);

容器: 需要啟動(dòng)的容器,該容器用“容器ID”或“容器名”表示,如果指定了多個(gè)容器,那么就將這些容器都啟動(dòng)。

假設(shè)一個(gè)名為firstContainer的容器處于終止?fàn)顟B(tài),現(xiàn)在需要將它啟動(dòng),可以這么做:執(zhí)行docker start firstContainer,命令執(zhí)行后,嘗試啟動(dòng)firstContainer容器,并執(zhí)行該容器的啟動(dòng)命令。

但是如果想啟動(dòng)第一個(gè)實(shí)例創(chuàng)建的容器,既不知道容器的名字(因?yàn)槲覜](méi)有指定)而且也不知道它的id。該怎么辦呢?

查看容器信息

Docker中有這樣一條命令docker ps,可以查看容器的信息,包括容器ID,基礎(chǔ)鏡像,啟動(dòng)命令,創(chuàng)建時(shí)間,當(dāng)前狀態(tài),端口號(hào),容器名字。

如果不加任何參數(shù),只執(zhí)行docker ps,將會(huì)顯示所有運(yùn)行中的容器。例如執(zhí)行docker ps,如下圖所示,在當(dāng)前的Docker環(huán)境中,只有一個(gè)正在運(yùn)行的容器,它的容器Id是fe263c9359dd,基于ubuntu:latest鏡像,啟動(dòng)命令為“/bin/bash”,創(chuàng)建時(shí)間為2分鐘之前,當(dāng)前狀態(tài)為“Up 2 minutes”,也就是已經(jīng)運(yùn)行了2分鐘了,容器名為:firstContainer。

而如果docker ps –a命令,可以查看Docker環(huán)境中所有的容器,包括已經(jīng)停止的容器。執(zhí)行docker ps –a后,如下圖所示:除了名為firstContainer的容器外,還可以看到一個(gè)id為ee826f1d58ff的容器容器(容器id隨機(jī)生成)。但是這個(gè)容器的當(dāng)前狀態(tài)為Exited (0) 3 minutes ago,這表示它是處于終止?fàn)顟B(tài)的,而且是在3分鐘前退出的。

對(duì)于這個(gè)處于終止?fàn)顟B(tài)的容器,可以通過(guò)docker start ee826f1d58ff或者docker start g\fracious_lewin啟動(dòng)該容器了。

實(shí)際情況中,使用docker start ee826f1d58ff去啟動(dòng)第一個(gè)實(shí)例的容器,然后使用docker ps查看,會(huì)看不到該容器。這也就是說(shuō)明了在執(zhí)行docker ps時(shí),容器Id為ee826f1d58ff的容器并不是處于運(yùn)行狀態(tài),而是處于終止?fàn)顟B(tài)。

docker ps的執(zhí)行結(jié)果如下所示:容器Id為ee826f1d58ff的容器的當(dāng)前狀態(tài)為Exited (0) 2 seconds ago?。。∵@表示ee826f1d58ff容器確實(shí)處于終止?fàn)顟B(tài),但是它是2秒之前退出的,注意是2秒前!這表明2秒前啟動(dòng)過(guò)容器,但是由于某種原因,容器終止了??!

實(shí)際情況下,執(zhí)行docker start ee826f1d58ff啟動(dòng)容器id為ee826f1d58ff的容器了??!但是在執(zhí)行完啟動(dòng)命令之后,該容器就立即結(jié)束了。

停止容器

使用docker stop停止一個(gè)容器

docker stop可以用來(lái)終止一個(gè)正在運(yùn)行的容器。它的命令格式如下:

docker stop [OPTIONS] Container [Container ...]

其中:

docker stop: Docker停止容器的命令關(guān)鍵詞;

OPTIONS:命令選項(xiàng),其中-t指定等待多少秒后如果容器還沒(méi)終止,就強(qiáng)行停止,默認(rèn)等待10秒;

Container:需要啟動(dòng)的容器,該容器用“容器ID”或“容器名”表示,如果指定了多個(gè)容器,那么就將這些容器都啟動(dòng)。

例如想要停止一個(gè)名為firstContainer 的容器,可以這么執(zhí)行docker stop firstContainer。該命令執(zhí)行完之后,firstContainer將會(huì)處于終止?fàn)顟B(tài)。終止?fàn)顟B(tài)的容器,可以使用docker ps –a查看到。

實(shí)際工作中,執(zhí)行docker stop可能并不會(huì)立即終止容器,而是需要等待一段時(shí)間。

容器實(shí)際上是一個(gè)進(jìn)程。而執(zhí)行docker stop之后,首先會(huì)向容器的主進(jìn)程發(fā)送一個(gè)SIGTERM信號(hào),讓主進(jìn)程釋放資源保存狀態(tài),嘗試自己終止。但當(dāng)?shù)却龝r(shí)間超過(guò)了-t設(shè)置的時(shí)間后,會(huì)向容器的主進(jìn)程發(fā)送一個(gè)SIGKILL信號(hào),使容器立即終止。

在什么情況下容器啟動(dòng)后會(huì)立即終止?

實(shí)際情況中,除了使用docker stop命令來(lái)強(qiáng)制地終止一個(gè)容器以外,當(dāng)容器的啟動(dòng)命令終結(jié)時(shí),容器也自動(dòng)會(huì)終止。

以docker run --name testcontainer ubuntu echo 'hello docker'為例,echo 'hello docker'就是該容器的啟動(dòng)命令。實(shí)際上執(zhí)行完這條命令后,執(zhí)行docker ps -a,可以發(fā)現(xiàn)testcontainer容器是處于終止?fàn)顟B(tài)的,如下所示:

[root@localhost Desktop]# docker run --name testcontainer ubuntu echo 'hello docker'
hello docker
[root@localhost Desktop]# docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS      PORTS    NAMES
da14116bf641  ubuntu    "echo 'hello docker'" 6 seconds ago  Exited (0) 4 seconds ago      testcontainer

在容器啟動(dòng)時(shí),會(huì)執(zhí)行容器的啟動(dòng)命令。而執(zhí)行上述命令創(chuàng)建并啟動(dòng)容器后,由于容器的啟動(dòng)命令echo 'hello docker'會(huì)立刻執(zhí)行完畢,所以容器也隨之終止,因此使用docker ps -a查看該容器的狀態(tài)是終止?fàn)顟B(tài)。

Docker容器是一個(gè)進(jìn)程,實(shí)際上它以sh作為主進(jìn)程。如果主進(jìn)程停止了,那么容器也就停止了。而如果容器的“啟動(dòng)命令”執(zhí)行完之后,由于主進(jìn)程沒(méi)有命令繼續(xù)執(zhí)行,所以主進(jìn)程會(huì)停止,容器也就因此而停止了。

如何才能使容器啟動(dòng)后不立即終止?

如果容器的sh主進(jìn)程不停止,是不是以為這容器就不會(huì)停止?答案是肯定的。因此,如果使啟動(dòng)命令不能執(zhí)行完畢,或者在執(zhí)行完啟動(dòng)命令后,容器的sh主進(jìn)程不停止,那么容器在啟動(dòng)后就不會(huì)立即終止了!

下面舉兩個(gè)能使容器啟動(dòng)后不立即停止的例子:

將啟動(dòng)命令設(shè)置為死循環(huán)

docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

這條命令在創(chuàng)建并啟動(dòng)容器之后,會(huì)執(zhí)行/bin/sh -c “while true; do echo hello world; sleep 1; done”,由于該命令永遠(yuǎn)都不會(huì)執(zhí)行完畢,除非強(qiáng)行終止,所以容器的主進(jìn)程sh不會(huì)停止,因此容器也將不會(huì)停止。但是這樣的做的話,無(wú)法正常的操作容器,而且它會(huì)占據(jù)資源,所以這種做法在實(shí)際的工作中意義并不大。

將啟動(dòng)命令設(shè)置為“啟動(dòng)一直運(yùn)行的子進(jìn)程”

docker run --name first_container -it ubuntu /bin/bash

執(zhí)行完這條命令后,創(chuàng)建并啟動(dòng)容器之后,執(zhí)行/bin/bash,會(huì)啟動(dòng)一個(gè)子進(jìn)程,此時(shí)父進(jìn)程(也就是容器的主進(jìn)程sh)會(huì)進(jìn)入sleep狀態(tài),由于sleep狀態(tài)不是終止?fàn)顟B(tài),所以容器會(huì)繼續(xù)運(yùn)行。

為什么在容器中輸入exit或者執(zhí)行ctrl D后,容器將會(huì)終止呢,這是因?yàn)閑xit會(huì)退出(結(jié)束)當(dāng)前進(jìn)程,也就是/bin/bash,由于子進(jìn)程結(jié)束,sh主進(jìn)程恢復(fù)到運(yùn)行態(tài),然而由于沒(méi)有命令需要繼續(xù)執(zhí)行,所以sh主進(jìn)程結(jié),因此容器終止。

以上這篇一條命令重啟所有已停止的docker容器操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker firewalld 防火墻設(shè)置方式

    docker firewalld 防火墻設(shè)置方式

    在CentOS7中,Docker默認(rèn)修改防火墻配置,可能導(dǎo)致手動(dòng)添加的策略失效,解決方法包括啟用firewalld,禁用Docker的iptables,并重新配置防火墻策略,具體步驟包括編輯/etc/docker/daemon.json文件,重啟Docker服務(wù),以及在firewalld中設(shè)置偽裝地址和端口策略
    2024-10-10
  • docker打包node項(xiàng)目的過(guò)程講解

    docker打包node項(xiàng)目的過(guò)程講解

    今天小編就為大家分享一篇關(guān)于docker打包node項(xiàng)目的過(guò)程講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • docker-compose部署zk+kafka+storm集群的實(shí)現(xiàn)

    docker-compose部署zk+kafka+storm集群的實(shí)現(xiàn)

    這篇文章主要介紹了docker-compose部署zk+kafka+storm集群,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用docker部署hadoop集群的詳細(xì)教程

    使用docker部署hadoop集群的詳細(xì)教程

    這篇文章主要介紹了使用docker部署hadoop集群的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值需要的朋友可以參考下
    2020-09-09
  • docker使用storage出現(xiàn)Exit導(dǎo)致文件無(wú)法上傳服務(wù)器的問(wèn)題及解決方案

    docker使用storage出現(xiàn)Exit導(dǎo)致文件無(wú)法上傳服務(wù)器的問(wèn)題及解決方案

    這篇文章主要介紹了docker使用storage出現(xiàn)Exit導(dǎo)致文件無(wú)法上傳服務(wù)器解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 如何使用docker部署lnmp多站點(diǎn)

    如何使用docker部署lnmp多站點(diǎn)

    本文給大家介紹如何使用docker部署lnmp多站點(diǎn),創(chuàng)建一個(gè) Docker 網(wǎng)絡(luò)以便容器可以在同一網(wǎng)絡(luò)上進(jìn)行通信,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • 詳解Docker鏡像提交命令commit的工作原理和使用方法

    詳解Docker鏡像提交命令commit的工作原理和使用方法

    這篇文章主要介紹了詳解Docker鏡像提交命令commit的工作原理和使用方法,可以依據(jù)這個(gè)容器創(chuàng)建本地鏡像,并可把這個(gè)鏡像推送到Docker hub中,以便在網(wǎng)絡(luò)上下載使用,感興趣的可以了解一下
    2018-11-11
  • Docker實(shí)現(xiàn)安裝ELK(單節(jié)點(diǎn))

    Docker實(shí)現(xiàn)安裝ELK(單節(jié)點(diǎn))

    這篇文章主要介紹了Docker實(shí)現(xiàn)安裝ELK(單節(jié)點(diǎn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Docker容器化spring boot應(yīng)用詳解

    Docker容器化spring boot應(yīng)用詳解

    本篇文章主要介紹了Docker容器化spring boot應(yīng)用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Docker鏡像瘦身大小從1.43 GB減少到22.4MB

    Docker鏡像瘦身大小從1.43 GB減少到22.4MB

    本文主要介紹了 Docker鏡像瘦身大小從1.43 GB減少到22.4MB,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論