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



























