Docker初識 -- 搭建編程環(huán)境

1. 學(xué)習(xí)步驟
  1. Docker簡介
  2. Docker中的基本概念
  3. Docker安裝
  4. 設(shè)置Docker
  5. Docker的應(yīng)用操作
  6. 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的電腦(windowsLinux)上。
容器是完全使用沙箱機(jī)制,相互之間不會有任何接口(類似iPhoneapp),更重要的是容器性能開銷極低。

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. 獲取阿里云加速器地址

  1. 進(jìn)入 http://dev.aliyun.com
  1. 登錄阿里云進(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 : pythonapp
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/bashlinux的命令行工具,類似于windowcmd進(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í)際操作舉例:

啟動pythonapptraining/webapp,并綁定本機(jī)端口8000映射到容器5000端口

image.png
訪問本機(jī)
image.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.png
image.png

7.10.2. 主機(jī)拷貝到容器
docker cp f:/docker_test/文件 CONTAINER:/目標(biāo)路徑

例:


image.png
image.png
8. 數(shù)據(jù)卷

8.1. 什么是數(shù)據(jù)卷
數(shù)據(jù)卷 是一個(gè)可供一個(gè)或多個(gè)容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:

  1. 數(shù)據(jù)卷 可以在容器之間共享和重用
  2. 對 數(shù)據(jù)卷 的修改會立馬生效
  3. 對 數(shù)據(jù)卷 的更新,不會影響鏡像
  4. 數(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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容