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

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

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

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

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

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