docker容器初探—基本概念和基礎命令用法
linux
-------------------------------------------------------------------------------------------------------------------------------------------
web
一、LXC:Linux Container,針對於Linux內核容器功能的用戶空間接口,docker剛問世時基於LXC之上,後期發展摒棄了LXC,lxc -> libcontainer -> runCvim
容器基於鏡像啓動,若是本地沒有,docker會去ftp倉庫拉取鏡像到本地bash
三、Cgroups和namespace是docker的核心技術網絡
(1)docker的kernel namespace(內核名稱空間)六個重要元素:ipc uts mount pid network user架構
perf_event 對cgroup中的任務進行統一性能測試
net_cls cgroup中的任務建立的數據報文的類別標識符
OCI:Open Container Initiative,旨在圍繞容器格式和運行時制定一個開放的工業化標準
聯合掛載:上3層均可以看到底層的/var/log,假設當第二層執行rm /tmp/a.txt後,上3層看不到/tmp/a.txt,但底層的/tmp/a.txt依然在。最上一層爲可寫層(其它層只讀),平時修改操做都在可寫層進行,因此修改完成後底層鏡像沒有變更,變更的只是可寫層
aufs:advanced multi-layered unification filesystem:高級多層統一文件系統,用於爲Linux文件系統實現聯合掛載
overlayfs:aufs的競爭產品,自從3.18版本被合併到Linux內核,也就是說CentOS7內核版本3.10未打補丁是不支持的,用的仍是devicemapper,雖然說redhat給內核打了補丁,不過支持度確定仍是遠不如Ubuntu默認的aufs
(1)基於一個鏡像,能夠啓動多個容器,供多個容器之間共享使用
(2)正常狀況下一個docker容器只容許運行一個進程和其子進程,不然容器還須要一個進程管理器
image、contain、networks、volumes、plugins、other object
八、docker的registry倉庫可分爲:其中的鏡像名的引用相似於httpd:v2.4.32,引用2.4.32版本的httpd
一、docker的社區版:moby,也稱做docker-ce
阿里雲鏡像站的docker-ce下,建議使用較新版本,k8s只支持到docker的17.03版
下載docker-ce.repo文件到yum源文件,yum -y install docker-ce
注意:安裝過程當中出現如下界面,請填寫一個epel源,以後重裝container-selinux
複製如下代碼到/etc/yum.repos.d/目錄下新建的repo文件
name=CentOS-$releasever - Base - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Updates - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Plus - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
(1)編輯/usr/lib/systemd/system/docker.service
登陸阿里雲帳號,以後轉入cr.console.aliyun.com,開通,界面以下
(3)開啓docker須要/proc/sysnet/brige/bridge-nf-call-iptables和/proc/sysnet/brige/bridge-nf-call-ip6tables爲1,常保存須要vim /etc/sysctl.d/docker.conf,寫入net.bridge.bridge-nf-call-iptables = 1和
net.bridge.bridge-nf-call-ip6tables = 1
完成後systemctl daemon-reload;systemctl restart docker
二、docker image pull alpine:從倉庫向本地拖鏡像,不用標籤默認用最新版alpine
四、docker image inspect alpine:顯示鏡像詳細信息
五、docker image rm alpine:3.8,刪除alpine3.8鏡像
六、docker image tag httpd:2.4.37-alpine httpd:2.4,給標籤爲2.4.37-alpine的httpd鏡像增長標籤httpd:2.4
docker image tag httpd:2.4.37-alpine chenux/httpd:2.4
docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4,只有這麼打上主機標籤纔會認爲是本身的docker庫,不然系統會認爲是官方的docker庫
添加鏡像tag,docker image tag httpd:2.4.37-alpine httpd:2.4,docker image tag busybox:1.29 chenux/busybox:2.4
docker image tag httpd:2.4.37-alpine reg.chenux.com:8443/chenux/httpd:2.4
注:一個鏡像能夠有多個tag標籤,但一個tag標籤只能有一個鏡像
七、docker container run --name alpine1 -it alpine:3.8
docker container run --name alpine1 alpine:3.8 -d
注:這裏httpd能夠後臺運行是由於鏡像裏CMD中有個httpd-foreground前臺運行,因此此時-d剝離後依然存在,而alpine鏡像因爲沒有前臺運行的指令,因此此法建立出後是退出狀態
docker container run --name alpine1 -it alpine:3.8 --rm alpine
啓動一個容器,名字叫alpine1,打開其交互界面,中止後刪除該容器
八、docker container ls,查看docker容器狀態信息
九、docker container start httpd1,啓動一個關閉的容器
啓動docker container start httpd1
docker container start -i doc7
十、docker container attach doc7,其餘終端使用該命令關聯一個容器的終端,前臺運行光標閃爍
十二、docker logs:用來獲取和顯示docker控制檯的日誌
1三、docker container exec,非交互式突破容器外殼進入容器內部執行命令
docker exec web1 -it /bin/bash, 交互式突破容器外殼進入容器內部執行命令
1四、docker top web1,對web1的容器查看內部運行狀態
1五、docker container stats,獲取當前全部容器cpu、內存、網絡io、磁盤io的消耗
1六、docker container pause,暫停容器
docker container unpause ,繼續運行暫停的容器
docker kill相似於virsh中的destroy,通常狀況不建議使用,除非docker在使用中遇到了錯誤
OOM:out of memory,非計劃內終止,容器所在的宿主機內存資源耗盡,此時系統會自動殺死佔用內存最大的由docker內的服務進程,此時須要定製策略,看此服務進程是重啓仍是進入stopped狀態
由於docker的鏡像採用是聯合掛載,所以對鏡像的修改製做,實質上是對鏡像最上層可寫層進行寫操做保存,對底層鏡像並無修改
docker container run --name b1 -it busybox
docker commit,用於該容器可寫層寫的數據保存爲一個鏡像層
docker commit doc7,保doc7這個容器可寫層
docker image tag IMAGEID mycentos:7
四、若是有需求,還能夠繼續使用docker commit -c 命令修改須要鏡像的指令的內部
docker commit -a "chenux" -c 'CMD ["/usr/sbin/httpd","-DFOREGROUND"]' -p centos-base1 centos-httpd:v0.2-2.4
修改centos-base1鏡像,添加做者信息chenux,由CMD中的/bin/bash命令改成了/usr/sbin/httpd,-DFOREGROUND,建立過程當中暫停容器,新鏡像名字叫centos-httpd:v0.2-2.4
五、推送時鏡像標籤須要和服務器保持一致,阿里雲提示的操做指南會有
(2)添加標籤
docker image save IMAGE-ID -o /DIR/*.tar