1. 學(xué)習(xí)步驟
Docker
簡(jiǎn)介Docker
中的基本概念Docker
安裝- 設(shè)置
Docker
Docker
的應(yīng)用操作Docker
搭建PHP
開(kāi)發(fā)環(huán)境
2. Docker
介紹
2.1. Docker
是什么
Docker
是一個(gè)開(kāi)源的應(yīng)用容器引擎拗盒,基于Go
語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn),屬于操作系統(tǒng)層面的虛擬化技術(shù)。
Docker
可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴(lài)包到一個(gè)輕量級(jí)隙弛、可移植的容器中,然后發(fā)布到任何安裝有Docker
的電腦(windows
和Linux
)上。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類(lèi)似iPhone
的app
),更重要的是容器性能開(kāi)銷(xiāo)極低因妇。
2.2. Docker
能夠做什么
Docker
可以解決虛擬機(jī)能夠解決的問(wèn)題问潭,同時(shí)也能夠解決虛擬機(jī)由于電腦資源要求過(guò)高而無(wú)法解決的問(wèn)題。
虛擬機(jī)和Docker
虛擬化的不同之處:
2.3. 為什么使用 Docker
1婚被、更快速的交付和部署:
對(duì)開(kāi)發(fā)和運(yùn)維員來(lái)說(shuō)狡忙,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行址芯。
例如:開(kāi)發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來(lái)構(gòu)建一套開(kāi)發(fā)容器去枷,開(kāi)發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來(lái)部署代碼是复。Docker
容器很輕很快!容器的啟動(dòng)時(shí)間是秒級(jí)的竖螃,大量地節(jié)約開(kāi)發(fā)淑廊、測(cè)試、部署的時(shí)間特咆。
節(jié)約安裝各種開(kāi)發(fā)環(huán)境的軟件的時(shí)間季惩。
解決開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境不一致的問(wèn)題。
2腻格、更輕松的遷移和擴(kuò)展:
Docker
容器幾乎可以在任意的平臺(tái)上運(yùn)行画拾,包括物理機(jī)、虛擬機(jī)菜职、公有云青抛、私有云、個(gè)人電腦酬核、服務(wù)器等蜜另。 這種兼容性可以讓用戶把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)。
3嫡意、更高的資源利用率:
Docker
對(duì)系統(tǒng)資源的利用率很高举瑰,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè)Docker
容器。容器除了運(yùn)行其中應(yīng)用外蔬螟,基本不消耗額外的系統(tǒng)資源此迅,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開(kāi)銷(xiāo)盡量小旧巾。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī)耸序,而Docker
只需要啟動(dòng) 10 個(gè)隔離的應(yīng)用容器即可。
總結(jié):
Docker
背后的想法是創(chuàng)建軟件程序可移植的輕量級(jí)容器菠齿,讓其可以在任何安裝了Docker
的機(jī)器上運(yùn)行佑吝,并不用關(guān)心底層操作系統(tǒng),就像野心勃勃的造船者們成功創(chuàng)建了集裝箱而不需要考慮裝在哪種船舶上一樣绳匀。
只有一個(gè)共同目標(biāo):簡(jiǎn)化部署流程芋忿,提高生產(chǎn)力炸客!
2.4. Docker
項(xiàng)目架構(gòu)
Docker
使用C/S
架構(gòu),通過(guò)docker
客戶端連接到Docker
服務(wù)器上從而管理Docker
服務(wù)器里面的鏡像和容器戈钢,類(lèi)似于git
的架構(gòu)痹仙。
2.5. Docker
的基本概念
2.5.1. 鏡像(
Image
)
Docker
鏡像(Image
)就是一個(gè)只讀的模板。例如:一個(gè)鏡像可以包含一個(gè)完整的操作系統(tǒng)環(huán)境殉了,里面僅安裝了Apache
或用戶需要的其它應(yīng)用程序开仰。鏡像可以用來(lái)創(chuàng)建Docker
容器,一個(gè)鏡像可以創(chuàng)建很多容器薪铜。Docker
提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像众弓,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來(lái)直接使用。
2.5.2. 容器(
Container
)
Docker
利用容器(Container
)來(lái)運(yùn)行應(yīng)用隔箍。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例谓娃。它可以被啟動(dòng)、開(kāi)始蜒滩、停止滨达、刪除。每個(gè)容器都是相互隔離的俯艰、保證安全的平臺(tái)捡遍。可以把容器看做是一個(gè)簡(jiǎn)易版的Linux
環(huán)境(包括root
用戶權(quán)限竹握、進(jìn)程空間画株、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
文件系統(tǒng)隔離技術(shù)使得Docker
成為了一個(gè)非常有潛力的虛擬化技術(shù)涩搓。在容器中可以對(duì)文件進(jìn)行修改污秆、刪除、創(chuàng)建昧甘。
2.5.3. 倉(cāng)庫(kù)(
Registry
)
倉(cāng)庫(kù)(Repository
)是集中存放鏡像文件的場(chǎng)所良拼。有時(shí)候會(huì)把倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)器(Registry
)混為一談,并不嚴(yán)格區(qū)分充边。實(shí)際上庸推,倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放著多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像浇冰,每個(gè)鏡像有不同的標(biāo)簽(tag
)贬媒。
倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public
)和私有倉(cāng)庫(kù)(Private
)兩種形式。最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub
肘习,存放了數(shù)量龐大的鏡像供用戶下載际乘。國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括 時(shí)速云 、網(wǎng)易云 等漂佩,可以提供大陸用戶更穩(wěn)定快速的訪問(wèn)脖含。當(dāng)然罪塔,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有倉(cāng)庫(kù)。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push
命令將它上傳到公有或者私有倉(cāng)庫(kù)养葵,這樣下次在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候征堪,只需要從倉(cāng)庫(kù)上pull
下來(lái)就可以了。
Docker
倉(cāng)庫(kù)的概念跟Git
類(lèi)似关拒,注冊(cè)服務(wù)器可以理解為GitHub
這樣的托管服務(wù)佃蚜。
3. Windows 10
下安裝 Docker
3.1. 系統(tǒng)要求
一、64bit Windows 10 Build 10586 以上專(zhuān)業(yè)版或者企業(yè)版本着绊,電腦支持虛擬化谐算。
二、開(kāi)啟Hyper-V归露。
三氯夷、win7、win8 等需要利用 docker toolbox 來(lái)安裝靶擦。
3.1.1. 查看系統(tǒng)版本和版本號(hào)
查看系統(tǒng)信息:
查看版本號(hào):
win+R 輸入cmd
進(jìn)入 dos 系統(tǒng)就可以看到
3.1.2. 電腦支持虛擬化
對(duì)于
windows10
系統(tǒng)來(lái)說(shuō),你可以在 任務(wù)管理器->性能 中查看到你的電腦是否開(kāi)啟了虛擬化
在BIOS下開(kāi)啟虛擬化虛擬化:
3.1.3. 開(kāi)啟Hyper-V
windows設(shè)置 -> 應(yīng)用 -> 應(yīng)用和功能 -> 程序和功能 -> 啟用和關(guān)閉Windows功能 -> 選中Hyber-V -> 重啟
選中Hyper-V后確定重啟電腦
注意:Hyper-V
是與 VMware
是沖突的雇毫,兩者不能并存玄捕,只能擇其一,如果你必須要使用虛擬機(jī)的話棚放,比如 Vagrant
之類(lèi)的工具枚粘,亦可在虛擬機(jī)內(nèi)運(yùn)行一個(gè) Linux
系統(tǒng),然后根據(jù) Linux
系統(tǒng) 的安裝流程處理飘蚯,在虛擬機(jī)內(nèi)運(yùn)行 Docker
作為開(kāi)發(fā)環(huán)境馍迄。
3.2. 安裝Docker for Windows
3.2.1. 下載Docker for Windows
https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe
3.2.2. 安裝
雙擊下載的
Docker for Windows Installer.exe
安裝完畢即可。
3.2.3. 啟動(dòng)
啟動(dòng)之后會(huì)在電腦的右下角查看到
docker
的圖標(biāo)
4. 簡(jiǎn)單使用 Docker
4.1. 使用Docker
的前提
必須通過(guò) dos命令 行來(lái)操作
Docker
局骤。win+R 輸入cmd
進(jìn)入 dos 系統(tǒng)
4.2. Docker
命令初體驗(yàn)
docker info
#查看docker信息
docker version
#查看docker版本
docker run hello-world
#運(yùn)行第一個(gè)容器
5. 設(shè)置Docker
5.1. 切換到Linux
容器下
docker for windows
默認(rèn)使用linxu
容器攀圈。如有需要可切換到win
容器下。
右鍵點(diǎn)擊docker
圖標(biāo):
5.2. 鏡像加速
鑒于國(guó)內(nèi)網(wǎng)絡(luò)問(wèn)題峦甩,后續(xù)拉取
Docker
鏡像十分緩慢赘来,強(qiáng)烈建議安裝Docker
之后配置 國(guó)內(nèi)鏡像加速。
5.2.1. 獲取阿里云加速器地址
- 進(jìn)入 http://dev.aliyun.com
登錄阿里云進(jìn)入后臺(tái)
5.2.2. 配置docker
加速器
對(duì)于使用
Windows 10
的系統(tǒng)凯傲,在系統(tǒng)右下角托盤(pán)Docker
圖標(biāo)內(nèi)右鍵菜單選擇Settings
犬辰,打開(kāi)配置窗口后左側(cè)導(dǎo)航菜單選擇Daemon
。在Registry mirrors
一欄中填寫(xiě)加速器地址你的專(zhuān)屬加速器地址冰单,之后點(diǎn)擊Apply
保存后Docker
就會(huì)重啟并應(yīng)用配置的鏡像地址了幌缝。
5.2.3. 檢查加速器是否生效
手動(dòng)檢查加速器配置是否生效,在命令行執(zhí)行
docker info
诫欠,如果從結(jié)果中看到了如下內(nèi)容涵卵,說(shuō)明配置成功浴栽。
6. Docker
鏡像操作
6.1. 獲取鏡像(下載鏡像到本地)
Docker Hub 上有大量的高質(zhì)量的鏡像可以用,這里我們就說(shuō)一下怎么獲取這些鏡像缘厢。
從
Docker
鏡像倉(cāng)庫(kù)獲取鏡像的命令是docker pull
吃度。其命令格式為:
docker pull
[選項(xiàng)] [Docker Registry
地址 [:端口號(hào)] /] 鏡像名 [:標(biāo)簽]
具體的選項(xiàng)可以通過(guò) docker pull --help
Docker
鏡像倉(cāng)庫(kù)地址:地址的格式一般是<域名/IP>[:端口號(hào)]。默認(rèn)地址是 Docker Hub
贴硫,但我們已經(jīng)將其修改為阿里云的加速器椿每。
例如:
docker pull training/webapp
docker pull busybox
docker pull centos
備注:↓
training/webapp
:python
的app
busybox
:是一個(gè)集成了三百多個(gè)最常用Linux
命令和工具的軟件,簡(jiǎn)化的Linux
系統(tǒng)
centos
:centos
系統(tǒng)容器
6.2. 列出本地鏡像
要想列出已經(jīng)下載下來(lái)的鏡像,可以使用
docker image ls
命令英遭。
列表包含了 鏡像名间护、版本、鏡像 ID挖诸、創(chuàng)建時(shí)間 以及所占用的空間汁尺。
6.3. 刪除本地鏡像
如果要?jiǎng)h除本地的鏡像,可以使用
docker image rm
命令多律,其格式為:
docker image rm
[選項(xiàng)] <鏡像1> [<鏡像2> ...]
備注:
用 ID痴突、鏡像名、摘要?jiǎng)h除鏡像
其中狼荞,<鏡像> 可以是 鏡像短 ID辽装、鏡像長(zhǎng) ID、鏡像名 或者 鏡像摘要相味。
我們可以用鏡像的完整 ID拾积,也稱(chēng)為 長(zhǎng) ID,來(lái)刪除鏡像丰涉。使用腳本的時(shí)候可能會(huì)用長(zhǎng) ID拓巧,但是人工輸入就太累了,所以更多的時(shí)候是用 短 ID 來(lái)刪除鏡像一死。docker image ls 默認(rèn)列出的就已經(jīng)是短 ID 了肛度,一般取前3個(gè)字符以上,只要足夠區(qū)分于別的鏡像就可以了投慈。
例如:
docker image rm training/webapp
7. Docker
容器操作
7.1. 說(shuō)在前面
/bin/bash
是linux
的命令行工具贤斜,類(lèi)似于window
的cmd
進(jìn)入dos
系統(tǒng)
7.2. 查看容器
docker ps
#查看啟動(dòng)的容器
docker ps -a
#查看所有容器,包含沒(méi)有啟動(dòng)的容器
7.3. 啟動(dòng)容器
啟動(dòng)容器有兩種方式逛裤,一種是基于鏡像新建一個(gè)容器并啟動(dòng)瘩绒,另外一個(gè)是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動(dòng)。
因?yàn)?Docker 的容器實(shí)在太輕量級(jí)了带族,很多時(shí)候用戶都是隨時(shí)刪除和新創(chuàng)建容器锁荔。
語(yǔ)法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND
: 容器啟動(dòng)后進(jìn)入容器中要執(zhí)行的命令.
OPTIONS
(常用選項(xiàng))
-d
:讓Docker
在后臺(tái)運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下
-t
:選項(xiàng)讓Docker
分配一個(gè)偽終端(pseudo-tty
)并綁定到容器的標(biāo)準(zhǔn)輸入上
-i
:則讓容器的標(biāo)準(zhǔn)輸入保持打開(kāi)。
--name
:為容器命名
-v
:創(chuàng)建數(shù)據(jù)卷
-p
:綁定端口
7.3.1. 基于鏡像新建一個(gè)容器并啟動(dòng)
docker run
例如:
docker run -p 8000:5000 –-name web training/webapp
實(shí)際操作舉例:
啟動(dòng)
python
的app
:training/webapp
蝙砌,并綁定本機(jī)端口8000映射到容器5000端口
訪問(wèn)本機(jī)
7.3.2. 后臺(tái)運(yùn)行
更多的時(shí)候阳堕,需要讓 Docker 在后臺(tái)運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下跋理。此時(shí)蔑匣,可以通過(guò)添加 -d 參數(shù)來(lái)實(shí)現(xiàn)力奋。
docker run -d CONTAINER [CONTAINER...]
例如:
docker run –d –p 8000:5000 training/webapp
7.3.3. 交互運(yùn)行
啟動(dòng)一個(gè)
bash
終端,允許用戶進(jìn)行交互酥艳。
docker run -t -i CONTAINER [CONTAINER...] /bin/bash
-t
選項(xiàng)讓Docker
分配一個(gè)偽終端(pseudo-tty
)并綁定到容器的 標(biāo)準(zhǔn)輸入 上
-i
則讓容器的 標(biāo)準(zhǔn)輸入 保持打開(kāi)壹堰。
在交互模式下拭卿,用戶可以通過(guò)所創(chuàng)建的終端來(lái)輸入linux命令
例如:
docker run -i -t centos /bin/bash
創(chuàng)建centos容器并且進(jìn)入centos容器中
7.4. 終止容器
docker stop CONTAINER [CONTAINER...]
例:
7.5. 啟動(dòng)一個(gè)停止的容器
docker start CONTAINER [CONTAINER...]
例:
7.6. 重啟容器
docker restart CONTAINER [CONTAINER...]
例:
7.7. 刪除容器
docker rm CONTAINER [CONTAINER...]
注意:刪除容器前 先關(guān)閉容器
例:
7.8. 獲取容器的輸出信息
docker logs CONTAINER [CONTAINER...]
例:
7.9. 進(jìn)入容器
docker exec –i –t CONTAINER /bin/bash
例:
7.10. 主機(jī)和容器間拷貝文件
7.10.1. 容器拷貝到主機(jī)
docker cp CONTAINER:/opt/webapp/app.py d:/www
備注:
/opt/webapp/app.py: 容器中的文件
d:/www: 主機(jī)文件夾
例:
7.10.2. 主機(jī)拷貝到容器
docker cp f:/docker_test/文件 CONTAINER:/目標(biāo)路徑
例:
8. 數(shù)據(jù)卷
8.1. 什么是數(shù)據(jù)卷
數(shù)據(jù)卷 是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過(guò) UFS贱纠,可以提供很多有用的特性:
- 數(shù)據(jù)卷 可以在容器之間共享和重用
- 對(duì) 數(shù)據(jù)卷 的修改會(huì)立馬生效
- 對(duì) 數(shù)據(jù)卷 的更新峻厚,不會(huì)影響鏡像
- 數(shù)據(jù)卷 默認(rèn)會(huì)一直存在,即使容器被刪除
理解:
1.數(shù)據(jù)卷 的使用谆焊,類(lèi)似于 Linux
下對(duì)目錄或文件進(jìn)行 mount
惠桃,鏡像中的被指定為掛載點(diǎn)的目錄中的文件會(huì)隱藏掉,能顯示看的是掛載的數(shù)據(jù)卷辖试。
2.相當(dāng)于將容器中的目錄 和 本機(jī)目錄映射起來(lái)辜王,在本機(jī)目錄中修改代碼,增加文件等罐孝,會(huì)實(shí)時(shí)反映在容器目錄中
8.2. 為什么要使用數(shù)據(jù)卷
方便將本地主機(jī)中的代碼運(yùn)行在docker
容器中
8.3. 掛載數(shù)據(jù)卷的前提
授權(quán)本地磁盤(pán)
注意:點(diǎn)擊Apply的時(shí)候誓禁,會(huì)驗(yàn)證本機(jī)賬戶,沒(méi)有設(shè)置密碼的話肾档,去設(shè)置一個(gè)吧。
8.4. 掛載一個(gè)主機(jī)目錄作為數(shù)據(jù)卷
docker run -d -P 8000:5000 --name web -v f:/docker:/opt/webapp training/webapp
9. Docker應(yīng)用-搭建PHP開(kāi)發(fā)環(huán)境
9.1. 下載阿里云的lamp鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/itsource/centos-lamp:[鏡像版本號(hào)]
鏡像版本號(hào)就是TAG的值
9.2. 創(chuàng)建lamp容器并且運(yùn)行
docker run -itd -p 80:80 -p 3306:3306 --name lamp --privileged=true -v D:/www/default:/data/wwwroot/default ec258725b54b /usr/sbin/init
-i選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上辫继,
-t 則讓容器的標(biāo)準(zhǔn)輸入保持打開(kāi)怒见。
-d 則讓容器在后臺(tái)運(yùn)行。
--name lamp為容器起名為lamp
--privileged=true 讓container內(nèi)的root擁有真正的root權(quán)限姑宽。
-v 創(chuàng)建數(shù)據(jù)卷遣耍,將本地主機(jī)目錄掛著到容器的指定目錄中
10. 制作阿里云鏡像
10.1. 制作本地鏡像
docker commit -a "itsource.com" -m "this is image" 容器ID 鏡像名字:版本
OPTIONS說(shuō)明:
· -a :提交的鏡像作者;
· -m :提交時(shí)的說(shuō)明文字炮车;
· -p :在commit時(shí)舵变,將容器暫停。
10.2. 上傳阿里云
進(jìn)入阿里云演示
10.3. 導(dǎo)出鏡像到本地
docker save d2b9f203546d -o d:/www/centos-lamp-v2.tar
10.4. 加載本地鏡像文件
docker load -i d:/www/centos-lamp-v2.tar
安裝wget
yum install wget –y
備份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo <u>http://mirrors.aliyun.com/repo/Centos-7.repo</u>
解決bash: service: command not found
yum install initscripts.x86_64 –y
yum install net-tools
docker run -it -p 80:80 --name lamp2 --privileged=true itsource/centos-lamp /usr/sbin/init
docker run -itd -p 80:80 --name lamp3 --privileged=true -v /data/wwwroot/www.baidu.com:/data/wwwroot/www.baidu.com itsource/centos-lamp /usr/sbin/init
docker rm $(docker ps -a -q)