概念和理解
Docker是一個(gè)容器引擎呵曹。doker官方網(wǎng)站
一個(gè)容器實(shí)際上是運(yùn)行在宿主機(jī)上的一個(gè)進(jìn)程稠通。只不過在啟動(dòng)這個(gè)進(jìn)程之前赠幕,進(jìn)行了一些特別的處理辐宾,讓這個(gè)進(jìn)程進(jìn)入一個(gè)虛擬的環(huán)境狱从。
每個(gè)docker容器運(yùn)行在獨(dú)立的虛擬環(huán)境中,最重要的是文件系統(tǒng)的讀寫系統(tǒng)叠纹。依賴于Linux內(nèi)涵的兩個(gè)特性:
Namespaces命名空間:是一種封裝的概念季研,提供了系統(tǒng)資源的隔離
- PID 進(jìn)程隔離
- NET 管理網(wǎng)絡(luò)接口
- IPC 管理跨進(jìn)程通信的訪問
- MNT 管理掛載點(diǎn)
- UTS 隔離內(nèi)核
Control groups控制組:用來分配資源,Linux kernel 2.6.24 版本開始擁有
- 資源限制:對(duì)進(jìn)程組進(jìn)行內(nèi)存使用限制
- 優(yōu)先級(jí)設(shè)置
- 資源計(jì)量
- 資源控制:可以將進(jìn)程組掛起和恢復(fù)
Docker容器的能力:
- 文件系統(tǒng)隔離
- 進(jìn)程隔離
- 網(wǎng)絡(luò)隔離
- 資源隔離和分組
目標(biāo):
- 輕量級(jí)的建模方式
- 職責(zé)與邏輯分離
- 快速高效開發(fā)生命周期
- 鼓勵(lì)使用面向服務(wù)的框架
什么場(chǎng)合可以使用:
- 使用Docker容器進(jìn)行開發(fā)誉察,測(cè)試与涡,部署服務(wù)
- 創(chuàng)建隔離的運(yùn)行環(huán)境
- 搭建測(cè)試環(huán)境,特別是集群環(huán)境
- 構(gòu)建Paas
- 提供Saas
安裝
# 確認(rèn)64位系統(tǒng)
uname -i
# 確認(rèn)Linux內(nèi)涵版本持偏,內(nèi)部版本必須>=3.10
uname -r
# 安裝在CentOS 7
yum -y install docker
# 安裝在CentOS 6
yum -y install docker-io
啟動(dòng)
# 啟動(dòng)
systemctl start docker.service
# 停止
systemctl stop docker.service
# 運(yùn)行命令的幫助
sudo docker help run
加速器
https://dashboard.daocloud.io/
https://cloud.docker.com
Docker核心概念
Docker是C/S架構(gòu)(客戶端驼卖,守護(hù)進(jìn)程)
有下面三個(gè)核心概念:
- 倉庫
Registry概念:本地Registry,官方Registry
保存用戶的鏡像鸿秆,Docker Hub是一個(gè)官方倉庫酌畜。減少構(gòu)建時(shí)間
從官方倉庫拉取鏡像,可以使用daocloud提供的加速器服務(wù)
docker pull redis:2.8.19
- 鏡像
Docker鏡像:暫時(shí)可以理解為目錄卿叽,是容器的源代碼桥胞,每一個(gè)容器啟動(dòng)的時(shí)候在鏡像中進(jìn)行復(fù)制,然后啟動(dòng)容器考婴。
最底端是引導(dǎo)文件系統(tǒng) bootfs
引導(dǎo)文件系統(tǒng) rootfs永遠(yuǎn)是只讀狀態(tài)贩虾,聯(lián)合加載(加載多個(gè)文件系統(tǒng),進(jìn)行疊加)
基礎(chǔ)鏡像+聯(lián)合加載文件系統(tǒng)
# 查看鏡像
# 鏡像ID沥阱,鏡像tag整胃,鏡像倉庫,倉庫+tag可以唯一標(biāo)識(shí)一個(gè)鏡像
docker images
- 容器
是啟動(dòng)和執(zhí)行階段,通過鏡像來啟動(dòng)屁使。鏡像中只讀層永遠(yuǎn)是只讀的在岂,在寫的時(shí)候進(jìn)行復(fù)制,生成副本
Docker容器:守護(hù)式容器蛮寂,交互式容器
參數(shù):
-it 用于創(chuàng)建交互式容器
-d 用于創(chuàng)建守護(hù)式容器
-name 給容器指定名稱 - 試驗(yàn)一個(gè)web服務(wù)器
# 創(chuàng)建交互式容器
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
# 創(chuàng)建網(wǎng)站目錄
mkdir -p /var/www/html
cd /var/www/html
# vim創(chuàng)建一個(gè)靜態(tài)頁面
# nginx配置文件
鏡像
鏡像:名字蔽午,TAG
鏡像文件是分層的
- 可以使用pull命令從倉庫獲取鏡像
sudo docker pull registory.hub.docker.com/ubuntu:latest
從注冊(cè)服務(wù)器:registory.hub.docker.com
倉庫:ubuntu
標(biāo)記:latest
- 通過鏡像創(chuàng)建容器
sudo docker run -i -t ubuntu /bin/bash
- 查看鏡像信息
docker images
查看信息包括:倉庫,TAG酬蹋,唯一ID及老,創(chuàng)建時(shí)間,鏡像大小
通過倉庫和TAG可以唯一確定一個(gè)鏡像
可以為本地鏡像增加TAG
docker tag docker.io/konstruktoid/ubuntu:latest ubuntu:linxm
查看鏡像詳細(xì)信息
docker inspect ununtu:linxm
鏡像尋找
docker search mysql
刪除鏡像
docker rmi ubuntu:linxm
創(chuàng)建鏡像
創(chuàng)建鏡像有三種:
- 基于已有鏡像的容器創(chuàng)建
$ docker run -it ubuntu:linxm /bin/bash
$ touch test
$ exit
$ docker ps -a
$ docker commit -m "增加一個(gè)文件" -a "作者" 6b1924dabf20 test
上面的例子是增加了一個(gè)文件范抓,更新鏡像
- 基于本地模板導(dǎo)入
# 存出:鏡像保存到本地文件
$ docker save -o ubuntu.tar ubuntu:linxm
# 載入:將鏡像載入
$ docker load --input ubuntu.tar
# 上傳鏡像
$ docker push NAME:tag
- 基于Dockerfile創(chuàng)建
容器
查看本機(jī)存在的容器
# 查看容器
$ docker ps -a
# 刪除容器骄恶,指定一個(gè)容器ID
$ docker rm 394
容器是鏡像的一個(gè)運(yùn)行實(shí)例,它帶有額外的可寫文件層
創(chuàng)建容器匕垫,啟動(dòng)容器僧鲁,終止容器,進(jìn)入容器執(zhí)行操作象泵,刪除容器寞秃,容器遷移
# 創(chuàng)建容器
$ docker create -it ubuntu:lastest
$ docker ps -a
$ docker run ubuntu /bin/echo 'Hello world'
一種是基于鏡像新建一個(gè)容器并啟動(dòng),另一個(gè)是將終止?fàn)顟B(tài)的容器重新啟動(dòng)偶惠。
獲取容器的輸出信息
$ docker logs 1afe
終止容器
$ docker stop 1afe
主要命令如下:
# 會(huì)啟動(dòng)新的shell春寿,鏡像有自己的默認(rèn)命令
sudo docker run -it centos:6 /bin/bash
# 查看docker容器
docker ps
docker ps -a
# docker容器的詳細(xì)信息
docker inspect
docker inspect -f
# 查看IP地址
docker inspect -f '{{.NetworkSettings.IPAddress}}' f311b
交互式容器的操作:
在交互式容器基礎(chǔ)上,ctrl+p,ctrl+q進(jìn)入守護(hù)式容器
進(jìn)入守護(hù)式容器:docker attach 容器名字
停止容器:docker stop 容器名
運(yùn)行容器的端口:-p 80 -P 全部