【腾讯面试题】Docker
摘自:https://www.runoob.com/docker/docker-tutorial.html
Docker
Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
Docker 從 17.03 版本之后分為 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。
Docker的應用場景
-
Web 應用的自動化打包和發布。
-
自動化測試和持續集成、發布。
-
在服務型環境中部署和調整數據庫或其他的后臺應用。
-
從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
Docker的優點
Docker 是一個用于開發,交付和運行應用程序的開放平臺。Docker 使您能夠將應用程序與基礎架構分開,從而可以快速交付軟件。借助 Docker,您可以與管理應用程序相同的方式來管理基礎架構。通過利用 Docker 的方法來快速交付,測試和部署代碼,您可以大大減少編寫代碼和在生產環境中運行代碼之間的延遲。
1.快速一致的交付應用程序
Docker 允許開發人員使用您提供的應用程序或服務的本地容器在標準化環境中工作,從而簡化了開發的生命周期。
容器非常適合持續集成和持續交付(CI / CD)工作流程,請考慮以下示例方案:
您的開發人員在本地編寫代碼,并使用 Docker 容器與同事共享他們的工作。他們使用 Docker 將其應用程序推送到測試環境中,并執行自動或手動測試。當開發人員發現錯誤時,他們可以在開發環境中對其進行修復,然后將其重新部署到測試環境中,以進行測試和驗證。測試完成后,將修補程序推送給生產環境,就像將更新的鏡像推送到生產環境一樣簡單。
2.響應式部署和擴展
Docker 是基于容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,數據中心的物理或虛擬機上,云服務上或混合環境中運行。
Docker 的可移植性和輕量級的特性,還可以使您輕松地完成動態管理的工作負擔,并根據業務需求指示,實時擴展或拆除應用程序和服務。
3.在同一硬件上運行更多工作負載
Docker 輕巧快速。它為基于虛擬機管理程序的虛擬機提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker 非常適合于高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。
Docker的架構
Docker包括三個基本概念:
- 鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
- 容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
- 倉庫(Repository):倉庫可看成一個代碼控制中心,用來保存鏡像。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
Docker 容器通過 Docker 鏡像來創建。
容器與鏡像的關系類似于面向對象編程中的對象與類。
| 容器 | 對象 |
| 鏡像 | 類 |
| Docker 鏡像(Images) | Docker鏡像是用于創建Docker容器的模板,比如Ubuntu系統。 |
| Docker 容器(Container) | 容器是獨立運行的一個或一組應用,是鏡像運行時的實體。 |
| Docker 客戶端(Client) | Docker 客戶端通過命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 與 Docker 的守護進程通信。 |
| Docker 主機(Host) | 一個物理或者虛擬的機器用于執行 Docker 守護進程和容器。 |
| Docker倉庫(Registry) | Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。Docker Hub(https://hub.docker.com) 提供了龐大的鏡像集合供使用。一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。 |
| Docker Machine | Docker Machine是一個簡化Docker安裝的命令行工具,通過一個簡單的命令行即可在相應的平臺上安裝Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Docker的使用
Docker HelloWorld
Docker 允許你在容器內運行應用程序, 使用 docker run 命令來在容器內運行一個應用程序。
輸出Hello world
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world" Hello world各個參數解析:
-
docker: Docker 的二進制執行文件。
-
run: 與前面的 docker 組合來運行一個容器。
-
ubuntu:15.10 指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。
-
/bin/echo “Hello world”: 在啟動的容器里執行的命令
以上命令完整的意思可以解釋為:Docker 以 ubuntu15.10 鏡像創建一個新容器,然后在容器里執行 bin/echo “Hello world”,然后輸出結果。
啟動容器(后臺模式)
使用以下命令創建一個以進程方式運行的容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63在輸出中,我們沒有看到期望的 “hello world”,而是一串長字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
這個長字符串叫做容器 ID,對每個容器來說都是唯一的,我們可以通過容器 ID 來查看對應的容器發生了什么。
首先,我們需要確認容器有在運行,可以通過 docker ps 來查看:
runoob@runoob:~$ docker ps CONTAINER ID IMAGE COMMAND ... 5917eac21c36 ubuntu:15.10 "/bin/sh -c 'while t…" ...輸出詳情介紹:
-
CONTAINER ID: 容器 ID。
-
IMAGE: 使用的鏡像。
-
COMMAND: 啟動容器時運行的命令。
-
CREATED: 容器的創建時間。
-
STATUS: 容器狀態。
狀態有7種:
- created(已創建)
- restarting(重啟中)
- running 或 Up(運行中)
- removing(遷移中)
- paused(暫停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的連接類型(tcp\udp)。
NAMES: 自動分配的容器名稱。
在宿主主機內使用 docker logs 命令,查看容器內的標準輸出:
runoob@runoob:~$ docker logs 2b1b7a428627停止容器
我們使用 docker stop 命令來停止容器:
通過 docker ps 查看,容器已經停止工作:
可以看到容器已經不在了。
總結
以上是生活随笔為你收集整理的【腾讯面试题】Docker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LC]783题 二叉搜索树结点最小距离
- 下一篇: 001、JAVA开发环境安装与eclip