您好,登錄后才能下訂單哦!
1. 背景
* Docker是Docker.inc公司開源的一個基于LXC技術之上構建的Container容器引擎,源代碼托管在GitHub上,基于Go語言并遵從Apache2.0協議開源。
* Docker項目的目標是實現輕量級的操作系統虛擬化解決方案。
* Docker是通過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。由于Docker通過操作系統層的虛擬化實現隔離,所以Docker容器在運行時,不需要類似虛擬機VM額外的操作系統開銷,提高資源利用率。
2. 優勢
* 部署簡單
* 管理簡單
* 秒級應用啟動
* 與宿主機使用同一個內核,性能損耗小
* 隔離性高
* 鏡像一次構建,到處運行
3. 應用場景
* 簡化配置,統一配置,通過鏡像快速啟動(Simplifying)
* 代碼流水線管理,開發環境->測試環境->預生產環境->灰度發布->正式發布,docker在這里實現了快速遷移(Code Oioeline Management)
* 開發效率,對開發人員,有了鏡像,直接啟動容器即可(Developer Productivity)
* 應用隔離,相對于虛擬機的完全隔離會占用資源,docker會比較節約資源(Applsolation)
* 服務器整合,一臺服務器跑多個docker容器,提高服務器的利用率(Server Consolidation)
* 調試能力,debug調試(Debugging Capabilties)
* 多租戶,一個租戶多個用戶,類似于阿里公有云的一個project下多個用戶(Multi-tenancy)
* 快速部署,不需要啟動操作系統,實現秒級部署(Rapid Deplovment)
4. docker相關注意
* 容器不同于虛擬機
* 容器理論推薦單一進程
* 容器不如虛擬機來得成熟
* 容器可以在幾分之一秒內啟動
* 容器已在大規模環境證明了自身的價值
* IT人員稱容器為輕量級
* Docker已成為容器的代名詞,但它不是唯一的提供者
* 容器能節省IT人力,加快業務更新效率
5. docker與容器本身意義
* 面向產品: 簡化交付流程
* 面向開發: 簡化環境配置
* 面向測試: 多版本測試
* 面向運維: 簡化環境問題
* 面向架構: 自動化擴容 [ 微服務 ]
6. 使用Docker原因
作為一種新興的虛擬化方式,Docker跟傳統的虛擬化方式具有眾多的優勢。
首先,Docker容器的啟動可以在秒級實現,這相比傳統的虛擬機方式要快得多。其次,Docker對系統資源的利用率很低,一臺主機上可以同時運行數千個Docker容器。
6. docker相關概念
** 鏡像 [ p_w_picpath ]
* Docker鏡像就是一個只讀的模板。
例如:一個鏡像可以包含一個完整的CentOS操作系統環境,里面僅安裝了Apache或用戶需要的其他應用程序。
鏡像可以用來創建Docker容器。
Docker提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那里下載一個已經做好的鏡像來直接使用。
** 容器 [ container ]
* Docker利用容器來運行應用。
容器是從鏡像創建的運行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的,保證安全的平臺。
可以把容器看做是一個簡易版的Linux環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
** 倉庫 [ registry ]
* 倉庫是集中存放鏡像文件的場所。有時候把倉庫和倉庫注冊服務器(Registry)混為一談,并不嚴格區分。實際上,倉庫注冊服務器上往往存放著多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括Docker Pool等,可以提供大陸用戶更穩定快讀的訪問。
當用戶創建了自己的鏡像之后就可以使用push命令將它上傳到公有或者私有倉庫,這樣下載在另外一臺機器上使用這個鏡像時候,只需需要從倉庫上pull下來就可以了。
7. docker實戰
* 系統環境 [ docker運行環境推薦在 linux 內核大于 2.6 ]
[root@docker ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@docker ~]# uname -r 3.10.0-327.36.3.el7.x86_64
* docker 服務安裝
[root@docker ~]# yum install docker
* 啟動 docker 服務
[root@docker ~]# systemctl start docker.service
* 查看 docker 版本信息
[root@docker ~]# docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64 Go version: go1.7.4 Git commit: 1398f24/1.12.6 Built: Fri May 26 17:28:18 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64 Go version: go1.7.4 Git commit: 1398f24/1.12.6 Built: Fri May 26 17:28:18 2017 OS/Arch: linux/amd64
* 在 docker hub 倉庫上搜索鏡像[ 默認從docker.io上搜索 ]
docker search 鏡像名稱:版本號[ 不填默認為latest ]
INDEX: 搜索源
NAME: 鏡像名稱
DESCRIPTION: 描述
STARS: 下載次數
OFFICIAL: 是否官方
AUTOMATED: 是否自動化
[root@docker ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 3397 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8... 70 [OK] docker.io docker.io/nimmis/java-centos This is docker p_w_picpaths of CentOS 7 with dif... 26 [OK] docker.io docker.io/gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 19 [OK]
* 從 docker hub 倉庫上獲取(下載)鏡像至本地庫 [ 默認從docker.io上下載 ]
docker pull 鏡像名稱:版本號[ 不填默認為latest ]
[root@docker ~]# docker pull centos
* 查看本地庫所有鏡像
docker p_w_picpaths
[root@docker ~]# docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 3bee3060bfc8 9 days ago 192.5 MB
* 導出本地庫鏡像
docker save 鏡像名稱:版本號 > 導出文件名
[root@docker ~]# docker save centos > centos.tar.gz
* 刪除本地庫鏡像
docker rmi 鏡像名稱:版本號
[root@docker ~]# docker rmi centos Untagged: centos:latest Untagged: docker.io/centos@sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9 Deleted: sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d
* 導入鏡像文件至本地庫
docker load < 鏡像文件
[root@docker ~]# docker load < centos.tar.gz Loaded p_w_picpath: docker.io/centos:latest
* 新建容器并運行
當利用docker run來創建容器時,Docker在后臺運行的標準操作包括:
* 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
* 利用鏡像創建并啟動一個容器
* 分配一個文件系統,并在只讀的鏡像層外面掛在一層可讀寫層
* 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
* 從地址池配置一個ip地址給容器
* 執行用戶指定的應用程序
* 執行完畢后容器被終止
docker run [option....]
例如:運行一個容器,指定名稱為hello, 輸出hello之后終止容器
[root@docker ~]# docker run --name hello centos echo "hello" hello
例如:啟動一個容器,指定bash命令,并進入容器內部
-i: 則讓容器的標準輸入保持打開。
-t: 讓Docker分配一個偽終端,并綁定到容器的標準輸入上
/bin/bash: 執行一個命令
[root@docker ~]# docker run -it centos /bin/bash [root@b4473c885f51 /]# pwd /
* 退出并不關閉容器
ctrl + p + q
[root@f91270f431bd /]# [root@docker ~]#
* 啟動已終止容器
docker start 容器名稱
[root@docker ~]# docker start hello hello
*以守護進程運行
更多的時候,需要讓Docker容器在后臺以守護形式運行。此時可以通過添加-d參數來實現。
docker run -d [opation...]
[root@docker ~]# docker run --name daemon -d centos /bin/bash 6fd939dd05004e18248e04d10de88076c61878aea904093e24e122a907371234
* 查看正在運行的容器
docker ps
[root@docker ~]# docker ps
* 查看所有容器
[root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 65c0868177e7 centos "/bin/bash" 34 seconds ago Exited (0) 32 seconds ago daemon
* 停止正在運行的容器
docker stop 容器名稱或唯一容器ID [容器ID通過ps CONTAINER ID 查看]
[root@docker ~]# docker stop daemon daemon
* 刪除已停止的容器
docker rm 容器名稱或唯一容器ID [容器ID通過ps CONTAINER ID 查看]
[root@docker ~]# docker rm daemon daemon
8. 總結
以需求驅動技術,技術本身沒有優略之分,只有業務之分。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。