Docker
什么是Docker?
Docker 是個開源的應用容器引擎, 基于 Go語言 并遵從Apache2.0協議開源.
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中, 然后發布到任何流行的Linux機器上, 也可以實現虛擬化.
容器是完全使用沙箱機制, 相互之間不會有任何接口(類似iPone的 app), 更重要的是容器性能開銷極低.誰適合閱讀本教程?
適合運維工程師及后端開發人員.閱讀本教程前, 您需要了解的知識
你需要掌握Linux常用命令. 可通過linux教程來學習想著命令.Docker的應用場景
. Web應用的自動化打包和發布
. 自動化測試和持續集成、發布
. 在服務環境中部署和調整數據庫或其他的后臺應用
. 從頭編譯或者擴展現有的OpenShift或Cloud Foundry 平臺來搭建自己的PaaS環境.Docker的優點
1). 簡化程序:
Docker讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中, 然后發布到任何流行的Linux機器上, 便可以實現虛擬化. Docker改變了虛擬化的方式, 使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是Docker的最大優勢, 過去需要用數天乃至數周的任務, 在Docker容器的處理下, 只需要數秒就能完成。
2). 避免選擇恐懼癥
如果你有選擇恐懼癥, 還是資源患者. Docker幫你打包你糾結!
比如Docket鏡像: 其中包含了運行環境和配置, 所以Docker可以簡化部署多種應用實例工作. 比如 Web應用, 后臺應用,數據庫應用, 大數據應用(比如Hadoop集群), 消息隊列等待都可以打包成一個鏡像部署.
3). 節省開支:
一方面, 云計算時代到來,使開發者不必為了追求效果而配置高額的硬件, Docker改變了高性能必然高價格的思維定勢. Docker與云的結合, 讓云空間得到充分的利用. 不僅解決了硬件管理的問題,也改變了虛擬化的方式.
Docker 架構
Docker 使用客戶端-服務器(C/S)架構模式, 使用遠程API來管理和創建Docker容器.
Docker 容器 通過Docker鏡像來創建.
容器和鏡像的關系類似于面向對象中的對象與類.
Docker | 面向對象 |
---|---|
容器 | 對象 |
鏡像 | 類 |
Client( Docker客戶端 ) | Hosts( Docker 主機 ) | Registries( Docker倉庫 )
docker | local host | Docker hub |
---|---|---|
daemon | repository 1 | |
container 1 image 1 | image 1 | |
container 2 image 3 | image 2 | |
container 3 | repository 2 | |
remote host | private registry | |
daemon | repostory | |
Docker machine | container 3 image 3 | image 5 |
container 5 image 5 | image 5 | |
container 6 image 6 | image 6 |
Docker鏡像( Images ) | Docker鏡像是用于創建Docker容器的模板
Docker容器( Container ) | 容器是獨立運行的一個或一組應用
Docker客戶端( Client ) | Docker客戶端通過命令行或其他工具使用Docker API與Docker的守護進程通信.
Docker主機(Hosts) | 一個物理或虛擬的機器用于執行Docker守護進程和容器
Docker倉庫(Registry) | Docker倉庫用來保存鏡像, 可以理解為代碼控制中的代碼倉庫. Docker Hub提供了龐大的鏡像集合供使用.
Docker Machine| Docker machine是一個簡化Docker安裝的命令行工具, 通過一個簡單的命令行即可在相應的平臺上安裝Docker, 比如Virtual Box, Diigital Ocean, Microsoft Azure.
Docker的安裝: CentOS Docker安裝
Docker支持以下的CentOS版本:
. CentOS 7( 64-bit )
. CentOS 6.5 ( 64-bit ) 或更高的版本
前提條件:
目前, CentOS僅發行版本中的內核支持Docker.
Docker運行在 CentOS 7上, 要求系統為64位, 系統內核版本為3.10以上.
Docker運行在CentOS 6.5或更高的版本上, 要求系統為64位, 系統內核版本為 2.6.32-431或更高版本.使用yum 安裝( CentOS 7)
Docker要求CentOS系統的內核版本高于3.10, 查看前提條件來驗證你的CentOS版本是否支持 Docker
通過 uname -r 命令看系統當前內核版本
uname -r
- 安裝Docker
從2017年3月開始 Docker在原來的基礎上分為兩個分支版本: Docker CE 和 Docker EE.
Docker CE即社區免費版本, Docker EE即企業版, 強調安全, 但需付費使用.
我們介紹Docker CE的安裝使用.
移除舊的版本:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docket-selinux \
docker-engine-selinux \
docket-engine
安裝一些必要的系統工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加軟件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum緩存:
sudo yum makecache fast
安裝Docker-ce:
sudo yum -y install docker-ce
啟動 Docker后臺服務:
sudo service docker start
測試運行hello-world
docker run hello-world
使用腳本安裝Docker
- 使用sudo或root權限登錄 CentOS
- 確保yum 包更新到最新
sudo yum update
- 執行Docker安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
執行這個腳本會添加docker.repo源并安裝docker
- 啟動Docker進程
sudo service docker start
- 驗證docker是否安裝成功并在容器中執行一個測試的鏡像
sudo docker run hello-world
docer ps
到此, Docker安裝完成.
鏡像加速
鑒于國內網絡問題, 后續摘取Docker鏡像十分緩慢, 我們可以配置加速器來解決, 比如網易的鏡像地址:
http://hub-mirror.c.163.com
新版的Docker使用 /etc/docker/daemon.json( Linux ) 或者 %programdata%\docker\config\daemon.json(Windows) 來配置 Daemon。
可以該配置文件中加入(沒有該文件的話, 請先建一個):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
刪除 Docker CE
執行以下命令來刪除 Docker CE:
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
Docker 鏡像使用
當運行容器時, 使用的鏡像如果在本地不存在, docker就會自動從鏡像倉庫中下載, 默認是從 Docker Hub公共鏡像源下載
我們來學習:
. 管理和使用本地Docker主機鏡像
. 創建鏡像
1. 列出鏡像列表:
列出本地主機上的鏡像
docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE
centos | 6.8 | 90b555111e0 | 3 days ago | 233.3 MB
centos | 6.10 | ff1b555111e0 | 2 days ago | 238.3 MB
各個選項說明:
. REPOSITORY: 表示鏡像的倉庫源
. TAG: 鏡像的標簽
. IMAGE ID: 鏡像ID
. CREATEED: 鏡像創建時間
. SIZE: 鏡像大小
同一倉庫源可以有多個 TAG, 代表這個倉庫源的不同個版本, 如CentOS 倉庫源時, 有6.8, 6.10等多個不同的版本, 我們使用REPOSITORY:TAG來定義不同的鏡像.
所以, 我們如果使用版本為6.8的CentOS系統鏡像來運行容器時, 命令如下:
docker run -t -i centos:6.8 /bin/bash
若用6.10的則為:
docker run -t -i centos:6.10 /bin/bash
如果你不指定一個鏡像的版本標簽,例如你只使用 centos, docker 將默認使用 centos:latest鏡像
2. 獲取一個新的鏡像
當我們在本地主機上使用一個不存在的鏡像時 Docker 就會自動下載這個鏡像. 我們可以使用docker pull 命令來下載它.
docker pull centos:6.10
假定....
jin@jinLab:~$ docker pull centos:6.10
13.10: Pulling from library/centos
6599cadaf950: Pull complete
23eda618d451: Pull complete
f0be3084efe9: Pull complete
52de432f084b: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3
Status: Downloaded newer image for centos:6.10
下載完成后, 我們可以直接使用這個鏡像來運行容器.
3. 查找鏡像
我們可以從Docker Hub網站來搜索鏡像, Docker Hub 網址為: https://hub.docker.com/
我們也可以使用docker search 命令來搜索鏡像. 比如我們需要一個httpd的鏡像來作為我們的web服務. 我們可以通過docker search命令來搜索httpd 來尋找適合我們的鏡像.
docker search httpd
NAME: 鏡像倉庫源的名稱
DESCRIPTION: 鏡像的描述
OFFICIAL: 是否docker官方發布
4. 拖取鏡像
我們決定使用上圖中的 httpd 官方版本的鏡像, 使用命令 docker pull 來下載鏡像
docker pull httpd
jin@jinLab:~$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
8b87079b7a06: Pulling fs layer
a3ed95caeb02: Download complete
0d62ec9c6a76: Download complete
a329d50397b9: Download complete
ea7c1f032b5c: Waiting
be44112b72c7: Waiting
下載完成后, 我們就可以使用這個鏡像了
docker run httpd