搜尋
首頁後端開發php教程docker 入门_PHP教程

docker 入门

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。

作者:haoqiang1531@outlook.com 博客:fireaxe.blog.chinaunix.net
1. 什么是docker 从原理上看,docker是基于lxc与AUFS衍生出的一种技术。 Q:什么是lxc? A:lxc是linux kernel container,相当于linux轻量级虚拟机。与virtual box、vmware等指令集虚拟化的虚拟机相比,其优势是利用了host系统的kernel。因此,lxc可以看成是共享kernel的虚拟机。福祸相依,lxc的缺点也是因为利用了host的kernel,导致container中运行的也必须是linux系统。如果需要使用非linux系统,则只能使用vmware等虚拟机。 Q:什么场景需要用docker?这个问题最好看完下面的内容后再来讨论,不过基于该问题的重要性,还是决定挪到前面来讲说吧。(一般来讲,大部分只看前三段的。。。)1) 云部署(这部分没玩过,只能是道听途说了)以前都是用虚拟机,有了docker后,一部分对用什么操作系统没要求的应用,立刻移了过来。当然lxc也行,但是,但凡用到云平台的,都是大规模应用了。而lxc并不具备大规模应用所需的易部署性与易迁移性。2) 公司内部的CI平台一是CI平台的搭建,可以利用docker技术实现CI平台各工具的分离,提高升级的灵活性。同时通过用image的方式进行工具备份。(数据备份另有方法)二是测试环境的打包,利用dockerfile,自动利用最新版本来合成可测试环境,可以排除环境的干扰。同时,一旦测试完成,可以对外发布image,避免客户重新安装软件带来的各种配置问题。(以前要适配各种环境,现在好了,连着环境一起发布,都不用测试多环境了)3) 开发环境快速搭建用docker实现开发环境,一旦谁有了新电脑想搭一个开发环境,直接pull一个image过来,分分钟搞定啊!!
Q:为什么lxc能实现隔离? A:实际上linux启动的原理也是先启动kernel,kernel在启动user space。那么kernel启动多个user space也不是不可以了。所需的只是kernel内部要做好隔离。这也是lxc需要在kernel中实现的原因,user space是不一定需要知道除自己外还有其他user space的)
Q:为什么不同发行版可以同时在一个系统上的container内运行? A:linux各发行版的不同主要在于user space,kernel都是一样的,这也为不同发行版同时运行提供了便利。lxc只是为container内提供了kernel,然后根据不同发行版的需要,构造不同的user space。
Q:既然lxc已经提供了container,那么为什么不直接用lxc呢? A:其实也不是哪里都用docker,要看应用场景。 lxc本质上是一种虚拟机技术,如果我平时工作就是需要不同发行版或者统一发行版的不同 版本,那么使用lxc完全够了。 docker则更像是对服务的分割。现在的系统越来越复杂,在同一个机器上运行会有各种相互的干扰。同时不利于迁移,假如要把某个服务迁移到另一个机器上,会遇到各种环境配置与依赖的问题。这个用lxc也可以,但是由于lxc的每个container只提供了kernel的支持,用户态环境需要重新配置。假如有三个container都需要apache server,则我需要在每个container内都安装一次,这显然是一种浪费。或者是不同的开发环境都需要gcc编译器,则还要安装多份。于是又有人打起了复用部分user space的注意。
Q:如何实现user space级别的复用? A:开头说了docker是基于lxc与AUFS的一种技术。AUFS就是让用户能够复用一部分userspace。 user space在本质上来说就是一个文件系统。因此user space 的复用就可以看做事对文件系统的复用。AUFS可以实现多个目录的堆叠,而且能单独设置每一个目录的读写属性。简单说,lxc为每一个container生成了一个与外界完全隔离的文件系统,这样从user space的角度看来,自己就是唯一的操作系统;AUFS在此基础上实现了堆叠,能让多个container共享一部分文件系统。 Q:AUFS实现的文件系统共享的意义何在? A:举个例子,我要用两个container,分别放mysql server与redmine server。操作系统要求是ubuntu。 在lxc上,我需要分别构造两个含有ubuntu的container,再分别安装两个软件。 在docker上,则可以先构造一个ubuntu的container,然后再基于这个container分别构造两个container用来放mysql server与server。ubuntu的部分对于其派生的container来说是只读的。然后如果某一天用户发现需要在mysql基础上添加几个应用,可以方便的从mysql server这个container再派生。这样通过派生的方式,实现了复用。 更详细的可以参考:10张图带你深入理解Docker容器和镜像(http://dockone.io/article/783) Q:image与container的区别? A:其实image就是container,image相当于container的一个只读拷贝。如果子container直接复用父container,那么当子container修改了父container的内容时,该父container的其他子container也就收影响了。因此把父container做成一个只读的image,这样它的子container就不能修改它了。 另一方面,container是动态的,类似于git中被管理的一套代码,image则相当于一个commit(docker中从container生成image的命令恰好也是commit)。container只能用于开发者自己,只有把它用commit生成image后,其他人才能在此基础上去拉出branch,进行并行开发。 当然commit后,image只存在于本地,如果想多人协同开发,还需要通过“docker push”命令,把image推送到服务器上。docker的服务器被称之为docker registry。
Q:什么是dockerfile?A:dockerfile是生成image的脚本,常用生产环境的部署。例子1:我开发了一套软件,每周需要发布一个docker image。正常流程是pull一个基础image,然后下载安装我的软件,最后commit成一个新的image进行发布。有了dockerfile后,我就可以把这一过程做成自动化的,每次只需要运行一个docker build命令,利用写好的dockerfile来生成新的image。例子2:某生产环境依赖于多中组件,但这些组件也在不停更新。如果使用image,则每次都需要更新完后进行打包与重新发送image的工作。有了dockerfile就好多了,每次需要更新环境时,只需要重新运行一次dockerfile,它自动会根据命令去下载与安装最新组件。综上,我们在强调一次dockerfile的作用:一种脚本语言,让环境的打包过程自动化。开发过程中的作用不是很大。
2. 常用命令
命令 解释
create [--name container-id] 根据指定image创建container
start [-ti/-d/-v] 启动指定的container
-ti 建立虚拟终端病连接
-d 后台运行,且命令完成后不退出
-v 映射host的目录到container
run [--name container-id] 'docker create' + 'docker start'
ps [-a] 在运行的container
-a 所有container
iamges [-a] 所有image
-a 所有image及构成image的各层
history 某个image及构成该image的层
stop container关机
pause container暂停
rm 删除container
commit 根据container建立新的image
rmi 删除image
pull 合同步指定image到本地
push 合入image到docker hub
login 登陆docker hub

3. docker例程 这个直接参考下面的链接吧:http://docs.docker.com/mac/started/
4.数据卷与数据卷容器(data volume & data volume container) 1) 数据卷与数据卷容器的意义数据卷:实现数据与应用的分离。实际应用备份时不会包含数据。数据进行单独备份。因为数据与应用的备份通常需要采取不同的策略。
数据卷容器 通过数据卷容器,对实际应用于host进行隔离。这样数据在host上位置改变时,只需要修改数据卷容器,其他应用类容器不用修改。
2)使用数据卷创建包含一个数据卷的容器:$ docker run -v /data/path:/mount/path:ro --name dbdata ubuntu /bin/bash 创建包含两个数据卷的容器:$ docker run -d -v /data/path1:/mount/path1:ro-v /data/path2:/mount/path2:ro--name dbdata ubuntu /bin/bash $ docker run -ti --volumes-from dbdata --name app ubuntu
通过-v把host的目录“/data/path”给mount到container dbdata的“/mount/path”目录下。dbdata就成为数据卷容器。 实际应用的容器app基于dbdata来生成。通过“--volumes-from dbdata”获得数据卷容器dbdata具有的读写权限。

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。

作者:haoqiang1531@outlook.com 博客:fireaxe.blog.chinaunix.net

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1068090.htmlTechArticledocker 入门 本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的當前狀態:查看網絡開發趨勢PHP的當前狀態:查看網絡開發趨勢Apr 13, 2025 am 12:20 AM

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP與其他語言:比較PHP與其他語言:比較Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能PHP與Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP:網絡開發的關鍵語言PHP:網絡開發的關鍵語言Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP:許多網站的基礎PHP:許多網站的基礎Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。