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)極低因妇。
image.png
2.2. Docker
能夠做什么
Docker
可以解決虛擬機(jī)能夠解決的問(wèn)題问潭,同時(shí)也能夠解決虛擬機(jī)由于電腦資源要求過(guò)高而無(wú)法解決的問(wèn)題。
虛擬機(jī)和Docker
虛擬化的不同之處:
image.png
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)痹仙。
image.png
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)信息:
image.png
查看版本號(hào):
win+R 輸入cmd
進(jìn)入 dos 系統(tǒng)就可以看到
image.png
3.1.2. 電腦支持虛擬化
對(duì)于
windows10
系統(tǒng)來(lái)說(shuō),你可以在 任務(wù)管理器->性能 中查看到你的電腦是否開(kāi)啟了虛擬化
image.png
在BIOS下開(kāi)啟虛擬化虛擬化:
image.png
3.1.3. 開(kāi)啟Hyper-V
windows設(shè)置 -> 應(yīng)用 -> 應(yīng)用和功能 -> 程序和功能 -> 啟用和關(guān)閉Windows功能 -> 選中Hyber-V -> 重啟
選中Hyper-V后確定重啟電腦
image.png
注意: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)image.png
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):
image.png
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)
image.png
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)用配置的鏡像地址了幌缝。
image.png
5.2.3. 檢查加速器是否生效
手動(dòng)檢查加速器配置是否生效,在命令行執(zhí)行
docker info
诫欠,如果從結(jié)果中看到了如下內(nèi)容涵卵,說(shuō)明配置成功浴栽。
image.png
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
命令英遭。
image.png
列表包含了 鏡像名间护、版本、鏡像 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ī)image.pngimage.png
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容器中image.png
7.4. 終止容器
docker stop CONTAINER [CONTAINER...]
例:
image.png
7.5. 啟動(dòng)一個(gè)停止的容器
docker start CONTAINER [CONTAINER...]
例:
image.png
7.6. 重啟容器
docker restart CONTAINER [CONTAINER...]
例:
image.png
7.7. 刪除容器
docker rm CONTAINER [CONTAINER...]
注意:刪除容器前 先關(guān)閉容器
例:
image.png
7.8. 獲取容器的輸出信息
docker logs CONTAINER [CONTAINER...]
例:
image.png
7.9. 進(jìn)入容器
docker exec –i –t CONTAINER /bin/bash
例:
image.png
7.10. 主機(jī)和容器間拷貝文件
7.10.1. 容器拷貝到主機(jī)
docker cp CONTAINER:/opt/webapp/app.py d:/www
備注:
/opt/webapp/app.py: 容器中的文件
d:/www: 主機(jī)文件夾
例:
image.pngimage.png
7.10.2. 主機(jī)拷貝到容器
docker cp f:/docker_test/文件 CONTAINER:/目標(biāo)路徑
例:
image.pngimage.png
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)
image.png
注意:點(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)