概念和理解
Docker是一個容器引擎。doker官方網站
一個容器實際上是運行在宿主機上的一個進程。只不過在啟動這個進程之前,進行了一些特別的處理,讓這個進程進入一個虛擬的環境。
每個docker容器運行在獨立的虛擬環境中,最重要的是文件系統的讀寫系統。依賴于Linux內涵的兩個特性:
Namespaces命名空間:是一種封裝的概念,提供了系統資源的隔離
- PID 進程隔離
- NET 管理網絡接口
- IPC 管理跨進程通信的訪問
- MNT 管理掛載點
- UTS 隔離內核
Control groups控制組:用來分配資源,Linux kernel 2.6.24 版本開始擁有
- 資源限制:對進程組進行內存使用限制
- 優先級設置
- 資源計量
- 資源控制:可以將進程組掛起和恢復
Docker容器的能力:
- 文件系統隔離
- 進程隔離
- 網絡隔離
- 資源隔離和分組

aa
目標:
- 輕量級的建模方式
- 職責與邏輯分離
- 快速高效開發生命周期
- 鼓勵使用面向服務的框架
什么場合可以使用:
- 使用Docker容器進行開發,測試,部署服務
- 創建隔離的運行環境
- 搭建測試環境,特別是集群環境
- 構建Paas
- 提供Saas
安裝
# 確認64位系統
uname -i
# 確認Linux內涵版本,內部版本必須>=3.10
uname -r
# 安裝在CentOS 7
yum -y install docker
# 安裝在CentOS 6
yum -y install docker-io
啟動
# 啟動
systemctl start docker.service
# 停止
systemctl stop docker.service
# 運行命令的幫助
sudo docker help run
加速器
https://dashboard.daocloud.io/
https://cloud.docker.com
Docker核心概念
Docker是C/S架構(客戶端,守護進程)

整體示意圖
有下面三個核心概念:
- 倉庫
Registry概念:本地Registry,官方Registry
保存用戶的鏡像,Docker Hub是一個官方倉庫。減少構建時間
從官方倉庫拉取鏡像,可以使用daocloud提供的加速器服務
docker pull redis:2.8.19
- 鏡像
Docker鏡像:暫時可以理解為目錄,是容器的源代碼,每一個容器啟動的時候在鏡像中進行復制,然后啟動容器。
最底端是引導文件系統 bootfs
引導文件系統 rootfs永遠是只讀狀態,聯合加載(加載多個文件系統,進行疊加)
基礎鏡像+聯合加載文件系統
# 查看鏡像
# 鏡像ID,鏡像tag,鏡像倉庫,倉庫+tag可以唯一標識一個鏡像
docker images

page
- 容器
是啟動和執行階段,通過鏡像來啟動。鏡像中只讀層永遠是只讀的,在寫的時候進行復制,生成副本
Docker容器:守護式容器,交互式容器
參數:
-it 用于創建交互式容器
-d 用于創建守護式容器
-name 給容器指定名稱 - 試驗一個web服務器
# 創建交互式容器
docker run -p 80 --name web -i -t ubuntu /bin/bash
# 安裝Nginx
apt-get update
apt-get install -y nginx
# 安裝vim
apt-get install -y vim
# 創建網站目錄
mkdir -p /var/www/html
cd /var/www/html
# vim創建一個靜態頁面
# nginx配置文件
鏡像
鏡像:名字,TAG
鏡像文件是分層的
- 可以使用pull命令從倉庫獲取鏡像
sudo docker pull registory.hub.docker.com/ubuntu:latest
從注冊服務器:registory.hub.docker.com
倉庫:ubuntu
標記:latest
- 通過鏡像創建容器
sudo docker run -i -t ubuntu /bin/bash
- 查看鏡像信息
docker images
查看信息包括:倉庫,TAG,唯一ID,創建時間,鏡像大小
通過倉庫和TAG可以唯一確定一個鏡像
可以為本地鏡像增加TAG
docker tag docker.io/konstruktoid/ubuntu:latest ubuntu:linxm
查看鏡像詳細信息
docker inspect ununtu:linxm
鏡像尋找
docker search mysql
刪除鏡像
docker rmi ubuntu:linxm
創建鏡像
創建鏡像有三種:
- 基于已有鏡像的容器創建
$ docker run -it ubuntu:linxm /bin/bash
$ touch test
$ exit
$ docker ps -a
$ docker commit -m "增加一個文件" -a "作者" 6b1924dabf20 test
上面的例子是增加了一個文件,更新鏡像
- 基于本地模板導入
# 存出:鏡像保存到本地文件
$ docker save -o ubuntu.tar ubuntu:linxm
# 載入:將鏡像載入
$ docker load --input ubuntu.tar
# 上傳鏡像
$ docker push NAME:tag
- 基于Dockerfile創建
容器
查看本機存在的容器
# 查看容器
$ docker ps -a
# 刪除容器,指定一個容器ID
$ docker rm 394
容器是鏡像的一個運行實例,它帶有額外的可寫文件層
創建容器,啟動容器,終止容器,進入容器執行操作,刪除容器,容器遷移
# 創建容器
$ docker create -it ubuntu:lastest
$ docker ps -a
$ docker run ubuntu /bin/echo 'Hello world'
一種是基于鏡像新建一個容器并啟動,另一個是將終止狀態的容器重新啟動。
獲取容器的輸出信息
$ docker logs 1afe
終止容器
$ docker stop 1afe
主要命令如下:
# 會啟動新的shell,鏡像有自己的默認命令
sudo docker run -it centos:6 /bin/bash
# 查看docker容器
docker ps
docker ps -a
# docker容器的詳細信息
docker inspect
docker inspect -f
# 查看IP地址
docker inspect -f '{{.NetworkSettings.IPAddress}}' f311b
交互式容器的操作:
在交互式容器基礎上,ctrl+p,ctrl+q進入守護式容器
進入守護式容器:docker attach 容器名字
停止容器:docker stop 容器名
運行容器的端口:-p 80 -P 全部