
容器,依托Linux內(nèi)核功能的虛擬化技術(shù)
docker 將軟件和庫部署在主系統(tǒng)上
特點(diǎn)
PaaS platform as service
Saas software as service
docker
- 客戶端/守護(hù)進(jìn)程
- 鏡像image,啟動容器的所有信息,層疊只讀文件系統(tǒng)
(1.boot fs (基礎(chǔ)鏡像)-> 2.root fs (ubuntu) -> 3.add emacs,appache聯(lián)合加載文件系統(tǒng)) - 容器 container 啟動和執(zhí)行階段,寫時復(fù)制copy on write,可寫層
創(chuàng)建新容器,創(chuàng)建可寫層+鏡像層=鏡像,有服務(wù)可運(yùn)行 - 倉庫 registry ,保存用戶構(gòu)建的鏡像
docker 容器基本操作
docker pull IMAGE
啟動交互式命令,有終端
docker run -it IMAGE /bin/bash
-i -interactive 交互,false 默認(rèn)
-t -tty 終端,false默認(rèn)查看容器
docker ps -la
-l 最新創(chuàng)建的容器
-a allinspect 檢查
docker inspect container_name/container_id自定義容器名字
docker run --name=name_self -ti mysql /bin/bash重新啟動停止的容器
docker start -i container_name刪除已經(jīng)停止的容器
docker rm container_name刪除鏡像
docker rmi image
docker 守護(hù)容器
docker run -it ubuntu /bin/bash
使用ctrl+p /ctrl +q退出,后臺運(yùn)行docker ps -a
查看容器在后臺仍然運(yùn)行docker attach container_iid
可以進(jìn)入容器docker run --name container_name -d ubuntu /bin/bash -c "while true,do echo hello word;done"
后臺執(zhí)行守護(hù)進(jìn)行-ddocker logs -f -t --tail container_name
-f --follow 一直跟蹤
-t --timestamps 打印時間戳
--tail = “all” 結(jié)尾多少數(shù)量的日志
ex:docker logs -tf --tail 10 container_name 最新的10條日志docker top container_name
查看運(yùn)行容器中的進(jìn)程docker exec -d -i -t container_name
在運(yùn)行中的容器內(nèi)啟動新進(jìn)程,開啟容器的多進(jìn)程
docker top 命令查看是否多進(jìn)程docker stop/kill container_name
stop 發(fā)送信號,讓容器停止,需要一定時間返回容器名字
kill 直接暴力停止容器運(yùn)行容器端口映射
-p --publish=[]
1.宿主機(jī)端口隨機(jī)對應(yīng) container port
docker run -p 80 -it ubuntu /bin/bash
2.都進(jìn)行指定端口 host port:container port
docker run -p 8080:80 -it ubuntu /bin/bash
3.對容器端口指定 ip:container port
docker run -p 0.0.0.0:80 -it ubuntu /bin/bash
4.對容器端口指定 ip:host port:container port
docker run -p 0.0.0.0:8080:80 -it ubuntu /bin/bash
容器內(nèi)部署靜態(tài)網(wǎng)站
修改nginx/defalut.conf
host port : http://localhost:12345
container port : http://172.17.0.1:80
docker inspect container_name
- stop-> start docker ,ip地址和端口都發(fā)生了改變
- ctrl+p 退出后臺運(yùn)行
docker exec -i container_name nginx 運(yùn)行一次nginx,
docker top 查看是否啟動
docker inspect container_name 查看對應(yīng)IP地址
1.control groups 控制組(分配資源)
- 資源限制-mem達(dá)到上限,outofmem
- 優(yōu)先級設(shè)定-更大磁盤io,CPU
- 資源計(jì)量
- 資源控制,掛起/恢復(fù)
隔離
文件系統(tǒng)(每個系統(tǒng)有自己root文件系統(tǒng)),
NET 網(wǎng)絡(luò)(虛擬網(wǎng)絡(luò)接口和IP地址是分開的),
PID,進(jìn)程(容器運(yùn)行在自己的進(jìn)程環(huán)境中),
MNT (掛在點(diǎn))資源隔離和分組(CPU,cgroups,內(nèi)存獨(dú)立分配給docker容器)
IPC 跨進(jìn)程通信訪問
docker 網(wǎng)絡(luò)鏈接
ifconfig 系統(tǒng)網(wǎng)絡(luò)設(shè)備
- 橋接/虛擬網(wǎng)卡docker0,網(wǎng)橋-osi七層(數(shù)據(jù)鏈路層:應(yīng)用,表示,會話,傳輸,網(wǎng)絡(luò),數(shù)據(jù)鏈路,物理)
ex:172.12.42.1,子網(wǎng)掩碼:255.255.0.0 -地址:65534個 - install brigde-utils 下載
- brctl show 查看網(wǎng)橋
自定義虛擬網(wǎng)橋
自定義 docker0
- ifconfig docker0 192.168.200.1 netmask 255.255.255.0
- service docker restart 重啟docker 服務(wù)
- 運(yùn)行容器,查看容器的ip地址
添加虛擬網(wǎng)橋
- brctl addbr br0
- ifconfig br0 192.168.100.1 netmask 255.255.255.0
更改docker 守護(hù)進(jìn)程的啟動配置
- /etc/default/docker 中添加DOCKER_OPS值="addbr"
-b=br0 - 重啟docker service
- ps -ef |grep docker
Dockerfile可以構(gòu)建鏡像
docker 倉庫,標(biāo)簽
- 不同標(biāo)簽對應(yīng)的是相同的倉庫
- 刪除注意
- 自定義鏡像以軟件形式打包并分發(fā)及其運(yùn)行環(huán)境
- docker commit 通過容器構(gòu)建
-- docker commit [options] CONTAINER [REPOSITORY:[TAG]]
-- -p 不讓容器暫停
-- ex: docker commit -a author -m "container_id/container_name" repo_name:tag - docker build 通過Dockerfile 文件構(gòu)建
First Dockerfile
FROM ubuntu:14:04
MANITAINER docker_hub_path_name
RUN apt-get update
RUN apt-get install -y nginx
expose 80
CMD /bin/bash
First Dockerfile volume
FROM ubuntu:14:04
VOLUME ["/a1","/a2"]
CMD /bin/bash
docker 構(gòu)建命令
docker build -t="image_name_tag"
- t --tag="tag name"
每一步返回一個id,這是中間層的鏡像
Docker Hub 查找與拉取鏡像 - pull,push,search
- 本地與遠(yuǎn)程鏡像互動操作
- docker hub 網(wǎng)站,需要注冊 賬號
- docker search ubuntu
- docker pull image ubuntu:tag
- docker 使用第三方平臺拉取鏡像
-- 修改docker的配置文件 /etc/default/docker DOCKER_OPTS = "加速地址"
-- 重啟docker 服務(wù)并查看docker 的守護(hù)進(jìn)程
-- 例如 :注冊daocloud,加速器-> 加速地址 - docker push 傳送鏡像到docker hub,提交修改的部分
docker 容器的數(shù)據(jù)卷volume
添加數(shù)據(jù)卷在啟動容器前
docker run -v ~/datavolume:/data -it ubuntu /bin/bash
-v volume 相當(dāng)于掛載
添加對數(shù)據(jù)卷的權(quán)限訪問
- docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash
:ro read only - docker inspect container_name
查看具體數(shù)據(jù)卷的權(quán)限
-- 獨(dú)立于docker 容器,分離docker容器的生存周期,可以目錄,文件進(jìn)行數(shù)據(jù)共享(一數(shù)據(jù)卷對多容器)
-- 容器對數(shù)據(jù)卷的修改是及時進(jìn)行的
-- 數(shù)據(jù)卷變化不會影響鏡像的更新
docker 容器的數(shù)據(jù)卷容器(不用暴露主機(jī)的目錄)
創(chuàng)建數(shù)據(jù)卷容器
- docker run --volumes-from container_name
創(chuàng)建容器后常見掛載數(shù)據(jù)卷
- 在數(shù)據(jù)卷容器內(nèi) touch 文件
查看host 主機(jī)的數(shù)據(jù)卷情況
- docker inspect --format="{{.Volumes}}" container_dv1
- docker inspect --format="{{.Volumes}}" container_dv2
總結(jié):
1.數(shù)據(jù)卷容器刪除,還是在容器查看對應(yīng)的數(shù)據(jù)卷信息,證明數(shù)據(jù)卷容器只是配置作用
2.docker 中如果一個容器的數(shù)據(jù)卷還是使用,就不會被刪除掉
數(shù)據(jù)卷的備份和還原-數(shù)據(jù)備份
docker run --volume-from [container_name] -v $(pwd 目錄:/backup ubuntu tar cvf /xvf /backup/backup.tar [container data volume ]
- cvf 壓縮
- xvf 解壓
docker run --volume-from dv1 -v /backup_datavolume:/backup --name dv2 ubuntu tar cvf /xvf /backup/backup.tar /datavolume1
host : /backup_datavolume
re ### 容器互聯(lián)
docker run -it --name --link:cct1:webtest container_path_name
重啟docker,仍然可以實(shí)現(xiàn)ip地址(容器)不變,容器之間可以互相鏈接
容器拒絕互聯(lián),通過ping驗(yàn)證
--icc= false
允許特定容器之間的互聯(lián)
--icc= false --iptables=true
--link
re ### Docker容器跨主機(jī)鏈接
- 網(wǎng)橋?qū)崿F(xiàn)跨主機(jī)容器鏈接
- 使用Open vSwitch實(shí)現(xiàn)跨主機(jī)容器鏈接(虛擬主機(jī))
- 使用weave實(shí)現(xiàn)跨主機(jī)容器鏈接(開源)
容器的集群管理Caas
容器的調(diào)度:docker swarm,kubernetes(google)
同步集群:etcd,zookeeper
服務(wù)發(fā)現(xiàn):etcd,haproxy
日志監(jiān)控:elk
云集容器管理
-- 除了以上
-- 網(wǎng)絡(luò)配置
-- 安全配置
-- 負(fù)載均衡
-- 數(shù)據(jù)持久化
-- 容錯、高可用Parcelles
Caas 概述
- 提供容器運(yùn)行平臺并管理容器所需資源
- Iaas靈活,Paas搬便利
- 支持多租戶
- 伸縮性-彈性的擴(kuò)大或縮小所需資源
- 可視化(UI)和可控性
Caas機(jī)遇和挑戰(zhàn)
1.共享容器技術(shù)帶來的所有優(yōu)勢
2.解決了Iaas和Paas在實(shí)踐中存在的問題
3.應(yīng)用開發(fā)專注于應(yīng)用開發(fā),一鍵配置
4.快速迭代,簡化部署
5.微服務(wù)的理想平臺
挑戰(zhàn):
1.共享容器技術(shù)不足
2.技術(shù)日新月異
3.容器鏡像云平臺化
4.國內(nèi)社區(qū)認(rèn)知度不高