摘要:根據(jù)不同的項目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個應(yīng)用有自己一個獨立的運行環(huán)境,互不干擾。如何測試人員還是運維人員,也可以根據(jù)最新版本的鏡像來測試和部署新的測試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運行項目來進一步掌握。
什么是 Docker
Docker 作用 運行環(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)境不一致,有時候就因為環(huán)境不一致,而誤解為代碼的問題,如 (有些語言,在 windows 下對大小寫不敏感,但在 Linux下敏感),所以提供一個如何保證相同的開發(fā)運行環(huán)境就顯得很重要了。
Java 曾提出 「Write Once, Run Anywhere」,而 Docker 則提出了 「Build once, Run anywhere, Configure once, Run anything」。
Java 的一個非常重要的特性就是與平臺無關(guān)性,而使用 Java 虛擬機是實現(xiàn)這一特性的關(guān)鍵。Java 虛擬機屏蔽了與具體平臺相關(guān)的信息,使得 Java 語言編譯程序只需生成可以在 Java 虛擬機上運行的目標(biāo)代碼 (字節(jié)碼),就可以在多種平臺上不加修改的運行。
和 Java 虛擬機類似,Docker 使用容器引擎解決平臺依賴問題,它在每臺宿主機上都啟動一個 Docker 的守護進程,守護進程屏蔽了與具體平臺相關(guān)的信息,對上層應(yīng)用提供統(tǒng)一的解析給不同平臺上的執(zhí)行驅(qū)動,存儲驅(qū)動和網(wǎng)絡(luò)驅(qū)動去執(zhí)行。
解決本地多個項目多種環(huán)境相互干擾的問題可能由于不同的項目需要不同的開發(fā)環(huán)境,如有些項目需要 PHP 5.6,有些項目需要 PHP7.0;有些項目需要 Apache,有些項目需要 Nginx。在同一臺電腦上需要同時安裝相同軟件的不同版本,或者同時運行相同端口 (如:80),這些都避免不了出現(xiàn)沖突的情況。
有時候我們并不想電腦上同時安裝很多開發(fā)軟件,這時候 Docker 就發(fā)揮作用了。根據(jù)不同的項目,使用不同的 Docker 鏡像,搭建開發(fā)環(huán)境;而每一個 Docker 應(yīng)用有自己一個獨立的運行環(huán)境,互不干擾。
Docker 具有版本控制能力Docker 容器還可以像 git 倉庫一樣,可以讓你提交變更到 Docker 鏡像中并通過不同的版本來管理它們。設(shè)想如果你因為完成了一個組件的升級而導(dǎo)致你整個環(huán)境都損壞了,Docker 可以讓你輕松地回滾到這個鏡像的前一個版本。這整個過程可以在幾分鐘內(nèi)完成,如果和虛擬機的備份或者鏡像創(chuàng)建流程對比,那 Docker 算相當(dāng)快的,它可以讓你快速地進行復(fù)制和實現(xiàn)冗余。
如何測試人員還是運維人員,也可以根據(jù)最新版本的鏡像來測試和部署新的測試環(huán)境和生產(chǎn)環(huán)境。
Docker 基本使用 第一個鏡像為了加速下載 Docker 鏡像,可以使用國內(nèi)的一些加速器,如daocloud,如 Mac:
Docker For Mac
右鍵點擊桌面頂欄的 docker 圖標(biāo),選擇 Preferences ,在 Daemon 標(biāo)簽(Docker 17.03 之前版本為 Advanced 標(biāo)簽)下的 Registry mirrors 列表中加入下面的鏡像地址:
PHP 項目中創(chuàng)建一個Dockerfilehttp://40974b5e.m.daocloud.io
點擊 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" ]寫個 hello.php 創(chuàng)建鏡像
docker build -t my-php-app .查詢鏡像
docker images第一個容器
有了第一個鏡像,就可以利用這個鏡像,創(chuàng)建容器,運行代碼。
docker run -it --rm --name my-running-app my-php-app數(shù)據(jù)卷
正如之前所說的,代碼有版本控制,鏡像的一個目標(biāo)是:讓我們的運行環(huán)境一致。所以我們的做法是盡可能將代碼和鏡像分離開來。
這時候就需要利用到「數(shù)據(jù)卷」。數(shù)據(jù)卷是一個可供一個或者多個容器使用的特殊目錄,主要有以下幾個特點:
1.數(shù)據(jù)卷可以在容器之間共享和重用;
2.對數(shù)據(jù)卷的內(nèi)容進行修改,會立刻生效;
3.數(shù)據(jù)卷內(nèi)容并不包含在鏡像中,所以不會影響鏡像;
在使用 docker run 命令時,使用 -v 標(biāo)記來創(chuàng)建一個數(shù)據(jù)卷,或者指定掛載一個本地主機的目錄到容器中,如我們將本地的 hello.php 掛載到容器中,其中稍微修改下hello.php
",$str); } ?>
將本地的一個包含 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í)的東西還有很多,我們從編寫簡單的 Dockerfile 文件來創(chuàng)建鏡像,創(chuàng)建容器,掛載數(shù)據(jù)卷,一步步去了解和使用 Docker。
下一步我們從如何利用已有的 laradock (https://github.com/laradock/laradock)運行 Laravel 項目來進一步掌握 Docker。
附:Docker 常用命令數(shù)據(jù)卷id | 命令 | 含義 |
---|---|---|
1 | docker kill $(docker ps -a -q) | 殺死所有正在運行的容器 |
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 | 進入容器 |
7 | docker stop CONTAINER ID或者NAMES | 關(guān)閉容器 |
8 | docker start CONTAINER ID或者NAMES | 重新啟動關(guān)閉的容器 |
9 | docker rm CONTAINER ID或者NAMES | 移除本地容器 |
聽說最美的人和最帥的人,都會給作者打賞,以資鼓勵
coding01 期待您關(guān)注
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25811.html
摘要:根據(jù)不同的項目,使用不同的鏡像,搭建開發(fā)環(huán)境而每一個應(yīng)用有自己一個獨立的運行環(huán)境,互不干擾。如何測試人員還是運維人員,也可以根據(jù)最新版本的鏡像來測試和部署新的測試環(huán)境和生產(chǎn)環(huán)境。下一步我們從如何利用已有的運行項目來進一步掌握。 showImg(https://segmentfault.com/img/remote/1460000011106825); 什么是 Docker Docke...
摘要:創(chuàng)建一個環(huán)境最近公司正在使用開發(fā)網(wǎng)站應(yīng)用,所以有必要了解下如何使用創(chuàng)建對應(yīng)的環(huán)境。還好,提供了文檔的形式來組合多個容器來搭建開發(fā)環(huán)境。下一步我們將使用來構(gòu)建更加復(fù)雜的開發(fā)環(huán)境。 showImg(https://segmentfault.com/img/remote/1460000011106825); 從《從最簡單的入手學(xué)習(xí) Docker (一)》一文中,可以簡單的了解 Docker ...
摘要:簡介其實在這樣的一個云計算時代早就已被人眾所周知了它改變了傳統(tǒng)物理機的虛擬化方式使得機器的資源得到了高效的利用因為運行在中的應(yīng)用實際上就是運行在宿主機上的所以它是不需要進行硬件層面的虛擬化以及運行一個完整操作系統(tǒng)來支持于是在應(yīng)用代碼的執(zhí)行效 Docker簡介 其實在這樣的一個云計算時代, Docker 早就已被人眾所周知了,它改變了傳統(tǒng)物理機的虛擬化方式,使得機器的資源得到了高效的利用...
摘要:定時器調(diào)用頻率優(yōu)化把開啟定時器的邏輯放在可以大大減少定時器的數(shù)量。舉個例子,比如為,此時在某一個定時器的回調(diào)函數(shù)檢測到上一次觸法事件的為,而為,此時雖然要開啟下一次定時,但這個時候定時的時間為就可以了。 最近的面試中考到了debounce,函數(shù)防抖,筆試的時候答的不是特別好,下來好好研究了一下,從原理到優(yōu)化,再到開源工具庫lodash的實現(xiàn)源碼,梳理了一番,現(xiàn)整理如下。 先簡單介紹一下...
閱讀 3944·2021-11-16 11:44
閱讀 3123·2021-11-12 10:36
閱讀 3381·2021-10-08 10:04
閱讀 1266·2021-09-03 10:29
閱讀 406·2019-08-30 13:50
閱讀 2615·2019-08-29 17:14
閱讀 1742·2019-08-29 15:32
閱讀 1087·2019-08-29 11:27