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

原文地址(歡迎訪問):
http://m.itdecent.cn/p/6a6eee0d9ea5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

f703738da977391281957edbf0198618377ae2dd.jpg

2.2. Docker 能夠做什么

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

docker.jpg

2.3. 為什么使用 Docker

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

2.4. Docker 項目架構(gòu)

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

docker.jpg

2.5. Docker 的基本概念

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

2.5.2. 容器(Container
Docker 利用容器(Container)來運行應(yīng)用。容器是從鏡像創(chuàng)建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺??梢园讶萜骺醋鍪且粋€簡易版的 Linux 環(huán)境(包括root用戶權(quán)限、進程空間、用戶空間和網(wǎng)絡(luò)空間等)和運行在其中的應(yīng)用程序。
文件系統(tǒng)隔離技術(shù)使得Docker成為了一個非常有潛力的虛擬化技術(shù)。在容器中可以對文件進行修改、刪除、創(chuàng)建。

2.5.3. 倉庫(Registry
倉庫(Repository)是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務(wù)器(Registry)混為一談,并不嚴格區(qū)分。實際上,倉庫注冊服務(wù)器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標(biāo)簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。最大的公開倉庫是 Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括 時速云 、網(wǎng)易云 等,可以提供大陸用戶更穩(wěn)定快速的訪問。當(dāng)然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個私有倉庫。
當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 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)信息:

docker.jpg

查看版本號:
win+R 輸入 cmd 進入 dos 系統(tǒng)就可以看到

docker.jpg

3.1.2. 電腦支持虛擬化

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

docker.jpg

在BIOS下開啟虛擬化虛擬化:

docker.jpg

3.1.3. 開啟Hyper-V

windows設(shè)置 -> 應(yīng)用 -> 應(yīng)用和功能 -> 程序和功能 -> 啟用和關(guān)閉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的圖標(biāo)

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. 設(shè)置Docker

5.1. 切換到Linux容器下

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

docker.jpg

5.2. 鏡像加速

鑒于國內(nèi)網(wǎng)絡(luò)問題,后續(xù)拉取 Docker 鏡像十分緩慢,強烈建議安裝 Docker 之后配置 國內(nèi)鏡像加速。

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

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

5.2.2. 配置docker加速器

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

docker.jpg

5.2.3. 檢查加速器是否生效

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

docker.jpg
6. Docker 鏡像操作

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

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

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

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

例如:

docker pull training/webapp
docker pull busybox
docker pull centos
備注:↓
training/webapp : pythonapp
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/bashlinux的命令行工具,類似于windowcmd進入dos系統(tǒng)

7.2. 查看容器

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

7.3. 啟動容器

啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止?fàn)顟B(tài)(stopped)的容器重新啟動。

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

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

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

docker run

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

實際操作舉例:

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

docker.jpg

訪問本機

docker.jpg

7.3.2. 后臺運行

更多的時候,需要讓 Docker 在后臺運行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前宿主機下。此時,可以通過添加 -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)并綁定到容器的 標(biāo)準輸入 上
-i則讓容器的 標(biāo)準輸入 保持打開。

在交互模式下,用戶可以通過所創(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...]
注意:刪除容器前 先關(guān)閉容器

例:

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.jpg
docker.jpg

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

例:

docker.jpg
docker.jpg
8. 數(shù)據(jù)卷

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

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

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

8.2. 為什么要使用數(shù)據(jù)卷

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

8.3. 掛載數(shù)據(jù)卷的前提

授權(quán)本地磁盤
docker.jpg

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

8.4. 掛載一個主機目錄作為數(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容器并且運行
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)并綁定到容器的標(biāo)準輸入上,
-t 則讓容器的標(biāo)準輸入保持打開。
-d 則讓容器在后臺運行。
--name lamp為容器起名為lamp
--privileged=true 讓container內(nèi)的root擁有真正的root權(quán)限。
-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. 導(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>](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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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