如何使用 Docker 部署容器

2022-02-03 雲技術

設想,為了推出一個網站,您不必從裸機安裝一個完整的伺服器。 而不是安裝作業系統,然後安裝伺服器軟體,然後部署精心設計的應用程式或站點,您可以簡單地在一個獨立的包中開發所有內容,並使用單個命令將其推出。

這是使用容器的眾多好處之一。它們使開發和部署周期變得異常高效。但是你如何部署這些容器?我想在這裡指導你完成這個過程。我們將專注於在Ubuntu Server 18.04上部署基本的NGINX Web伺服器作為容器。所有這一切都將在Docker的幫助下完成。

一、您需要什麼?

為了成功將NGINX部署為容器,您需要具備以下條件:

- 一個安裝了Docker的Ubuntu Server 18.04的運行實例。

- 一個docker 用戶組的成員用戶

是的,有了這兩部分,你就準備好了。

二、溫馨提示

您部署的每個容器都將基於從DockerHub中提取的鏡像。 您可以下拉單個鏡像並根據需要隨時使用。 DockerHub上還有許多鏡像用於單個應用程式或平臺。 以NGINX為例。 如果你在DockerHub上搜索NGINX,你會得到大約56,172個條目。 這並不意味著每個條目都是您可以使用的可用圖像。

圖像命名如下:

<em>name/descriptive-name</em>

例如,對於NGINX,您可能會找到一個名字為的鏡像:

bitwarden/nginx (a reverse proxy NGINX image)

或許你可能找到:

nginx/nginx-ingress (NGINX Ingress controller for Kubernetes)

您也看到了,有幾乎所有需要的鏡像。

目前,您只需關注一個鏡像。 該圖像是NGINX的官方發布版本。

三、拉取鏡像

在使用圖像之前,必須將其保存在本地驅動器上。 有兩種方法可以做到這一點:

- 直接使用pull命令

- 間接地,在容器部署過程中。

要從DockerHub中拉取圖像,您將打開一個終端窗口並發出命令:

如果你想拉取Ingress圖像,該命令是:

docker pull nginx/nginx-ingress

當你拉取你需要的圖像之後,你可以使用命令確認是否存在:

上面的命令將列出你拉取的所有鏡像(圖A)。

圖A:NGINX和nginx / nginx都是可用鏡像。

拉取隨意圖像時要謹慎。 為什麼? 因為你永遠不知道創造它們的原因。 容器可能包含惡意代碼,可能會對您的網絡或數據造成嚴重破壞。 因此,最好只使用官方圖像(例如NGINX圖像)。

四、部署容器

現在該部署容器了, 如果您尚未拉取鏡像,則在部署階段將下拉所需要的鏡像。 由於我們拉取官方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] +終止當前容器。 該組合將返回提示並殺死容器。

要確定容器是否運行,使用命令:

將列出所有容器及其狀態(圖C)。

如果容器仍在運行,我們必須在同一埠部署另一個容器之前將其終止(否則埠會發生衝突,從而阻止容器部署)。 要殺死正在運行的容器,首先需要Container ID(隨機字符串)。 發出docker ps -a命令時會顯示此字符串。 要終止正在運行的容器,使用命令:

其中CONTAINER_ID是相關容器的ID。

然後,您可以使用以下命令刪除容器:

其中CONTAINER_ID是相關容器的ID。

請注意,您不必輸入完整的Container ID,字符串的前四個字符就足夠了。

現在,要以分離模式部署容器,命令是:

docker run --name nginx-webserver -p 80:80 -d nginx

這次你不僅會得到你的提示,而且Docker會為你顯示容器ID(圖D)。


圖D:我們的NGINX容器,以分離模式運行。

六、訪問運行中的容器

如果你想在正在運行的容器上工作怎麼辦? 假設您想對NGINX進行更改甚至開始開發它將顯示的網站? 因此,您必須訪問容器。 因此,您需要Container ID。 使用ID,發出命令:

docker exec -it CONTAINER_ID bash

其中CONTAINER_ID是容器的ID。

您現在應該處於運行容器提示符(圖E)中,您可以在其中開始處理NGINX伺服器。

圖E:NGINX容器提示,準備工作。

要退出容器,只需鍵入命令exit。

七、比你想像的容易

希望到現在為止,您看到容器部署並不像您想像的那樣具有挑戰性。 在Docker的幫助下,您可以在幾分鐘內推出專業版的應用和服務。

原文連結:

相關閱讀:

容器基礎知識:如何提交對 Docker 鏡像的更改

吐血總結:最為詳細的Docker入門指南

中小團隊基於Docker的DevOps實踐

Docker:物理機vs虛擬機,五方面詳細對比!

基於Kubernetes和Docker構建微服務之路

Docker 所有最新版本中招!允許攻擊者獲得主機 root 訪問權限

RightScale 2019年雲狀況調查報告:35% 的雲支出被浪費「附50頁PDF下載」

2018年雲計算九大趨勢熱詞:Serverless、混合雲、多雲、中臺、邊緣計算等「附下載」

更多文章請關注

文章好看點這裡[在看]👇

相關焦點

  • docker-4:mac使用docker部署開發用rocketmq
    為了開發方便,有時需要在本地部署rocketmq,使用docker是一個高性價比的方式,故有此文。創建鏡像,我們使用cd image-buildsh build-image.sh RMQ-VERSION BASE-IMAGE我選擇的版本是4.7.1:sh build-image.sh 4.7.1 alpine時間比較長,耐心等待:docker images | grep -i rocketmq
  • 如何使用Elasticsearch和cAdvisor監控Docker容器
    容器數量與連接在 docker0 和 docker_gwbridge 上的虛擬網卡數量不一致(LCTT 譯註:當 docker 啟動時,它會在宿主機器上創建一個名為 docker0 的虛擬網絡接口)。 開啟和關閉 Swarm 節點。 收集併集中處理日誌。
  • 使用 Docker 讓部署 Django 項目更加輕鬆
    這樣我們在部署上線前,就可以在本地進行驗證,只要驗證沒問題,我們就有 99% 的把握保證部署上線後也沒有問題(1%保留給程序玄學)。這個辦法就是使用 Docker。Docker 是一種容器技術,可以為我們提供一個隔離的運行環境。
  • Docker應用之CockroachDB數據存儲:開發和部署容器的力量
    當你使用到Docker,你可以使用簡單的Dockerfiles來運行它。在這篇文章中,我將介紹一些我們正在使用的更先進和實用的架構,以及它們如何使我們的工作更簡單。特別的是,你不需要安裝任何程序就可以學習到如何部署Cockroach,並且在任何系統中部署可靠的、最小化的容器。
  • docker容器的啟動方式
    .持續交付和部署:Docker是build once,run everywhere. 使用Docker 可以通過定製應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過Dockerfile 來進行鏡像構建,並結合持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合持續部署(Continuous Delivery/Deployment) 系統進行自動部署。
  • 雲計算核心技術Docker教程:Docker容器使用
    要退出客戶端程序,直接輸入 exit:查看所有的容器命令如下:$ docker ps -a使用 docker start 啟動一個已停止的容器:$ docker start <容器 ID>$ docker run -itd --name ubuntu-test ubuntu /bin/bash要停止一個容器運行使用如下命令:$ docker stop <容器 ID>要重啟一個容器運行使用如下命令:
  • 148_通過部署NVIDIA Docker組件,實現在容器中使用vGPU/GPU設備
    我們今天來看一下如何通過NVIDIA Docker組件來實現Docker容器對GPU使用。
  • docker離線安裝及鏡像容器的導入導出
    二、鏡像容器的導入導出隨著容器技術的發展,現在很多的應用程式系統都會選擇使用docker容器進行部署,但是有時候使用docker容器進行部署的時候會遇到問題,比如說我們的應用程式裡面需要依賴其他第三方的鏡像,
  • 如何開始docker - docker架構及創建容器
    安裝docker很簡單,啟動服務以後要怎麼開始使用呢?docker的組成docker是採用C/S模式,使用遠程API來管理創建docker。容器的創建過程: 鏡像倉庫 ->pull 鏡像到本地 -> 本地鏡像 -> run容器 from 鏡像 -> 創建容器並執行程序->程序退出->容器退出1、dockerd服務端(守護進程),dockerd是docker的守護進程。
  • 用Docker部署SpringBoot應用程式
    Docker是一個用於創建容器的流行平臺--一組標準化的軟體單元,它們在單個包中組裝代碼、運行時、依賴項、設置和初始化,您可以從一個計算環境可靠地運行到另一個包。將應用程式部署為Docker容器可以幫助您在多個環境(即dev、QA、暫存、生產)中順利地行動應用程式。
  • Docker 容器的網絡
    如果你通過 Docker 提供的用戶指南,你應該已經完成了構建你的第一個 Docker 容器,並且運行了示例應用。你已經構建了你自己的鏡像(images)。本部分的內容將會指導你如何對你的容器進行網絡配置。
  • 使用Docker客戶端管理容器:這些命令必須知道
    【IT168 編譯】有時候,容器管理對於不熟悉這種技術的IT人員來說可能有點「可怕」。筆者希望通過這篇文章向大家解釋我們能夠如何管理和執行一些涉及容器管理的任務,使這個主題更清晰。
  • CoreOS實踐指南(七):Docker容器管理服務
    本文將主要介紹在具體的場景下,如何在CoreOS中恰當的管理Docker容器。當CoreOS 遇見 Docker這篇文章裡不會專門介紹Docker的使用,而是關注在具體的場景下,如何在CoreOS中恰當的管理Docker容器。
  • 前端如何玩轉 Docker 部署,請看這裡
    寫一個網站、學會 Vue.js 是很多人的「學習窗口」,只要離開了這個「學習窗口」,他們就不想學了:我都學這麼多了,草,怎麼最後還要學部署啊。所以,這篇文章就跟大家分享一下關於 Docker 部署的那些事。
  • Docker容器中使用GPU
    背景容器封裝了應用程式的依賴項,以提供可重複和可靠的應用程式和服務執行,而無需整個虛擬機的開銷。
  • docker容器dockerfile詳解
    REPOSITORY TAG IMAGE ID CREATED SIZEdockerhub.com/nginx v2 3b636c79fbfa 23 minutes ago 133MBnginx v1 3b636c79fbfa 23 minutes
  • Docker進階-容器監控cAdvisor+InfluxDB+Granfana
    概述前面文章介紹使用docker compose組合應用並利用scale快速對容器進行擴容。通過docker stats命令可以很方便的看到當前宿主機上所有容器的CPU,內存以及網絡流量等數據。但是docker stats命令的缺點就是統計的只是當前宿主機的所有容器,而獲取的監控數據是實時的,沒有地方存儲,也沒有報警功能。
  • ASP.NET Core容器化技術Docker零基礎從入門到實戰演練
    Core鏡像一、Docker執行Dockerfile的大致流程二 、如何採用Dockerfile將構建製作ASP.NET Core應用程式鏡像八、 Docker宿主機與容器之間實現網絡互聯1)、用一個實際測試方法來理解Docker容器與宿主機之間實現網絡互聯。
  • 容器到底是個啥?(附Docker學習資源匯總)
    (2)職責的邏輯分離使用 Docker,開發人員只需要關心容器中運行的應用程式,而運維人員只需要關心如何管理容器。除了默認的docker0網橋,用戶也可以指定網橋來連接各個容器。在啟動Docker服務的時候,使用-b BRIDGE或--bridge=BRIDGE來指定使用的網橋。
  • Docker入門知識|Docker資源容器 與 VM虛擬機的區別與聯繫
    使用Docker技術的優勢可以幫助企業快速地擴展服務,從而實現彈性部署計算業務的能力。在雲服務理念興起之後,Docker的使用場景和範圍進一步得到發展,如今微服務架構又流行起來,微服務+Docker再次成為完美組合,快速交付、快速布署、簡捷運維部署一股腦兒就落地了。