docker的基本概念
提到docker容器化技術,不由自主就會想到虛擬機技術。容器化技術和虛擬機有哪些區別呢
- 容器和宿主機共享kernel,容器的kernel版本與宿主機一致
- 虛擬機能夠模擬輸入輸出,讓guest os能夠起來,也叫hypervisor,啟動很慢
- docker容器化不模擬輸入輸出,只是做宿主機輸入輸出的搬運工。(前提鏡像和宿主機架構一致,x86上不能模擬arm)
- 虛擬機有獨立的文件系統,進程系統,內存系統,而容器只是做了隔離。
Docker的架構圖

私服/mirror
搭建私服鏡像的操作方式
私服用來存放和拉取程序的打包image
mirror用來拉取網絡上的docker image:
network
host模式
host 模式,在run鏡像時以net=host啟動,容器和宿主機共用network space,不會虛擬network space。與宿主機共用ip,性能較優。
container模型
該模型是container之間共享一個network space。
bridge模式
bridge模式的容器,每個皆有獨立的network space,有獨立的ip,並將一個宿主機上的容器鏈接到一個虛擬bridge上。
overlay模式
overlay模式是一種跨宿主機的容器通信方案。二層VLAN也可以實現跨節點的容器之間網絡互通,但是需要改造現有網絡,二層vlan支持的節點有限制,不超過4000,另外一個廣播數據,在整個集群內都會傳播,浪費帶寬。overlay恰恰是針對以上問題,孕育而生的解決方案,約定通信協議,把二層報文進行封裝分發,報文中采用隔離的標識位,突破節點限制。
overlay創建的要素:
- 存儲服務(ectd/consul/zk);
- swarm集群。master和agent token注冊。swarm和consul的配合使用;
- 創建overlay類型的network;
- 啟動容器指定overlay網絡。
container net model自定義網絡模型
docker 發布了libnetwork項目,並退出了CNM模型,方便二次開發。
none模式
container容器優獨立的network space,但是沒有網卡,需要手動配置網卡,ip
image和container
image
鏡像是一堆只讀層的集合,但是對外是一個統一的文件系統
docker鏡像,根據鏡像的需要,base鏡像要小。RUN的命令能合成一行,不要拆成多行,每一行都會加一層layer。
另外安裝完,要刪除程序包。
docker image trees可以查看鏡像的繼承關系。
當base鏡像不斷升級,子鏡像如何切換不同的父鏡像,修改image的graph的json信息和aufs的鏡像層次描述文件,這是個小tricky,哈哈。
container
container 是鏡像的啟動實例。從結構上與image類型,但是最上層多了一個可讀寫層。
Dockerfile
是用來構建鏡像的配置文件,文件使用說明
注意幾點:
- ENV 命令配置的變量,只生效於 docker exec進行
- CMD和ENTRYPOINT,相互覆蓋。
- CMD命令中,命令不支持ENV變量
- CMD不支持多條命令。
- CMD可以用sh -c 的shell進程來執行多條命令,命令之間采用分號隔開。同事支持ENV環境變量
端口映射及磁盤映射
容器中的端口可以用 -p 宿主機端口:容器端口 映射出來。
容器文件持久化,可以參數 -v來映射宿主機上, -v 宿主機文件夾:容器文件夾。
通過目錄映射也可以配置信息共享。
container編排
利用docker-compose可以實現docker容器的集群啟動。需要編寫compose yaml文件。
可以參考compose的文件格式。
常用命令
docker命令:http://blog.chinaunix.net/uid-10915175-id-4443127.html
docker-compose命令:http://blog.csdn.net/zhiaini06/article/details/45287663
安裝
環境:centos 7
docker-engine安裝
sudo yum -y remove docker docker-common container-selinux
sudo yum -y remove docker-selinux
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://docs.docker.com/engine/installation/linux/repo_files/centos/docker.repo
sudo yum makecache fast
yum -y install docker-engine
docker --version
docker-compse安裝
yum -y install epel-release
yum -y install python-pip
pip --version
pip install docker-compose
增加私服
編輯 /usr/lib/systemd/system/docker.service
--insecure-registry 172.16.74.150
修改docker配置后,重啟
systemctl daemon-reload
service docker restart
