Docker初識 -- 搭建編程環境

1. 學習步驟
  1. Docker簡介
  2. Docker中的基本概念
  3. Docker安裝
  4. 設置Docker
  5. Docker的應用操作
  6. Docker搭建PHP開發環境
2. Docker介紹

2.1. Docker 是什么

Docker是一個開源的應用容器引擎,基于Go 語言開發實現,屬于操作系統層面的虛擬化技術。
Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何安裝有Docker的電腦(windowsLinux)上。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似iPhoneapp),更重要的是容器性能開銷極低。

image.png

2.2. Docker 能夠做什么

Docker可以解決虛擬機能夠解決的問題,同時也能夠解決虛擬機由于電腦資源要求過高而無法解決的問題。
虛擬機和Docker虛擬化的不同之處:

image.png

2.3. 為什么使用 Docker

1、更快速的交付和部署:
對開發和運維員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼。 Docker 容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測試、部署的時間。
節約安裝各種開發環境的軟件的時間。
解決開發環境和生產環境不一致的問題。
2、更輕松的遷移和擴展:
Docker 容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。 這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個。
3、更高的資源利用率:
Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器。容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用容器即可。
總結:
Docker背后的想法是創建軟件程序可移植的輕量級容器,讓其可以在任何安裝了Docker的機器上運行,并不用關心底層操作系統,就像野心勃勃的造船者們成功創建了集裝箱而不需要考慮裝在哪種船舶上一樣。
只有一個共同目標:簡化部署流程,提高生產力!

2.4. Docker 項目架構

Docker使用C/S架構,通過docker客戶端連接到Docker服務器上從而管理Docker服務器里面的鏡像和容器,類似于git的架構。

image.png

2.5. Docker 的基本概念

2.5.1. 鏡像( Image
Docker 鏡像(Image)就是一個只讀的模板。例如:一個鏡像可以包含一個完整的操作系統環境,里面僅安裝了 Apache 或用戶需要的其它應用程序。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用。

2.5.2. 容器(Container
Docker 利用容器(Container)來運行應用。容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
文件系統隔離技術使得Docker成為了一個非常有潛力的虛擬化技術。在容器中可以對文件進行修改、刪除、創建。

2.5.3. 倉庫(Registry
倉庫(Repository)是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務器(Registry)混為一談,并不嚴格區分。實際上,倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括 時速云 、網易云 等,可以提供大陸用戶更穩定快速的訪問。當然,用戶也可以在本地網絡內創建一個私有倉庫。
當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了。
Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務。

3. Windows 10 下安裝 Docker

3.1. 系統要求

一、64bit Windows 10 Build 10586 以上專業版或者企業版本,電腦支持虛擬化。
二、開啟Hyper-V。
三、win7、win8 等需要利用 docker toolbox 來安裝。

3.1.1. 查看系統版本和版本號

查看系統信息:

image.png

查看版本號:
win+R 輸入 cmd 進入 dos 系統就可以看到
image.png

3.1.2. 電腦支持虛擬化

對于windows10系統來說,你可以在 任務管理器->性能 中查看到你的電腦是否開啟了虛擬化

image.png

在BIOS下開啟虛擬化虛擬化:
image.png

3.1.3. 開啟Hyper-V

windows設置 -> 應用 -> 應用和功能 -> 程序和功能 -> 啟用和關閉Windows功能 -> 選中Hyber-V -> 重啟
選中Hyper-V后確定重啟電腦


image.png

注意:Hyper-V 是與 VMware 是沖突的,兩者不能并存,只能擇其一,如果你必須要使用虛擬機的話,比如 Vagrant 之類的工具,亦可在虛擬機內運行一個 Linux 系統,然后根據 Linux 系統 的安裝流程處理,在虛擬機內運行 Docker 作為開發環境。

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的圖標

image.png

4. 簡單使用 Docker

4.1. 使用Docker的前提

必須通過 dos命令 行來操作Docker。win+R 輸入 cmd 進入 dos 系統

4.2. Docker命令初體驗

docker info #查看docker信息
docker version #查看docker版本
docker run hello-world #運行第一個容器

5. 設置Docker

5.1. 切換到Linux容器下

docker for windows 默認使用linxu容器。如有需要可切換到win容器下。
右鍵點擊docker圖標:

image.png

5.2. 鏡像加速

鑒于國內網絡問題,后續拉取 Docker 鏡像十分緩慢,強烈建議安裝 Docker 之后配置 國內鏡像加速。

5.2.1. 獲取阿里云加速器地址

  1. 進入 http://dev.aliyun.com
  1. 登錄阿里云進入后臺


    image.png

5.2.2. 配置docker加速器

對于使用 Windows 10 的系統,在系統右下角托盤 Docker 圖標內右鍵菜單選擇Settings,打開配置窗口后左側導航菜單選擇 Daemon。在 Registry mirrors 一欄中填寫加速器地址你的專屬加速器地址,之后點擊 Apply 保存后 Docker 就會重啟并應用配置的鏡像地址了。

image.png

5.2.3. 檢查加速器是否生效

手動檢查加速器配置是否生效,在命令行執行 docker info,如果從結果中看到了如下內容,說明配置成功。

image.png

6. Docker 鏡像操作

6.1. 獲取鏡像(下載鏡像到本地)
Docker Hub 上有大量的高質量的鏡像可以用,這里我們就說一下怎么獲取這些鏡像。

Docker 鏡像倉庫獲取鏡像的命令是docker pull。其命令格式為:
docker pull [選項] [Docker Registry 地址 [:端口號] /] 鏡像名 [:標簽]

具體的選項可以通過 docker pull --help

Docker 鏡像倉庫地址:地址的格式一般是<域名/IP>[:端口號]。默認地址是 Docker Hub,但我們已經將其修改為阿里云的加速器。

例如:

docker pull training/webapp
docker pull busybox
docker pull centos
備注:↓
training/webapp : pythonapp
busybox:是一個集成了三百多個最常用Linux命令和工具的軟件,簡化的Linux系統
centos: centos系統容器

6.2. 列出本地鏡像

要想列出已經下載下來的鏡像,可以使用 docker image ls 命令。

image.png

列表包含了 鏡像名、版本、鏡像 ID、創建時間 以及所占用的空間。

6.3. 刪除本地鏡像

如果要刪除本地的鏡像,可以使用 docker image rm 命令,其格式為:
docker image rm [選項] <鏡像1> [<鏡像2> ...]
備注:
用 ID、鏡像名、摘要刪除鏡像
其中,<鏡像> 可以是 鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要。
我們可以用鏡像的完整 ID,也稱為 長 ID,來刪除鏡像。使用腳本的時候可能會用長 ID,但是人工輸入就太累了,所以更多的時候是用 短 ID 來刪除鏡像。docker image ls 默認列出的就已經是短 ID 了,一般取前3個字符以上,只要足夠區分于別的鏡像就可以了。
例如:
docker image rm training/webapp

7. Docker 容器操作

7.1. 說在前面

/bin/bashlinux的命令行工具,類似于windowcmd進入dos系統

7.2. 查看容器

docker ps #查看啟動的容器
docker ps -a #查看所有容器,包含沒有啟動的容器

7.3. 啟動容器

啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。

因為 Docker 的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創建容器。

語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND: 容器啟動后進入容器中要執行的命令.
OPTIONS(常用選項)
-d:讓 Docker 在后臺運行而不是直接把執行命令的結果輸出在當前宿主機下
-t:選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上
-i:則讓容器的標準輸入保持打開。
--name:為容器命名
-v:創建數據卷
-p:綁定端口

7.3.1. 基于鏡像新建一個容器并啟動

docker run

例如:
docker run -p 8000:5000 –-name web training/webapp

實際操作舉例:

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

image.png
訪問本機
image.png

7.3.2. 后臺運行

更多的時候,需要讓 Docker 在后臺運行而不是直接把執行命令的結果輸出在當前宿主機下。此時,可以通過添加 -d 參數來實現。
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則讓容器的 標準輸入 保持打開。

在交互模式下,用戶可以通過所創建的終端來輸入linux命令
例如:

docker run -i -t centos /bin/bash
創建centos容器并且進入centos容器中

image.png

7.4. 終止容器
docker stop CONTAINER [CONTAINER...]

例:


image.png

7.5. 啟動一個停止的容器
docker start CONTAINER [CONTAINER...]

例:


image.png

7.6. 重啟容器
docker restart CONTAINER [CONTAINER...]

例:


image.png

7.7. 刪除容器
docker rm CONTAINER [CONTAINER...]
注意:刪除容器前 先關閉容器

例:


image.png

7.8. 獲取容器的輸出信息
docker logs CONTAINER [CONTAINER...]

例:


image.png

7.9. 進入容器
docker exec –i –t CONTAINER /bin/bash

例:


image.png

7.10. 主機和容器間拷貝文件
7.10.1. 容器拷貝到主機
docker cp CONTAINER:/opt/webapp/app.py d:/www

備注:
/opt/webapp/app.py: 容器中的文件
d:/www: 主機文件夾

例:


image.png
image.png

7.10.2. 主機拷貝到容器
docker cp f:/docker_test/文件 CONTAINER:/目標路徑

例:


image.png
image.png
8. 數據卷

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

  1. 數據卷 可以在容器之間共享和重用
  2. 對 數據卷 的修改會立馬生效
  3. 對 數據卷 的更新,不會影響鏡像
  4. 數據卷 默認會一直存在,即使容器被刪除

理解:
1.數據卷 的使用,類似于 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。
2.相當于將容器中的目錄 和 本機目錄映射起來,在本機目錄中修改代碼,增加文件等,會實時反映在容器目錄中

8.2. 為什么要使用數據卷

方便將本地主機中的代碼運行在docker容器中

8.3. 掛載數據卷的前提

授權本地磁盤
image.png

注意:點擊Apply的時候,會驗證本機賬戶,沒有設置密碼的話,去設置一個吧。

8.4. 掛載一個主機目錄作為數據卷
docker run -d -P 8000:5000 --name web -v f:/docker:/opt/webapp training/webapp

9. Docker應用-搭建PHP開發環境

9.1. 下載阿里云的lamp鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/itsource/centos-lamp:[鏡像版本號]
鏡像版本號就是TAG的值

9.2. 創建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內的root擁有真正的root權限。
-v 創建數據卷,將本地主機目錄掛著到容器的指定目錄中

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>

解決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)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容