使用Docker技術(shù)可以幫助企業(yè)快速水平擴展服務(wù),從而到達彈性部署業(yè)務(wù)的能力冒嫡。在云服務(wù)概念興起之后拇勃,Docker的使用場景和范圍進一步發(fā)展,如今在微服務(wù)架構(gòu)越來越流行的情況下孝凌,微服務(wù)+Docker的完美組合方咆,更加方便微服務(wù)架構(gòu)運維部署落地。
什么是Docker
Docker 屬于 Linux 容器的一種封裝蟀架,提供簡單易用的容器使用接口瓣赂。它是目前最流行的 Linux 容器解決方案。Docker 將應(yīng)用程序與該程序的依賴片拍,打包在一個文件里面煌集。運行這個文件,就會生成一個虛擬容器捌省。程序在這個虛擬容器里運行苫纤,就好像在真實的物理機上運行一樣。有了 Docker纲缓,就不用擔(dān)心環(huán)境問題卷拘。
docker的目標
- 提供簡單輕量的建模方式
- 職責(zé)的邏輯分離
- 快速高效的開發(fā)生命周期
- 鼓勵使用面向服務(wù)的架構(gòu)
docker的使用場景
- 使用docker容器開發(fā)測試,部署服務(wù)
- 創(chuàng)建隔離的運行環(huán)境
- 搭建測試環(huán)境
- 構(gòu)建多用戶的平臺即服務(wù)(PaaS)基礎(chǔ)設(shè)施
- 提供軟件即服務(wù)(SaaS)應(yīng)用程序
- 高性能色徘、超大規(guī)模的宿主機部署
為什么使用Docker
容器的啟動恭金、關(guān)閉操禀、重啟操作耗時一般在1-2秒以內(nèi)褂策,且每個容器除了運行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高斤寂。傳統(tǒng)虛擬機方式運行 10 個不同的應(yīng)用就要起 10 個虛擬機耿焊,而Docker 只需要啟動 10 個隔離的應(yīng)用即可。
作為一種新興的虛擬化方式遍搞,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢罗侯。
- 更高效的利用系統(tǒng)資源
由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷,Docker 對系統(tǒng)資源的利用率更高溪猿。無論是應(yīng)用執(zhí)行速度钩杰、內(nèi)存損耗或者文件存儲速度,都要比傳統(tǒng)虛擬機技術(shù)更高效诊县。因此讲弄,相比虛擬機技術(shù),一個相同配置的主機依痊,往往可以運行更多數(shù)量的應(yīng)用避除。
- 更快速的啟動時間
傳統(tǒng)的虛擬機技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用胸嘁,由于直接運行于宿主內(nèi)核瓶摆,無需啟動完整的操作系統(tǒng),因此可以做到秒級性宏、甚至毫秒級的啟動時間群井。大大的節(jié)約了開發(fā)、測試毫胜、部署的時間蝌借。
- 一致的運行環(huán)境
開發(fā)過程中一個常見的問題是環(huán)境一致性問題。由于開發(fā)環(huán)境指蚁、測試環(huán)境菩佑、生產(chǎn)環(huán)境不一致,導(dǎo)致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn)凝化。而 Docker 的鏡像提供了除內(nèi)核外完整的運行時環(huán)境稍坯,確保了應(yīng)用運行環(huán)境一致性,從而不會再出現(xiàn) 「這段代碼在我機器上沒問題啊」 這類問題搓劫。
- 持續(xù)交付和部署
對開發(fā)和運維人員來說瞧哟,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運行枪向。
使用 Docker 可以通過定制應(yīng)用鏡像來實現(xiàn)持續(xù)集成勤揩、持續(xù)交付、部署秘蛔。開發(fā)人員可以通過Dockerfile來進行鏡像構(gòu)建陨亡,并結(jié)合 持續(xù)集成(Continuous Integration)系統(tǒng)進行集成測試傍衡,而運維人員則可以直接在生產(chǎn)環(huán)境中快速部署該鏡像,甚至結(jié)合持續(xù)部署系統(tǒng)進行自動部署负蠕。
而且使用 Dockerfile
使鏡像構(gòu)建透明化蛙埂,不僅僅開發(fā)團隊可以理解應(yīng)用運行環(huán)境,也方便運維團隊理解應(yīng)用運行所需條件遮糖,幫助更好的生產(chǎn)環(huán)境中部署該鏡像绣的。
- 更輕松的遷移
由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應(yīng)用的遷移更加容易欲账。Docker 可以在很多平臺上運行屡江,無論是物理機、虛擬機赛不、公有云盼理、私有云,甚至是筆記本俄删,其運行結(jié)果是一致的宏怔。因此用戶可以很輕易的將在一個平臺上運行的應(yīng)用,遷移到另一個平臺上畴椰,而不用擔(dān)心運行環(huán)境的變化導(dǎo)致應(yīng)用無法正常運行的情況臊诊。
- 更輕松的維護和擴展
Docker 使用的分層存儲以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易斜脂,也使得應(yīng)用的維護更新更加簡單抓艳,基于基礎(chǔ)鏡像進一步擴展鏡像也變得非常簡單。此外帚戳,Docker 團隊同各個開源項目團隊一起維護了一大批高質(zhì)量的 官方鏡像玷或,既可以直接在生產(chǎn)環(huán)境使用,又可以作為基礎(chǔ)進一步定制片任,大大的降低了應(yīng)用服務(wù)的鏡像制作成本偏友。
Docker容器的能力
- 文件系統(tǒng)隔離: 每個容器的都有自己的root文件系統(tǒng)
- 進程隔離: 每個容器都運行在自己的進程環(huán)境中
- 網(wǎng)絡(luò)隔離: 容器的虛擬網(wǎng)絡(luò)接口和IP地址是分開的
- 資源隔離和分組:使用Cgroups將CPU和內(nèi)存之類的資源獨立分配給每個Docker容器
對比傳統(tǒng)虛擬機總結(jié)
特性 | 容器 | 虛擬機 |
---|---|---|
啟動 | 秒級 | 分鐘級 |
硬盤使用 | 一般為 MB
|
一般為 GB
|
性能 | 接近原生 | 弱于 |
系統(tǒng)支持量 | 單機支持上千個容器 | 一般幾十個 |
Docker安裝
Docker 軟件包已經(jīng)包括在默認的 CentOS-Extras 軟件源里。所以可以使用 yum 命令直接安裝
$ sudo yum install docker
查看Docker是否安裝成功
docker version
或者
docker info
Docker 需要用戶具有 sudo 權(quán)限对供,為了避免每次命令都輸入sudo位他,可以把用戶加入 Docker 用戶組
$ sudo usermod -aG docker 用戶名
安裝完成后啟動 docker 服務(wù),并將其設(shè)置為開機啟動
$ sudo service docker start
$ sudo chkconfig docker on
CentOS 7中支持的新式 systemd 語法:
啟動 docker:systemctl start docker.service
查看 docker狀態(tài):systemctl status docker.service
使用鏡像
Docker 把應(yīng)用程序及其依賴产场,打包在 image 文件里面鹅髓,通過 image 文件,才能生成 Docker 容器京景。Docker 根據(jù) image 文件生成容器的實例窿冯。同一個 image 文件,可以生成多個同時運行的容器實例确徙。
查看宿主機上的鏡像(Docker鏡像保存在/var/lib/docker目錄下)
docker images
image 文件是通用的醒串,為了方便共享执桌,image 文件制作完成后,可以上傳到Docker 的官方倉庫 Docker Hub
查找Docker Hub上的nginx鏡像
docker search nginx
從Docker hub上下載某個鏡像:
docker pull ubuntu:latest
docker pull ubuntu:latest
執(zhí)行docker pull ubuntu會將Ubuntu這個倉庫下面的所有鏡像下載到本地repository厦凤。
運行 image 文件
docker run 鏡像名
docker run命令會從 image 文件生成一個正在運行的容器實例鼻吮。docker run命令具有自動抓取 image 文件的功能育苟。如果發(fā)現(xiàn)本地沒有指定的 image 文件较鼓,就會從倉庫自動抓取。
[root@localhost ~]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
... ...
輸出這段提示以后违柏,hello world就會停止運行博烂,容器自動終止。
刪除鏡像
docker rmi image-id
操作 Docker 容器
image 文件生成的容器實例漱竖,本身也是一個文件禽篱,稱為容器文件。簡單的說馍惹,容器是獨立運行的一個或一組應(yīng)用躺率,以及它們的運行態(tài)環(huán)境。對應(yīng)的万矾,虛擬機可以理解為模擬運行的一整套操作系統(tǒng)(提供了運行態(tài)環(huán)境和其他系統(tǒng)環(huán)境)和跑在上面的應(yīng)用悼吱。
查看當前有哪些容器正在運行
docker ps
查看所有容器
docker ps -a
啟動、停止良狈、重啟容器命令:
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
后臺啟動一個容器后后添,可以使用attach命令進入到這個容器
docker attach container_name/container_id
刪除容器的命令:
docker rm container_name/container_id
刪除所有停止的容器:
docker rm $(docker ps -a -q)
鏡像加速器
因為國內(nèi)連接 Docker 的官方倉庫很慢,因此我們在日常使用中會使用Docker 中國加速器薪丁。通過 Docker 官方鏡像加速遇西,中國區(qū)用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像托管于中國大陸严嗜,本地用戶現(xiàn)在將會享受到更快的下載速度和更強的穩(wěn)定性粱檀,從而能夠更敏捷地開發(fā)和交付 Docker 化應(yīng)用。
Docker 中國官方鏡像加速可通過registry.docker-cn.com訪問漫玄。該鏡像庫只包含流行的公有鏡像梧税,私有鏡像仍需要從美國鏡像庫中拉取。我使用的是CentOS 7系統(tǒng)称近,在 /etc/docker/daemon.json 中寫入如下內(nèi)容:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
注意第队,一定要保證該文件符合 json 規(guī)范,否則 Docker 將不能啟動刨秆。
然后重新啟動服務(wù)
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
檢查加速器是否生效:在命令行執(zhí)行 docker info凳谦,如果從結(jié)果中看到了如下內(nèi)容,說明配置成功衡未。
Registry Mirrors:
https://registry.docker-cn.com/