1. 學(xué)習(xí)步驟
Docker簡介Docker中的基本概念Docker安裝- 設(shè)置
DockerDocker的應(yīng)用操作Docker搭建PHP開發(fā)環(huán)境
2. Docker介紹
2.1. Docker 是什么
Docker是一個(gè)開源的應(yīng)用容器引擎,基于Go語言開發(fā)實(shí)現(xiàn),屬于操作系統(tǒng)層面的虛擬化技術(shù)。
Docker可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級、可移植的容器中,然后發(fā)布到任何安裝有Docker的電腦(windows和Linux)上。
容器是完全使用沙箱機(jī)制,相互之間不會有任何接口(類似iPhone的app),更重要的是容器性能開銷極低。
image.png
2.2. Docker 能夠做什么
Docker可以解決虛擬機(jī)能夠解決的問題,同時(shí)也能夠解決虛擬機(jī)由于電腦資源要求過高而無法解決的問題。
虛擬機(jī)和Docker虛擬化的不同之處:
image.png
2.3. 為什么使用 Docker
1、更快速的交付和部署:
對開發(fā)和運(yùn)維員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運(yùn)行。
例如:開發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來構(gòu)建一套開發(fā)容器,開發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來部署代碼。Docker容器很輕很快!容器的啟動時(shí)間是秒級的,大量地節(jié)約開發(fā)、測試、部署的時(shí)間。
節(jié)約安裝各種開發(fā)環(huán)境的軟件的時(shí)間。
解決開發(fā)環(huán)境和生產(chǎn)環(huán)境不一致的問題。
2、更輕松的遷移和擴(kuò)展:
Docker容器幾乎可以在任意的平臺上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。 這種兼容性可以讓用戶把一個(gè)應(yīng)用程序從一個(gè)平臺直接遷移到另外一個(gè)。
3、更高的資源利用率:
Docker對系統(tǒng)資源的利用率很高,一臺主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè)Docker容器。容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開銷盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī),而Docker只需要啟動 10 個(gè)隔離的應(yīng)用容器即可。
總結(jié):
Docker背后的想法是創(chuàng)建軟件程序可移植的輕量級容器,讓其可以在任何安裝了Docker的機(jī)器上運(yùn)行,并不用關(guān)心底層操作系統(tǒng),就像野心勃勃的造船者們成功創(chuàng)建了集裝箱而不需要考慮裝在哪種船舶上一樣。
只有一個(gè)共同目標(biāo):簡化部署流程,提高生產(chǎn)力!
2.4. Docker 項(xiàng)目架構(gòu)
Docker使用C/S架構(gòu),通過docker客戶端連接到Docker服務(wù)器上從而管理Docker服務(wù)器里面的鏡像和容器,類似于git的架構(gòu)。
image.png
2.5. Docker 的基本概念
2.5.1. 鏡像(
Image)
Docker鏡像(Image)就是一個(gè)只讀的模板。例如:一個(gè)鏡像可以包含一個(gè)完整的操作系統(tǒng)環(huán)境,里面僅安裝了Apache或用戶需要的其它應(yīng)用程序。鏡像可以用來創(chuàng)建Docker容器,一個(gè)鏡像可以創(chuàng)建很多容器。Docker提供了一個(gè)很簡單的機(jī)制來創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來直接使用。
2.5.2. 容器(
Container)
Docker利用容器(Container)來運(yùn)行應(yīng)用。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動、開始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺??梢园讶萜骺醋鍪且粋€(gè)簡易版的Linux環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
文件系統(tǒng)隔離技術(shù)使得Docker成為了一個(gè)非常有潛力的虛擬化技術(shù)。在容器中可以對文件進(jìn)行修改、刪除、創(chuàng)建。
2.5.3. 倉庫(
Registry)
倉庫(Repository)是集中存放鏡像文件的場所。有時(shí)候會把倉庫和倉庫注冊服務(wù)器(Registry)混為一談,并不嚴(yán)格區(qū)分。實(shí)際上,倉庫注冊服務(wù)器上往往存放著多個(gè)倉庫,每個(gè)倉庫中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括 時(shí)速云 、網(wǎng)易云 等,可以提供大陸用戶更穩(wěn)定快速的訪問。當(dāng)然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有倉庫。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉庫上pull下來就可以了。
Docker倉庫的概念跟Git類似,注冊服務(wù)器可以理解為GitHub這樣的托管服務(wù)。
3. Windows 10 下安裝 Docker
3.1. 系統(tǒng)要求
一、64bit Windows 10 Build 10586 以上專業(yè)版或者企業(yè)版本,電腦支持虛擬化。
二、開啟Hyper-V。
三、win7、win8 等需要利用 docker toolbox 來安裝。
3.1.1. 查看系統(tǒng)版本和版本號
查看系統(tǒng)信息:
image.png
查看版本號:
win+R 輸入cmd進(jìn)入 dos 系統(tǒng)就可以看到
image.png
3.1.2. 電腦支持虛擬化
對于
windows10系統(tǒng)來說,你可以在 任務(wù)管理器->性能 中查看到你的電腦是否開啟了虛擬化
image.png
在BIOS下開啟虛擬化虛擬化:
image.png
3.1.3. 開啟Hyper-V
windows設(shè)置 -> 應(yīng)用 -> 應(yīng)用和功能 -> 程序和功能 -> 啟用和關(guān)閉Windows功能 -> 選中Hyber-V -> 重啟
選中Hyper-V后確定重啟電腦
image.png
注意:Hyper-V 是與 VMware 是沖突的,兩者不能并存,只能擇其一,如果你必須要使用虛擬機(jī)的話,比如 Vagrant 之類的工具,亦可在虛擬機(jī)內(nèi)運(yùn)行一個(gè) Linux 系統(tǒng),然后根據(jù) Linux 系統(tǒng) 的安裝流程處理,在虛擬機(jī)內(nèi)運(yùn)行 Docker 作為開發(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. 啟動
啟動之后會在電腦的右下角查看到
docker的圖標(biāo)image.png
4. 簡單使用 Docker
4.1. 使用Docker的前提
必須通過 dos命令 行來操作
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. 鏡像加速
鑒于國內(nèi)網(wǎng)絡(luò)問題,后續(xù)拉取
Docker鏡像十分緩慢,強(qiáng)烈建議安裝Docker之后配置 國內(nèi)鏡像加速。
5.2.1. 獲取阿里云加速器地址
- 進(jìn)入 http://dev.aliyun.com
登錄阿里云進(jìn)入后臺
image.png
5.2.2. 配置docker加速器
對于使用
Windows 10的系統(tǒng),在系統(tǒng)右下角托盤Docker圖標(biāo)內(nèi)右鍵菜單選擇Settings,打開配置窗口后左側(cè)導(dǎo)航菜單選擇Daemon。在Registry mirrors一欄中填寫加速器地址你的專屬加速器地址,之后點(diǎn)擊Apply保存后Docker就會重啟并應(yīng)用配置的鏡像地址了。
image.png
5.2.3. 檢查加速器是否生效
手動檢查加速器配置是否生效,在命令行執(zhí)行
docker info,如果從結(jié)果中看到了如下內(nèi)容,說明配置成功。
image.png
6. Docker 鏡像操作
6.1. 獲取鏡像(下載鏡像到本地)
Docker Hub 上有大量的高質(zhì)量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。
從
Docker鏡像倉庫獲取鏡像的命令是docker pull。其命令格式為:
docker pull[選項(xiàng)] [Docker Registry地址 [:端口號] /] 鏡像名 [:標(biāo)簽]
具體的選項(xiàng)可以通過 docker pull --help
Docker 鏡像倉庫地址:地址的格式一般是<域名/IP>[:端口號]。默認(rèn)地址是 Docker Hub,但我們已經(jīng)將其修改為阿里云的加速器。
例如:
docker pull training/webapp
docker pull busybox
docker pull centos
備注:↓
training/webapp:python的app
busybox:是一個(gè)集成了三百多個(gè)最常用Linux命令和工具的軟件,簡化的Linux系統(tǒng)
centos:centos系統(tǒng)容器
6.2. 列出本地鏡像
要想列出已經(jīng)下載下來的鏡像,可以使用
docker image ls命令。
image.png
列表包含了 鏡像名、版本、鏡像 ID、創(chuàng)建時(shí)間 以及所占用的空間。
6.3. 刪除本地鏡像
如果要刪除本地的鏡像,可以使用
docker image rm命令,其格式為:
docker image rm[選項(xiàng)] <鏡像1> [<鏡像2> ...]
備注:
用 ID、鏡像名、摘要刪除鏡像
其中,<鏡像> 可以是 鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要。
我們可以用鏡像的完整 ID,也稱為 長 ID,來刪除鏡像。使用腳本的時(shí)候可能會用長 ID,但是人工輸入就太累了,所以更多的時(shí)候是用 短 ID 來刪除鏡像。docker image ls 默認(rèn)列出的就已經(jīng)是短 ID 了,一般取前3個(gè)字符以上,只要足夠區(qū)分于別的鏡像就可以了。
例如:
docker image rm training/webapp
7. Docker 容器操作
7.1. 說在前面
/bin/bash是linux的命令行工具,類似于window的cmd進(jìn)入dos系統(tǒng)
7.2. 查看容器
docker ps#查看啟動的容器
docker ps -a#查看所有容器,包含沒有啟動的容器
7.3. 啟動容器
啟動容器有兩種方式,一種是基于鏡像新建一個(gè)容器并啟動,另外一個(gè)是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動。
因?yàn)?Docker 的容器實(shí)在太輕量級了,很多時(shí)候用戶都是隨時(shí)刪除和新創(chuàng)建容器。
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND: 容器啟動后進(jìn)入容器中要執(zhí)行的命令.
OPTIONS(常用選項(xiàng))
-d:讓Docker在后臺運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下
-t:選項(xiàng)讓Docker分配一個(gè)偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上
-i:則讓容器的標(biāo)準(zhǔn)輸入保持打開。
--name:為容器命名
-v:創(chuàng)建數(shù)據(jù)卷
-p:綁定端口
7.3.1. 基于鏡像新建一個(gè)容器并啟動
docker run
例如:
docker run -p 8000:5000 –-name web training/webapp
實(shí)際操作舉例:
啟動
python的app:training/webapp,并綁定本機(jī)端口8000映射到容器5000端口
訪問本機(jī)image.pngimage.png
7.3.2. 后臺運(yùn)行
更多的時(shí)候,需要讓 Docker 在后臺運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機(jī)下。此時(shí),可以通過添加 -d 參數(shù)來實(shí)現(xiàn)。
docker run -d CONTAINER [CONTAINER...]
例如:
docker run –d –p 8000:5000 training/webapp
7.3.3. 交互運(yùn)行
啟動一個(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)輸入 保持打開。
在交互模式下,用戶可以通過所創(chuàng)建的終端來輸入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. 啟動一個(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è)容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
- 數(shù)據(jù)卷 可以在容器之間共享和重用
- 對 數(shù)據(jù)卷 的修改會立馬生效
- 對 數(shù)據(jù)卷 的更新,不會影響鏡像
- 數(shù)據(jù)卷 默認(rèn)會一直存在,即使容器被刪除
理解:
1.數(shù)據(jù)卷 的使用,類似于 Linux 下對目錄或文件進(jìn)行 mount,鏡像中的被指定為掛載點(diǎn)的目錄中的文件會隱藏掉,能顯示看的是掛載的數(shù)據(jù)卷。
2.相當(dāng)于將容器中的目錄 和 本機(jī)目錄映射起來,在本機(jī)目錄中修改代碼,增加文件等,會實(shí)時(shí)反映在容器目錄中
8.2. 為什么要使用數(shù)據(jù)卷
方便將本地主機(jī)中的代碼運(yùn)行在docker容器中
8.3. 掛載數(shù)據(jù)卷的前提
授權(quán)本地磁盤
image.png
注意:點(diǎn)擊Apply的時(shí)候,會驗(yàn)證本機(jī)賬戶,沒有設(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開發(fā)環(huán)境
9.1. 下載阿里云的lamp鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/itsource/centos-lamp:[鏡像版本號]
鏡像版本號就是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)輸入保持打開。
-d 則讓容器在后臺運(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說明:
· -a :提交的鏡像作者;
· -m :提交時(shí)的說明文字;
· -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)



























