網(wǎng)站頁面布局分析企業(yè)做推廣有幾種方式
聊聊 Docker
Docker 是什么?
定義
Docker 是一款 開源的應用容器引擎。
簡單來說,就是 以容器虛擬化技術為基礎的軟件??梢园褢贸绦蚝退蕾嚨陌黄鸫虬揭粋€可移植的鏡像中,發(fā)布到 Linux 或者 Windows 上運行。(代碼 + 運行環(huán)境)
虛擬機與容器技術對比
虛擬機
虛擬機 可以高效使用計算機資源(比如可以解決同一種服務端口沖突、程序依賴版本庫不同、進程受限制等問題) ,常見的虛擬機有: vmware、virtualbox 。
虛擬機的 底層原理 是基于 hypervisor(硬件抽象層) ,也叫 虛擬機監(jiān)視器(VMM) 。
容器技術
是一種沙盒技術,相互之間不會有任何接口。將應用運行在容器中,容器之間隔離的。
容器技術更 關注應用本身,應用和所依賴環(huán)境的共享和復用。
Linux Container (簡稱 LXC),是一種內(nèi)核輕量級的操作系統(tǒng)層虛擬化技術,容器化技術就是基于 LXC 實現(xiàn)的。
四個維度對比
由此可見,為什么容器技術會出現(xiàn),為什么容器技術會那么流行,是因為虛擬機有痛點的,容器技術就是為了解決這些痛點而生的。而 Docker 就是容器化技術的代表。
Docker 的應用場景
Docker 的實現(xiàn)原理與優(yōu)勢
Docker 的技術架構
Docker 是由 dotCloud 公司于 2013 年推出的產(chǎn)品,用 GO 語言編寫的。
Docker 有兩種發(fā)行版本 ,分別是 CE (Community Edition,社區(qū)版)和 EE (Enterprise Edition,企業(yè)版)。
Docker 是 C/S 架構??蛻舳?#xff08;docker cli,執(zhí)行程序),通過命令行和 API 形式與守護進程(docker daemon,提供 Docker 服務)進行通訊。
舉個具體的例子,在常見的虛擬機實現(xiàn)中,我們要搭建一套 LNMP 結構的服務,我們通常會建立一個虛擬機,在虛擬機中安裝上 Linux 系統(tǒng),之后分別安裝 Nginx、MySQL 和 PHP。
而在 Docker 里,最佳的實踐是分別基于 Nginx、MySQL 和 PHP 的鏡像建立三個容器,分別運行 Nginx、MySQL 和 PHP ,而它們所在的虛擬操作系統(tǒng)也直接共享于宿主機的操作系統(tǒng)。
Docker 的實現(xiàn)原理
Linux 三大技術
Docker 的實現(xiàn),主要歸結于 Linux 的三大技術:命名空間(Namespaces)、控制組(Control Groups)和聯(lián)合文件系統(tǒng)(Union FIle System)。
命名空間(Namespaces)
在編程語言中,命名空間的主要目的就是為了集合相同模塊的類,區(qū)分不同模塊間的同名類。
Linux 內(nèi)核的命名空間,就是 能夠將計算機資源進行切割劃分,形成各自獨立的空間。
如 User Namespace、Net Namespace、PID Namespace、Mount Namespace 等等。
利用 PID Namespace,Docker 就實現(xiàn)了容器中隔離程序運行中進程隔離這一目標。
控制組(Control Groups)
資源控制組的作用就是 控制計算機資源 。CGroups 主要做的是硬件資源的隔離。 除了資源的隔離,還有資源分配這個關鍵性的作用。
通過 CGroups,我們 可以指定任意一個隔離環(huán)境對任意資源的占用值或占用率 ,這對于很多分布式使用場景來說是非常有用的功能。
聯(lián)合文件系統(tǒng)(Union FIle System)
一種能夠 同時掛載不同實際文件或文件夾到同一目錄,形成一種聯(lián)合文件結構的文件系統(tǒng)。
Docker 用它解決虛擬環(huán)境對文件系統(tǒng)占用過量,實現(xiàn)虛擬環(huán)境快速啟停等問題。
Docker 大幅減少了虛擬文件系統(tǒng)對物理存儲空間的占用。(例子:Git,Git 中每進行一次提交,Git 并不是將我們所有的內(nèi)容打包成一個版本,而只是將修改的部分進行記錄,這樣即使我們提交很多次后,代碼庫的空間占用也不會倍數(shù)增加)
Docker 的優(yōu)勢
- 應用的安全性、可移植性和節(jié)約成本;
- 讓自動化部署更簡單(持續(xù)集成CI和持續(xù)部署CD,快速交付);
- 加速應用架構現(xiàn)代化進程(如微服務架構);
- 充分利用服務器資源;
- 跨平臺部署和動態(tài)伸縮(如使用K8s編排工具管理)。
Docker 的安裝
macos 安裝
安裝教程:https://www.runoob.com/docker/macos-docker-install.html
windows 安裝
安裝教程:https://www.runoob.com/docker/windows-docker-install.html 或者
https://blog.58heshihu.com/index.php/archives/286/
Linux 安裝
centos:https://www.runoob.com/docker/centos-docker-install.html
ubuntu:https://www.runoob.com/docker/ubuntu-docker-install.html
Docker 的四大核心組成
鏡像(Image)
可以理解為 一個只讀的文件包,其中包含了虛擬環(huán)境運行最原始文件系統(tǒng)的內(nèi)容。
查看鏡像列表:docker images
鏡像命名格式:開發(fā)者 / 鏡像名字:版本號
拉取: docker pull 鏡像名稱
搜索: docker search 鏡像名稱 //從docker hub搜索
鏡像詳細信息: docker inspect 鏡像名稱/ID
刪除鏡像: docker rmi 鏡像名稱/ID
容器(Container)
簡介
在容器技術中, 容器就是用來隔離虛擬環(huán)境的基礎設施,而在 docker 里,它也被引申為隔離出來的虛擬環(huán)境。
容器包括
- 一個 Docker 鏡像
- 一個程序運行環(huán)境
- 一個指令集合
容器的生命周期
- Created:容器已經(jīng)被創(chuàng)建,容器所需的相關資源已經(jīng)準備就緒,但容器中的程序還未處于運行狀態(tài)
- Running:容器正在運行,也就是容器中的應用正在運行
- Paused:容器已暫停,表示容器中的所有程序都處于暫停 ( 不是停止 ) 狀態(tài)
- Stopped:容器處于停止狀態(tài),占用的資源和沙盒環(huán)境都依然存在,只是容器中的應用程序均已停止
- Deleted:容器已刪除,相關占用的資源及存儲在 Docker 中的管理信息也都已釋放和移除
常用命令
查看正在運行的容器列表:docker ps
所有容器:docker ps -a
創(chuàng)建啟動容器:docker run --name redis -d redis:5.0.15
停止容器:docker stop 容器名字/ID
啟動/重啟容器:docker start/restart 容器名字/ID
刪除容器:docker rm [-f] //-f強制,可以刪除正在運行的容器
進入容器:docker exec -it redis bash //容器內(nèi)部是虛擬出來的一個Linux
查看容器報錯信息:docker logs 容器ID
網(wǎng)絡(Network)
容器網(wǎng)絡 實質(zhì)上也是由 Docker 為應用程序所創(chuàng)造的虛擬環(huán)境的一部分,它能讓應用從宿主機操作系統(tǒng)的網(wǎng)絡環(huán)境中獨立出來,形成容器自有的網(wǎng)絡設備、IP 協(xié)議棧、端口套接字、IP 路由表、防火墻等等與網(wǎng)絡相關的模塊。
-
沙盒(Sandbox)提供了容器的虛擬網(wǎng)絡棧,也就是之前所提到的端口套接字、IP 路由表、防火墻等的內(nèi)容。其實現(xiàn)隔離了容器網(wǎng)絡與宿主機網(wǎng)絡,形成了完全獨立的容器網(wǎng)絡環(huán)境
-
網(wǎng)絡(Network)可以理解為 Docker 內(nèi)部的虛擬子網(wǎng),網(wǎng)絡內(nèi)的參與者相互可見并能夠進行通訊。Docker 的這種虛擬網(wǎng)絡也是于宿主機網(wǎng)絡存在隔離關系的,其目的主要是形成容器間的安全通訊環(huán)境
-
端點(Endpoint)是位于容器或網(wǎng)絡隔離墻之上的洞,其主要目的是形成一個可以控制的突破封閉的網(wǎng)絡環(huán)境的出入口。當容器的端點與網(wǎng)絡的端點形成配對后,就如同在這兩者之間搭建了橋梁,便能夠進行數(shù)據(jù)傳輸了
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KuxNurAy-1692625431644)(http://flt-pan.58heshihu.com/blog/typecho/llkx21og.png)]
Docker 容器網(wǎng)絡一共有 5 種網(wǎng)絡驅動 ,網(wǎng)絡驅動,分別是: Bridge Driver(網(wǎng)橋 默認)、Host Driver、Overlay Driver(集群)、MacLan Driver、None Driver。
容器之間以及宿主機與容器之間可以通過端口來進行訪問。
常用命令
查看網(wǎng)絡列表:docker network ls
容器加入網(wǎng)絡:
docker run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=yes --network network_name mysql:5.7
docker run -d --name php --link mysql --network network_name php:latest
端口映射:
docker run -d --name nginx -p 8080:80 nginx:1.12 //80為容器的端口,8080可為宿主機或別的容器的端口
數(shù)據(jù)卷(Volume)
在 Docker 中,通過 bind mount、volume、tmpfs mount 這幾種方式進行數(shù)據(jù)共享或持久化的文件或目錄,我們都稱為數(shù)據(jù)卷 (Volume)。
Docker 的數(shù)據(jù)卷一共 有 3 中掛載方式 ,分別是: Bind Mount、Volume、Tmpfs Mount
-
Bind Mount 能夠直接將宿主操作系統(tǒng)中的目錄和文件掛載到容器內(nèi)的文件系統(tǒng)中,通過指定容器外的路徑和容器內(nèi)的路徑,就可以形成掛載映射關系,在容器內(nèi)外對文件的讀寫,都是相互可見的
-
Volume 也是從宿主操作系統(tǒng)中掛載目錄到容器內(nèi),只不過這個掛載的目錄由 Docker 進行管理,我們只需要指定容器內(nèi)的目錄,不需要關心具體掛載到了宿主操作系統(tǒng)中的哪里
-
Tmpfs Mount 支持掛載系統(tǒng)內(nèi)存中的一部分到容器的文件系統(tǒng)里,不過由于內(nèi)存和容器的特征,它的存儲并不是持久的,其中的內(nèi)容會隨著容器的停止而消失
bind mount方式:
docker run -d --name nginx_test -v /nginx/html:/usr/share/nginx/html nginx
查看容器掛在文件:
docker exec nginx_test ls /usr/share/nginx/html
利器 docker-compose
docker-compose 是用于定義和運行多容器 Docker 應用程序的工具(集成部署),使用 docker-compose 可以高效管理容器。
使用步驟:
1、Dockerfile 定義應用程序的環(huán)境(定制自己的鏡像源)
2、docker-compose.yml 定義構成應用程序的服務,多個容器一起執(zhí)行
3、docker-compose up 啟動并運行整個應用程序
備注:Linux需單獨安裝docker-compose,macos和windows已經(jīng)集成
實戰(zhàn)案例 - 搭建 LNMP 環(huán)境
源碼下載: https://github.com/zhangdejian/docker_lnmp.git
請參考我的另外一篇博客: https://learnku.com/articles/39417 (Dockerfile 方式定制 lnmp 環(huán)境)
Docker 的不足
- 必須在64位機器上運行,目前僅支持x86_64和AMD64;
- 系統(tǒng)的Linux內(nèi)核必須是3.8或者更新;
- 內(nèi)核必須支持cgroups和命名空間;
- docker對disk的管理比較有限;
- 網(wǎng)絡管理相對簡單,主要是機遇namespace隔離;
6.container隨著用戶進程的停止而銷毀,container中的log等用戶數(shù)據(jù)不方便收集。
Docker 的學習資源
官網(wǎng): https://docs.docker.com/engine/reference/run/
中文手冊: https://docker_practice.gitee.io/zh-cn/basic_concept/image.html
菜鳥教程: https://www.runoob.com/docker/docker-tutorial.html
掘金社區(qū): https://juejin.cn/tag/Docker
開源中國: https://www.oschina.net/question/tag/docker
SegmentFault: https://segmentfault.com/t/docker
推薦入門書籍: 《Docker 技術入門與實戰(zhàn)》 、 《Docker 進階與實戰(zhàn)》華為團隊
看云:《Docker — 從入門到實踐》
優(yōu)秀文章:
CentOS 安裝 docker
Dockerfile 方式定制 lnmp 環(huán)境
Docker 搭建 Jenkins 實現(xiàn)自動部署
Docker+LNMP+Jenkins+ 碼云實現(xiàn) PHP 代碼自動化部署
Docker 操作命令大全