色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql離線查詢,小白docker求入門

榮姿康2年前19瀏覽0評論
mysql離線查詢,小白docker求入門?

本文邀請yeedom來解答,通過大量的圖片、示例介紹,幫助你快速、全面地從入門到實戰~

1、docker是什么

Docker使用go基于linux lxc(linux containers)技術實現的開源容器,誕生于2013年年初,最開始叫dotcloud公司,13年年底改名為docker inc。

2017年下載次數達到了百億次,估值達13億美元,通過對應用封裝(Packaging)、分發(Distribution)、部署(Deployment)、運行(Runtime)全生命周期管理,達到“一次封裝,到處運行”

為何使用docker?

Docker直譯碼頭工人,將各種大小和形狀的物品裝進船里。這對從事軟件行業的人來說,聽起來很熟悉,花了大量時間和精力把一個應用放在另一個應用里。

docker出現之前,對不同環境的安裝、配置、維護工作量很多,如部署,配置文件,crontab,依賴等等。使用docker,無需關心環境,只需要一些配置就能構建鏡像,而部署則用一條run命令。

虛擬機VS容器

虛擬機需要有額外的虛擬機管理應用和虛擬機操作系統層,操作系統層不僅占用空間而且運行速度也相對慢。docker容器是在本機操作系統層面上實現虛擬化,因此很輕量,速度接近原生系統速度。

虛擬機啟動速度是分鐘級別,性能較弱、內存和硬盤占用大,一個物理機最多跑幾十個虛擬機,但它的隔離性比較好。docker啟停都是秒級實現,內存和硬盤占用非常小,單機支持上千個容器,在ibm服務器上可運行上萬個容器。容器跟虛機相比,有著巨大的優勢。

docker優點

只關心應用:以往我們需要關心操作系統、軟件、項目,有了docker我們可以只關心應用而不是操作系統,docker發展迅速,基于docker的paas平臺也層出不窮,使得我們能更方便的使用docker;

快速交付:docker可在秒級提供沙箱環境,開發,測試,運維使用完全相同的環境來部署代碼

微服務:docker有助于將一個復雜系統分解,讓用戶用更離散的方式思考服務

離線開發:將服務編排在筆記本中移動辦公,使用docker可在本機秒級別啟動一個本地開發環境;

降低調試成本:在測試和上線時產生無效的類、有問題的依賴、缺少的配置等問題,docker可讓一個問題調試和環境重現變得更簡單;

CD:docker讓持續交付實現變得更容易,特別是對于藍綠部署就更簡單。

第一版上線時,需要上第二版新功能,兩個版本功能會有沖突,這時用docker實現藍綠部署就非常方便了;

如:可以部署兩個版本同時在線,新版本測試沒問題了把老版本流量切到新版本就可以了

遷移:可以很快的遷移到其他云或服務器

與傳統虛擬機方式相比,容器化方式在很多場景下都是存在極為明顯的優勢。無論是開發、測試、運維都應該盡快掌握docker,盡早享受其帶來的巨大便利;

容器化方式在很多場景下都有極大的優勢。無論是開發、測試、運維都應該盡快掌握docker,盡早享受其帶來的巨大便利。

概念

再來了解docker非常關鍵的概念,這樣才能理解docker容器整個生命周期。

概念-鏡像

鏡像(類)=文件系統+數據,我常常用開發語言中的類比作鏡像,對象比作容器鏡像由多個層加上一些docker元數據組成,容器運行著由鏡像定義的系統。

概念-容器

容器(對象)=鏡像運行實例

容器是鏡像的運行實例,可以使用同一個鏡像運行多個實例。如圖所示,一個ubuntu docker鏡像產生了三個ubuntu容器,docker利用容器運行和隔離應用。

從讀寫角度來說,鏡像是只讀的,容器是在鏡像上添加了一層可讀寫的文件系統。

概念-層

層=文件變更集合

像傳統虛機應用,每個應用都需要拷貝一份文件副本,運行成百上千上磁盤空間會迅速耗光,而docker采用寫時復制來減少磁盤空間,當一個運行中的容器要寫入一個文件時,它會把該文件復制到新區域來記錄這次的修改,在執行docker提交時將這次修改記錄下并產生一個新的層。docker分層解決大規模使用容器時碰到的磁盤和效率問題。

概念-倉庫

docker借鑒了大量git優秀的經驗。docker倉庫分公有庫和私有庫,最大的公開倉庫是docker hub,國內也有很多倉庫源。

2、創建第一個docker應用

通過創建一個docker應用來看看docker是怎么方便使用的。

創建docker鏡像方式

創建docker有四種方式

但最常用的docker命令+手工提交和Dockerfile的方式

對于我們來說Dockerfile是最常用也是最有用的。

那創建一個docker應用只需要三步:編寫dockerfile、構建鏡像、運行容器

編寫dockerfile

那我們就開始用dockerfile來創建一個應用

Dockerfile是包含一系列命令的文本文件,這個文件包含6條命令

1、FROM是使用php官方鏡像,左邊是鏡像名字,右邊是標簽名字,標簽名字不寫默認是latest

2、聲明維護人員

3、RUN運行一條linux命令,我們把php代碼重定向到/tmp/index.php

4、EXPOSE聲明要開放的端口

5、WORKDIR啟動容器后默認目錄

6、CMD容器啟動后,默認執行的命令,相當于應用的入口,用php自帶的webserver監聽8000

構建鏡像

使用docker build命令生成鏡像,—tag指定鏡像的名字,左邊是名字,右邊是標簽,最后有個.表示在當前目錄查找Dockerfile。可以看到,每個命令都會有個輸入輸出,輸入是命令,輸出是給到層的id,所以,基本上每個命令都會產生一個層。最后提示鏡像構建成功,并打上鏡像標簽。

運行容器

第三,使用docker run命令運行鏡像,-p將容器的8000端口映射到本機8000端口,—name給容器起個名字。用curl對本機8000端口請求,服務器返回當前時間,說明我們構建的容器運行成功了。

請求本地8000端口,服務器返回當前時間

dockerfile常用命令

其實Dockerfile常用命令就5個:from、add、run、workdir、cmd

創建docker應用步驟

?編寫dockerfile

?構建鏡像

?運行容器

使用docker應用步驟

?拉取鏡像

?運行容器

dockerfile最佳實踐

?精簡鏡像用途

盡量讓每個鏡像的用途單一

?選擇合適基礎鏡像

選擇以alpine、busybox等基礎的鏡像

busybox:號稱操作系統里的瑞士軍刀,只有……這么大,但卻有一百多常用命令

如果你的目標是小而精,busybox是首選,因為它已經精簡到沒有bash,使用的是ash,一個兼容posix的shell

Alpine:你的目標是小但是又有一些工具的話,可以選擇alpine,它是一個面向安全的輕量linux發行版,它關注安全、性能和資源效能,比busybox功能更完善,還提供apk查詢和安裝軟件包,大小只有2-3兆。

很多官方的鏡像都有alpine的鏡像,像剛剛使用的php鏡像。

?提供維護者信息

?正確使用版本

使用明確的版本號,而非依賴于默認的latest,避免環境不一致導致的問題

?刪除臨時文件

如安裝軟件后的安裝包,如上圖2、3步驟

?提高生成速度

如內容不變的指令盡量放在前面,這樣可以復用

?減少鏡像層數

多條命令寫在一起,使生成的鏡像層數少,如上圖2、3步驟

?恰當使用multi-stage

保證最終生成鏡像最小化

3、常用命令

想使用一個鏡像,用這個命令就可以了,默認按評分排序。official如果是ok表示是官方鏡,Auto標示它是否用dickerfile進行自動化鏡像構建。

pull

一旦確定一個鏡像,通過對其名稱執行docker pull來下載。標簽默認是latest,嚴格來講,鏡像的倉庫名還應該添加倉庫地址的,默認是registry.hub.docker.com Docker images命令查找下載的鏡像。

run

使用docker run運行一個容器,it表示用交互式方式運行,最后表示要執行的命令。

其實更常用的方式是以后臺方式來執行,這時用d參數在后臺運行,運行后用exec命令進去到容器。

tag

Docker tag給鏡像一個新tag名字。

Docker images查看centos鏡像,把centos:latest打上centos:yeedomliu,這時再看會有3個centos,latest和yeedomliu的鏡像id是相同的。把centos:yeedomliu刪除,再查看latest還會存在,最后用rmi命令刪除latest就會真正把latest鏡像刪除掉。如果相同鏡像存在多個標簽,只有最后一次的rmi命令會真正刪除鏡像。

ps

Ps可以查看運行中的容器

rmi

刪除一個鏡像,同一個鏡像id的不同標簽的鏡像,使用rmi刪除最后一個鏡像才會真正刪除這個鏡像。

rm

刪除docker容器,如果運行中的容器需要加-f

diff

容器啟動后文件變化情況

logs

查看容器運行后的日志

cp

我們想從容器里面拷貝文件到宿主機,或相反的過程就可以用到cp命令

container prune

隨著使用docker時間越長,停止狀態下的容器會越來越多,這些都會占據磁盤空間

image prune

未被打標簽的鏡像可以用image prune命令清理

system prune/df

如果你覺得剛剛兩條命令執行起來麻煩,可以用docker system prune一條命令搞定

另外用system df查看docker磁盤空間

實戰

了解了docker基礎知識后,可進入相對實戰的環節

?本地開發

我們的項目使用了很多服務,如redis/mysql/mongodb等等,如果一個個運行起來,還加上配置,容易出手,也比較麻煩

kitematic:與使用命令行管理本地容器相比,你更想使用圖形工具對容器管理,官方推出的容器管理工具,通過它可以查找鏡像、創建容器、配置、啟停容器等管理。

這是配置容器端口和宿主機端口,目錄,網絡等映射界面

docker-compose

compose定位是“定義和運行多個docker容器的應用”,前身fig,目前仍然兼容fig格式的模板文件。

一條命令可以把一個復雜的應用啟動起來

日常工作中,經常碰到多個容器相互完成某項任務

docker-compose示例1

默認模板文件名叫docker-

compose.yml

,結構很簡單,每個頂級元素為服務名稱,次級信息為配置信息。這里使用了redis/mongodb/mysql/nginx鏡像,分別給它們映射了本地目錄、端口、密碼等信息,nginx鏡像需要使用redis/mysql等服務,用links命令連接進來。

docker-compose示例2

如果在本地開發,每個項目都可以像之前說的那樣配置,這里提供了另外一種做法。我把公共的資源在一開始就啟動,每個項目里只啟動nginx鏡像并關聯其它的服務即可。

公共服務compose

項目compose

?常見問題

主進程:docker啟動第一個進程稱主進程,就是id為1的進程,這個進程退出就意味著容器退出,所以想要使docker作為服務使用,這個進程是不能退出的。expose命令是聲明暴露的端口,運行時用-P才會生效。一般ports命令是做真正的端口映射,比較常用。

?架構

安裝了docker的主機,一般在一個私有網絡上

1、調用docker客戶端可以從守護進程獲取信息或發送指令

2、docker守護進程使用http協議接收來自docker客戶端的請求

3、私有docker注冊中心存儲docker鏡像

4、docker hub是由docker公司運營的最大的公共注冊中心

互聯網上也存在其他公共的注冊中心

調用 Docker客戶端可以從守護進程獲取信息或給它發送指令。守護進程是一個服務器,它使用 HTTP協議接收來自客戶端的請求并返回響應。相應地,它會向其他服務發起請求來發送和接收鏡像,使用的同樣是 HTTP協議。該服務器將接收來自命令行客戶端或被授權連接的任何人的請求。守護進程還負責在幕后處理用戶的鏡像和容器,而客戶端充當的是用戶與 REST風格 API之間的媒介。

理解這張圖的關鍵在于,當用戶在自己的機器上運行 Docker時,與其進行交互的可能是自己機器上的另一個進程,或者甚至是運行在內部網絡或互聯網上的服務。

?優化

使用小鏡像:一般來說,使用小的鏡像都相對比較優秀,如官方的鏡像基本上都有基于alpine的鏡像

事后清理:刪除鏡像里軟件包或一些臨時文件,減小鏡像大小

命令寫一行:多個命令盡量寫在一起有助于減少層數,也會減少鏡像的大小

腳本安裝:使用腳本進行初始化時,可以有效減少dockerfile的命令,同時帶來另外的問題,可讀性不好并且構建鏡像時緩存不了

扁平化鏡像:構建鏡像過程中,可能會涉及到一些敏感信息,或者用了上面的辦法鏡像依然很大,可以試試這個辦法

docker export 容器名或容器id | docker import - 鏡像標簽

multi-stage:從docker 17.05版本開始,docker支持multi-stage(多階段構建),特別適合編譯型語言,如我在一個鏡像下編譯,在另外一個很小的系統運行,如下圖,go項目在golang環境下編譯,在alpine環境下運行。