摘要:根據(jù)不同的項(xiàng)目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個(gè)應(yīng)用有自己一個(gè)獨(dú)立的運(yùn)行環(huán)境,互不干擾。如何測(cè)試人員還是運(yùn)維人員,也可以根據(jù)最新版本的鏡像來測(cè)試和部署新的測(cè)試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運(yùn)行項(xiàng)目來進(jìn)一步掌握。
什么是 Docker
Docker 作用 運(yùn)行環(huán)境盡可能一致Docker is the leading Containers as a Service (CaaS) platform
Docker is the world’s leading software container platform. Developers use Docker to eliminate “works on my machine” problems when collaborating on code with co-workers. Operators use Docker to run and manage apps side-by-side in isolated containers to get better compute density. Enterprises use Docker to build agile software delivery pipelines to ship new features faster, more securely and with confidence for both Linux, Windows Server, and Linux-on-mainframe apps.
不管是在大公司還是小公司,由于代碼有版本控制,大家的代碼能保證一致;但由于大家相互之間的開發(fā)硬件不一樣 (如,有人喜歡在 windows 環(huán)境下開發(fā),有些人用 Mac 電腦),必然導(dǎo)致開發(fā)環(huán)境不一致,有時(shí)候就因?yàn)榄h(huán)境不一致,而誤解為代碼的問題,如 (有些語言,在 windows 下對(duì)大小寫不敏感,但在 Linux下敏感),所以提供一個(gè)如何保證相同的開發(fā)運(yùn)行環(huán)境就顯得很重要了。
Java 曾提出 「Write Once, Run Anywhere」,而 Docker 則提出了 「Build once, Run anywhere, Configure once, Run anything」。
Java 的一個(gè)非常重要的特性就是與平臺(tái)無關(guān)性,而使用 Java 虛擬機(jī)是實(shí)現(xiàn)這一特性的關(guān)鍵。Java 虛擬機(jī)屏蔽了與具體平臺(tái)相關(guān)的信息,使得 Java 語言編譯程序只需生成可以在 Java 虛擬機(jī)上運(yùn)行的目標(biāo)代碼 (字節(jié)碼),就可以在多種平臺(tái)上不加修改的運(yùn)行。
和 Java 虛擬機(jī)類似,Docker 使用容器引擎解決平臺(tái)依賴問題,它在每臺(tái)宿主機(jī)上都啟動(dòng)一個(gè) Docker 的守護(hù)進(jìn)程,守護(hù)進(jìn)程屏蔽了與具體平臺(tái)相關(guān)的信息,對(duì)上層應(yīng)用提供統(tǒng)一的解析給不同平臺(tái)上的執(zhí)行驅(qū)動(dòng),存儲(chǔ)驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)去執(zhí)行。
解決本地多個(gè)項(xiàng)目多種環(huán)境相互干擾的問題可能由于不同的項(xiàng)目需要不同的開發(fā)環(huán)境,如有些項(xiàng)目需要 PHP 5.6,有些項(xiàng)目需要 PHP7.0;有些項(xiàng)目需要 Apache,有些項(xiàng)目需要 Nginx。在同一臺(tái)電腦上需要同時(shí)安裝相同軟件的不同版本,或者同時(shí)運(yùn)行相同端口 (如:80),這些都避免不了出現(xiàn)沖突的情況。
有時(shí)候我們并不想電腦上同時(shí)安裝很多開發(fā)軟件,這時(shí)候 Docker 就發(fā)揮作用了。根據(jù)不同的項(xiàng)目,使用不同的 Docker 鏡像,搭建開發(fā)環(huán)境;而每一個(gè) Docker 應(yīng)用有自己一個(gè)獨(dú)立的運(yùn)行環(huán)境,互不干擾。
Docker 具有版本控制能力Docker 容器還可以像 git 倉庫一樣,可以讓你提交變更到 Docker 鏡像中并通過不同的版本來管理它們。設(shè)想如果你因?yàn)橥瓿闪艘粋€(gè)組件的升級(jí)而導(dǎo)致你整個(gè)環(huán)境都損壞了,Docker 可以讓你輕松地回滾到這個(gè)鏡像的前一個(gè)版本。這整個(gè)過程可以在幾分鐘內(nèi)完成,如果和虛擬機(jī)的備份或者鏡像創(chuàng)建流程對(duì)比,那 Docker 算相當(dāng)快的,它可以讓你快速地進(jìn)行復(fù)制和實(shí)現(xiàn)冗余。
如何測(cè)試人員還是運(yùn)維人員,也可以根據(jù)最新版本的鏡像來測(cè)試和部署新的測(cè)試環(huán)境和生產(chǎn)環(huán)境。
Docker 基本使用 第一個(gè)鏡像為了加速下載 Docker 鏡像,可以使用國內(nèi)的一些加速器,如daocloud,如 Mac:
Docker For Mac
右鍵點(diǎn)擊桌面頂欄的 docker 圖標(biāo),選擇 Preferences ,在 Daemon 標(biāo)簽(Docker 17.03 之前版本為 Advanced 標(biāo)簽)下的 Registry mirrors 列表中加入下面的鏡像地址:
PHP 項(xiàng)目中創(chuàng)建一個(gè)Dockerfilehttp://40974b5e.m.daocloud.io
點(diǎn)擊 Apply & Restart 按鈕使設(shè)置生效。
更多參考:
https://www.daocloud.io/mirro...
FROM daocloud.io/php:5.6-cli COPY . /usr/src/myapp WORKDIR /usr/src/myapp CMD [ "php", "./hello.php" ]寫個(gè) hello.php 創(chuàng)建鏡像
docker build -t my-php-app .查詢鏡像
docker images第一個(gè)容器
有了第一個(gè)鏡像,就可以利用這個(gè)鏡像,創(chuàng)建容器,運(yùn)行代碼。
docker run -it --rm --name my-running-app my-php-app數(shù)據(jù)卷
正如之前所說的,代碼有版本控制,鏡像的一個(gè)目標(biāo)是:讓我們的運(yùn)行環(huán)境一致。所以我們的做法是盡可能將代碼和鏡像分離開來。
這時(shí)候就需要利用到「數(shù)據(jù)卷」。數(shù)據(jù)卷是一個(gè)可供一個(gè)或者多個(gè)容器使用的特殊目錄,主要有以下幾個(gè)特點(diǎn):
1.數(shù)據(jù)卷可以在容器之間共享和重用;
2.對(duì)數(shù)據(jù)卷的內(nèi)容進(jìn)行修改,會(huì)立刻生效;
3.數(shù)據(jù)卷內(nèi)容并不包含在鏡像中,所以不會(huì)影響鏡像;
在使用 docker run 命令時(shí),使用 -v 標(biāo)記來創(chuàng)建一個(gè)數(shù)據(jù)卷,或者指定掛載一個(gè)本地主機(jī)的目錄到容器中,如我們將本地的 hello.php 掛載到容器中,其中稍微修改下hello.php
",$str); } ?>
將本地的一個(gè)包含 test.txt 的 public 文件夾掛載到容器中,并讀取該文件中的內(nèi)容:
docker run -it --rm --name my-running-app -v /Users/ye/docker/learning/demo/public:/usr/src/myapp/public my-php-4總結(jié)
Docker 需要并且可學(xué)習(xí)的東西還有很多,我們從編寫簡(jiǎn)單的 Dockerfile 文件來創(chuàng)建鏡像,創(chuàng)建容器,掛載數(shù)據(jù)卷,一步步去了解和使用 Docker。
下一步我們從如何利用已有的 laradock (https://github.com/laradock/laradock)運(yùn)行 Laravel 項(xiàng)目來進(jìn)一步掌握 Docker。
附:Docker 常用命令數(shù)據(jù)卷id | 命令 | 含義 |
---|---|---|
1 | docker kill $(docker ps -a -q) | 殺死所有正在運(yùn)行的容器 |
2 | docker rm $(docker ps -a -q) | 刪除所有已經(jīng)停止的容器 |
3 | docker images | 查看本地鏡像 |
4 | docker ps | 查看本地容器 |
5 | docker build -t name:tag Dockerfile路徑 | 創(chuàng)建鏡像 |
6 | docker exec-it IMAGE ID或者NAMES /bin/bash | 進(jìn)入容器 |
7 | docker stop CONTAINER ID或者NAMES | 關(guān)閉容器 |
8 | docker start CONTAINER ID或者NAMES | 重新啟動(dòng)關(guān)閉的容器 |
9 | docker rm CONTAINER ID或者NAMES | 移除本地容器 |
聽說最美的人和最帥的人,都會(huì)給作者打賞,以資鼓勵(lì)
coding01 期待您關(guān)注
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27031.html
摘要:根據(jù)不同的項(xiàng)目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個(gè)應(yīng)用有自己一個(gè)獨(dú)立的運(yùn)行環(huán)境,互不干擾。如何測(cè)試人員還是運(yùn)維人員,也可以根據(jù)最新版本的鏡像來測(cè)試和部署新的測(cè)試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運(yùn)行項(xiàng)目來進(jìn)一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
摘要:創(chuàng)建一個(gè)環(huán)境最近公司正在使用開發(fā)網(wǎng)站應(yīng)用,所以有必要了解下如何使用創(chuàng)建對(duì)應(yīng)的環(huán)境。還好,提供了文檔的形式來組合多個(gè)容器來搭建開發(fā)環(huán)境。下一步我們將使用來構(gòu)建更加復(fù)雜的開發(fā)環(huán)境。 showImg(https://segmentfault.com/img/remote/1460000011106825); 從《從最簡(jiǎn)單的入手學(xué)習(xí) Docker (一)》一文中,可以簡(jiǎn)單的了解 Docker ...
摘要:簡(jiǎn)介其實(shí)在這樣的一個(gè)云計(jì)算時(shí)代早就已被人眾所周知了它改變了傳統(tǒng)物理機(jī)的虛擬化方式使得機(jī)器的資源得到了高效的利用因?yàn)檫\(yùn)行在中的應(yīng)用實(shí)際上就是運(yùn)行在宿主機(jī)上的所以它是不需要進(jìn)行硬件層面的虛擬化以及運(yùn)行一個(gè)完整操作系統(tǒng)來支持于是在應(yīng)用代碼的執(zhí)行效 Docker簡(jiǎn)介 其實(shí)在這樣的一個(gè)云計(jì)算時(shí)代, Docker 早就已被人眾所周知了,它改變了傳統(tǒng)物理機(jī)的虛擬化方式,使得機(jī)器的資源得到了高效的利用...
摘要:定時(shí)器調(diào)用頻率優(yōu)化把開啟定時(shí)器的邏輯放在可以大大減少定時(shí)器的數(shù)量。舉個(gè)例子,比如為,此時(shí)在某一個(gè)定時(shí)器的回調(diào)函數(shù)檢測(cè)到上一次觸法事件的為,而為,此時(shí)雖然要開啟下一次定時(shí),但這個(gè)時(shí)候定時(shí)的時(shí)間為就可以了。 最近的面試中考到了debounce,函數(shù)防抖,筆試的時(shí)候答的不是特別好,下來好好研究了一下,從原理到優(yōu)化,再到開源工具庫lodash的實(shí)現(xiàn)源碼,梳理了一番,現(xiàn)整理如下。 先簡(jiǎn)單介紹一下...
閱讀 2745·2021-09-02 15:11
閱讀 918·2019-08-26 18:18
閱讀 1874·2019-08-26 11:57
閱讀 3329·2019-08-23 16:59
閱讀 2005·2019-08-23 16:51
閱讀 2313·2019-08-23 16:11
閱讀 3132·2019-08-23 14:58
閱讀 1113·2019-08-23 11:34