如何使用 Docker 部署容器
設(shè)想,為了推出一個網(wǎng)站,您不必從裸機(jī)安裝一個完整的服務(wù)器。 而不是安裝操作系統(tǒng),然后安裝服務(wù)器軟件,然后部署精心設(shè)計(jì)的應(yīng)用程序或站點(diǎn),您可以簡單地在一個獨(dú)立的包中開發(fā)所有內(nèi)容,并使用單個命令將其推出。
這是使用容器的眾多好處之一。它們使開發(fā)和部署周期變得異常高效。但是你如何部署這些容器?我想在這里指導(dǎo)你完成這個過程。我們將專注于在Ubuntu Server 18.04上部署基本的NGINX Web服務(wù)器作為容器。所有這一切都將在Docker的幫助下完成。
一、您需要什么?
為了成功將NGINX部署為容器,您需要具備以下條件:
- 一個安裝了Docker的Ubuntu Server 18.04的運(yùn)行實(shí)例。
- 一個docker 用戶組的成員用戶
是的,有了這兩部分,你就準(zhǔn)備好了。
二、溫馨提示
您部署的每個容器都將基于從DockerHub中提取的鏡像。 您可以下拉單個鏡像并根據(jù)需要隨時使用。 DockerHub上還有許多鏡像用于單個應(yīng)用程序或平臺。 以NGINX為例。 如果你在DockerHub上搜索NGINX,你會得到大約56,172個條目。 這并不意味著每個條目都是您可以使用的可用圖像。
圖像命名如下:
- name/descriptive-name
例如,對于NGINX,您可能會找到一個名字為的鏡像:
- bitwarden/nginx (a reverse proxy NGINX image)
或許你可能找到:
- nginx/nginx-ingress (NGINX Ingress controller for Kubernetes)
您也看到了,有幾乎所有需要的鏡像。
目前,您只需關(guān)注一個鏡像。 該圖像是NGINX的官方發(fā)布版本。
三、拉取鏡像
在使用圖像之前,必須將其保存在本地驅(qū)動器上。 有兩種方法可以做到這一點(diǎn):
- 直接使用pull命令
- 間接地,在容器部署過程中。
要從DockerHub中拉取圖像,您將打開一個終端窗口并發(fā)出命令:
- docker pull nginx
如果你想拉取Ingress圖像,該命令是:
- docker pull nginx/nginx-ingress
當(dāng)你拉取你需要的圖像之后,你可以使用命令確認(rèn)是否存在:
- docker images
上面的命令將列出你拉取的所有鏡像(圖A)。

圖A:NGINX和nginx / nginx都是可用鏡像。
拉取隨意圖像時要謹(jǐn)慎。 為什么? 因?yàn)槟阌肋h(yuǎn)不知道創(chuàng)造它們的原因。 容器可能包含惡意代碼,可能會對您的網(wǎng)絡(luò)或數(shù)據(jù)造成嚴(yán)重破壞。 因此,***只使用官方圖像(例如NGINX圖像)。
四、部署容器
現(xiàn)在該部署容器了, 如果您尚未拉取鏡像,則在部署階段將下拉所需要的鏡像。 由于我們拉取官方NGINX圖像,我們將使用它。
要部署容器,請使用docker命令,如下所示:
- docker run --name NAME -p PORTS IMAGE
備注:
- NAME等于您要為容器提供的名稱(這可以是任何內(nèi)容,例如nginx-webserver)。
- PORTS您要使用的端口(以NETWORK PORT:CONTAINER PORT形式)。
- IMAGE用于容器的圖像(例如nginx)。
因此,部署NGINX容器的基本命令是:
- docker run --name nginx-webserver -p 80:80 nginx
容器將要部署,NGINX Web服務(wù)器將在端口80上可用于本地網(wǎng)絡(luò)。但是,如果已在服務(wù)器上使用端口80來部署容器,該怎么辦? 您可以將其部署在網(wǎng)絡(luò)端口8080上,如下所示:
- docker run --name nginx-webserver -p 8080:80 nginx
此時,您可能會看到下一個問題。 運(yùn)行上述命令之一后,不返回bash提示符(圖B)。

圖B:容器在訪問NGINX驅(qū)動的站點(diǎn)時給我們反饋信息,但它沒有給我們提示符。
五、分離模式
你如何運(yùn)行一個容器,并獲得你的bash提示? 為此,您必須以分離模式運(yùn)行容器。 在此之前,您必須使用鍵盤組合[Ctrl] +終止當(dāng)前容器。 該組合將返回提示并殺死容器。
要確定容器是否運(yùn)行,使用命令:
- docker ps -a
將列出所有容器及其狀態(tài)(圖C)。

如果容器仍在運(yùn)行,我們必須在同一端口部署另一個容器之前將其終止(否則端口會發(fā)生沖突,從而阻止容器部署)。 要?dú)⑺勒谶\(yùn)行的容器,首先需要Container ID(隨機(jī)字符串)。 發(fā)出docker ps -a命令時會顯示此字符串。 要終止正在運(yùn)行的容器,使用命令:
- docker stop CONTAINER_ID
其中CONTAINER_ID是相關(guān)容器的ID。
然后,您可以使用以下命令刪除容器:
- docker rm CONTAINER_ID
其中CONTAINER_ID是相關(guān)容器的ID。
請注意,您不必輸入完整的Container ID,字符串的前四個字符就足夠了。
現(xiàn)在,要以分離模式部署容器,命令是:
- docker run --name nginx-webserver -p 80:80 -d nginx
這次你不僅會得到你的提示,而且Docker會為你顯示容器ID(圖D)。

圖D:我們的NGINX容器,以分離模式運(yùn)行。
六、訪問運(yùn)行中的容器
如果你想在正在運(yùn)行的容器上工作怎么辦? 假設(shè)您想對NGINX進(jìn)行更改甚至開始開發(fā)它將顯示的網(wǎng)站? 因此,您必須訪問容器。 因此,您需要Container ID。 使用ID,發(fā)出命令:
- docker exec -it CONTAINER_ID bash
其中CONTAINER_ID是容器的ID。
您現(xiàn)在應(yīng)該處于運(yùn)行容器提示符(圖E)中,您可以在其中開始處理NGINX服務(wù)器。

圖E:NGINX容器提示,準(zhǔn)備工作。
要退出容器,只需鍵入命令exit。
七、比你想象的容易
希望到現(xiàn)在為止,您看到容器部署并不像您想象的那樣具有挑戰(zhàn)性。 在Docker的幫助下,您可以在幾分鐘內(nèi)推出專業(yè)版的應(yīng)用和服務(wù)。