什麼是Docker?
Docker 是世界領先的軟體容器平臺。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。運維人員利用 Docker 可以在隔離容器中並行執行和管理應用,獲得更好的計算密度。企業利用 Docker 可以構建敏捷的軟體交付管道,以更快的速度、更高的安全性和可靠的信譽為 Linux 和 Windows Server 應用釋出新功能。
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。它是目前最流行的 Linux 容器解決方案。Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。
總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。
為什麼要使用Docker
容器除了執行其中應用外,基本不消耗額外的系統資源,使得應用的效能很高,同時系統的開銷儘量小。傳統虛擬機器方式執行 10 個不同的應用就要起 10 個虛擬機器,而Docker只需要啟動 10 個隔離的應用即可。
具體說來,Docker 在如下幾個方面具有較大的優勢。
1、更快速的交付和部署
對開發和運維(devop)人員來說,最希望的就是一次建立或配置,可以在任意地方正常執行。開發者可以使用一個標準的映象來構建一套開發容器,開發完成之後,運維人員可以直接使用這個容器來部署程式碼。 Docker 可以快速建立容器,快速迭代應用程式,並讓整個過程全程可見,使團隊中的其他成員更容易理解應用程式是如何建立和工作的。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。
2、更高效的虛擬化
Docker 容器的執行不需要額外的 hypervisor 支援,它是核心級的虛擬化,因此可以實現更高的效能和效率。
3、更輕鬆的遷移和擴充套件
Docker 容器幾乎可以在任意的平臺上執行,包括物理機、虛擬機器、公有云、私有云、個人電腦、伺服器等。 這種相容性可以讓使用者把一個應用程式從一個平臺直接遷移到另外一個。
4、更簡單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理。
相關概念
Docker是CS架構,主要有兩個概念:
- Docker daemon: 執行在宿主機上,Docker守護程式,使用者通過Docker client(Docker命令)與Docker daemon互動
- Docker client: Docker 命令列工具,是使用者使用Docker的主要方式,Docker client與Docker daemon通訊並將結果返回給使用者,Docker client也可以通過socket或者RESTful api訪問遠端的Docker daemon
瞭解了Docker的組成,再來了解一下Docker的三個主要概念:
- Docker image(映象):映象是隻讀的,映象中包含有需要執行的檔案。映象用來建立container,一個映象可以執行多個container;映象可以通過Dockerfile建立,也可以從Docker hub/registry上下載。
- Docker container(容器):容器是Docker的執行元件,啟動一個映象就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程式執行在一個相對安全的環境中。
- Docker hub/registry(倉庫): 共享和管理Docker映象,使用者可以上傳或者下載上面的映象,官方地址為
https://registry.hub.docker.com/
,也可以搭建自己私有的Docker registry。
映象就相當於打包好的版本,映象啟動之後執行在容器中,倉庫就是裝儲存映象的地方。
常用命令
檢視當前系統Docker資訊
docker info
拉取映象,docker pull [映象名稱[:版本]],如:docker pull tomcat:7
docker pull tomcat:7
檢視映象
docker images
刪除映象,-f選項強制刪除。
docker rmi image_id
清理所有未打過標籤的本地映象:
# docker rmi $(docker images -q -f "dangling=true") 其中 -q 和 -f 是 quiet,–filter 的縮寫, 完整的命令其實可以寫著下面這樣,是不是更容易理解一點? # docker rmi $(docker images --quiet --filter "dangling=true") 注: 容器是否會長久執行,是和docker run指定的命令有關,和 -d 引數無關。
線上查詢映象:docker search + [你想查詢的映象關鍵字],如:
docker search tomcat
-----------------------------------映象end,容器start-----------------------------------
建立一個容器
docker run hello-world
步驟:
1.Docker客戶端連線到守護程式
2.Docker守護程式從Docker Hub拉取了hello-world映象
3.Docker守護程式從該映象建立了一個容器,來執行了命令並輸出了我們當前看的這條訊息
4.Docker守護程式將容器中的標準輸出轉發到你的終端。
docker在執行一個容器時,首先會檢查本地是否存在指定的映象,如果有,則直接執行,如果沒有,才會去Docker Hub上拉取。這也就是命令結果第一行為什麼會顯示Unable
to find image 'hello-world:latest' locally
的原因。
docker run -d --name myapp -v D:\docker:/usr/local/tomcat/webapps -p 8888:8080 tomcat:7
-d:指定容器在後臺執行
–name:用於指定容器的名稱
-p:8888:8080 用於將容器內的8080埠對映到主機的8888埠
檢視當前有哪些容器正在執行,-a檢視所有
docker ps -a
停止、啟動、重啟容器
docker stop tomcat
docker start tomcat
docker restart tomcat
刪除容器
docker rm tomcat
檢視容器日誌
docker logs -f tomcat
exec進入Docker容器,/bin/bash:表示執行的command
C:\Windows\system32>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a89b0987dbc tomcat:7 "catalina.sh run" 18 hours ago Up 18 hours 0.0.0.0:8888->8080/tcp myapp C:\Windows\system32>docker exec -it 5a89b0987dbc /bin/bash root@5a89b0987dbc:/usr/local/tomcat# ls BUILDING.txt LICENSE README.md RUNNING.txt conf lib native-jni-lib webapps CONTRIBUTING.md NOTICE RELEASE-NOTES bin include logs temp work root@5a89b0987dbc:/usr/local/tomcat#
exec執行某一個命令ls /
D:\docker>docker exec -it 5a89b0987dbc ls /
bin dev etc lib media opt root sbin sys usr
boot docker-java-home home lib64 mnt proc run srv tmp var
將映象匯出:
docker save -o tomcat.tar tomcat
將本地包匯入到映象中:
docker load --input tomcat.tar
參考文章:http://www.ityouknow.com/docker/2018/03/07/docker-introduction.html