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