一 什么是Docker
1. 基于Go語言的開源容器虛擬化平臺(tái)
- Docker 從 17.03之后分為 CE(Community Edition) 和 EE(Enterprise Edition)
- 17.03可以看做1.13.1的Bug修復(fù)版
- CentOs 6.x :1.7
2. 基于Linux容器技術(shù)(LXC)
- 命名空間:用于隔離:進(jìn)程港华,網(wǎng)絡(luò),IPC,掛載午衰,UTS,用戶
- 控制組:資源配額和度量立宜。
- 聯(lián)合文件系統(tǒng):輕量級(jí)、高性能的分層文件系統(tǒng)
- Linux網(wǎng)絡(luò)虛擬化:虛擬網(wǎng)絡(luò)設(shè)備(veth pair)
3. 口號(hào):Build, Ship and Run Any App, Anywhere
二 為什么要使用Docker
Docker's success is more the result of being in the right place at the right time for a trend that's much bigger than Docker.
核心:通過容器來打包應(yīng)用臊岸,解耦了應(yīng)用和運(yùn)行平臺(tái)橙数,實(shí)現(xiàn)了應(yīng)用的快速分發(fā)和部署——Docker第一次為應(yīng)用的開發(fā)、運(yùn)行和部署提供了”一站式“的實(shí)用解決方案扇单。
DevOps的夢(mèng)想:只需一次創(chuàng)建或配置商模,之后應(yīng)用可以在任何地方,任意時(shí)間正常運(yùn)行蜘澜。Docker是實(shí)現(xiàn)這一夢(mèng)想的瑞士軍刀:
- 更快速的交付和部署:環(huán)境標(biāo)準(zhǔn)統(tǒng)一
- 更高效的資源利用: 內(nèi)核級(jí)的輕量虛擬化
- 更方便的遷移和擴(kuò)展:目前各種運(yùn)行平臺(tái)都支持
- 更簡(jiǎn)單的分發(fā)管理:Dockfile施流,類Git機(jī)制,存儲(chǔ)復(fù)用鄙信,增量更新
Docker VS 傳統(tǒng)虛擬機(jī)
三 安裝Docker
Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum. CentOS 7 runs the 3.10 kernel, 6.5 does not. We make an exception for CentOS 6.5.To run Docker on CentOS-6.5 or later, you need kernel 2.6.32-431 or higher.
Centos 6.x
1. 添加yum源
[xiaoju@kvm96061 ~]$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
2. 更新yum源緩存: sudo yum update
3. 安裝:sudo yum install -y docker-engine
四 Docker 核心概念和架構(gòu)
三大核心概念:
1. 鏡像image:只讀模板瞪醋,由若干層layer組成。
2. 容器Container:從鏡像創(chuàng)建的應(yīng)用運(yùn)行實(shí)例装诡,一個(gè)輕量級(jí)沙盒银受,啟動(dòng)時(shí)在最上層創(chuàng)建了一個(gè)可寫層。
3. 倉庫Repository:類似git的project鸦采,保存同一類鏡像文件宾巍,分為Public & Private。
VS 倉庫注冊(cè)服務(wù)器(Registry渔伯,類似于git server顶霞,最著名的是Docker Hub)
五 Docker基礎(chǔ)用法
1.? exported-imported VS saved-loaded
導(dǎo)出后再導(dǎo)入(exported-imported)的鏡像會(huì)丟失所有的歷史,而保存后再加載(saved-loaded)的鏡像沒有丟失歷史和層(layer)锣吼。這意味著使用導(dǎo)出后再導(dǎo)入的方式选浑,你將無法回滾到之前的層(layer)蓝厌,同時(shí),使用保存后再加載的方式持久化整個(gè)鏡像古徒,就可以做到層回滾(可以執(zhí)行docker
tag來回滾之前的層)
Demo:
docker run mycentos /bin/echo "hello"
docker run -it --name demo? /bin/sh, docker top,docker attach
六 Dockerfile
一行行命令語句組成拓提,支持 #注釋
dockerfile分為四部分:基礎(chǔ)鏡像信息,維護(hù)者信息隧膘,鏡像操作命令和容器啟動(dòng)時(shí)執(zhí)行命令代态。
創(chuàng)建鏡像:docker build
.dockerignore 忽略不需要的文件和目錄
TIPS:
==- 精簡(jiǎn)鏡像用途
- 正確使用版本號(hào)
- 減少鏡像層數(shù)(盡量合并指令)
七 Docker compose (require engine>=1.10.0)
Compose是Docker的服務(wù)編排工具,主要用來構(gòu)建基于Docker的復(fù)雜應(yīng)用舀寓,Compose
允許用戶通過一個(gè)單獨(dú)的模板配置文件docker-compose.yml來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)胆数,非常適合組合使用多個(gè)容器進(jìn)行開發(fā)的場(chǎng)景。
例子:
`version:'2'services:web:image:wordpress:latestlinks:-
dbports:-"8002:80"environment:WORDPRESS_DB_HOST:db:3306WORDPRESS_DB_PASSWORD:123456db:image:mysqlenvironment:-
MYSQL_ROOT_PASSWORD=123456`
啟動(dòng)項(xiàng)目:docker-compose up